WADL

SOA

 

WADL

 

越来越多的 依赖于Web的企业(像Google, Yahoo, Amazon, Flickr等)正在开发基于HTTP的应用(通过XML访问其内部数据)。基于文本的协议描述基于XMLSchema的数据格式描述来描述应用;为了使用这种基于HTTP的web应用(尤其是使用XML进行交互的应用),WADL被设计用来提供一种机器可处理的协议描述格式。

 

1,Web应用(Web Application

Web应用被定义为一种基于HTTP的应用,它们的交互应该能够被计算机处理。有很多存在的Web站点(比如一些基于HTTP的应用),为了能成功地运用他们,大量的这些站点都需要人来识别它们的功能

基于已经存在的Web架构和基础结构

不依赖于特定的平台和编程语言

促进了应用的重用(不仅限于浏览器)

能够和其他的Web应用或桌面应用集成。

使用它们的过程中交换的内容(表象)有明确的语义

 

最后一个必须遵守的要求是使用自描述的数据格式,比如XMLJSONXML尤其适合,因为它允许在特定的应用领域 定义特定的模式(complete custom schema 或者 利用扩展点把 特定的格式片段(custom micro-format嵌入到一个已经存在的模式。

鉴于上面Web应用的定义,我们能够看出一个应用的下面几个方面能够被机器可处理的格式有效地描述

 

资源的集合:类似在网站站点上提供的资源

资源之间的关系:描述资源之间的联系,即引用和因果(链接)

适用于每个资源的方法(Unique Interface):适用于所有资源的HTTP方法,期望的输入输出以及支持的格式。

资源表象的格式:所支持的MIME类型和数据模式(XMLSchema)的使用。

 

1.2 用例(使用案例)

 

现在描述Web应用的主要方式是基于文本的文档加上一个或多个数据格式的定义,比如XMLSchema虽然完全足够供人类消费,但这个级别的描述排除了如下的一些用例,这些用例需要对计算机来说更加友好的描述格式。

 

应用的模型化和形象化Visualization):支持资源建模工具的开发,资源建模工具能够对资源之间的关系和资源的编排进行分析和处理。

代码生成:自动生成 存根(stub), 骨架代码 和 操作资源表象的代码。

配置:用一种轻便的格式来配置客户端和服务器。

 

对每个应用来说都有一个共同的基础,这种协议可重用可扩展(总比发明一种新的描述格式要好),这将是很有用的。

 

 

 

1.3 WADL示例

 

下面是一个雅虎新闻搜索应用WADL描述示例。

 

 

Xml代码   收藏代码
  1. <?xml version="1.0"?>  
  2. <application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xsi:schemaLocation="http://research.sun.com/wadl/2006/10 wadl.xsd"  
  4.     xmlns:tns="urn:yahoo:yn" xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
  5.     xmlns:yn="urn:yahoo:yn" xmlns:ya="urn:yahoo:api" xmlns="http://research.sun.com/wadl/2006/10">  
  6.     <grammars>  
  7.         <include href="NewsSearchResponse.xsd" />  
  8.         <include href="Error.xsd" />  
  9.     </grammars>  
  10.   
  11.     <resources base="http://api.search.yahoo.com/NewsSearchService/V1/">  
  12.         <resource path="newsSearch">  
  13.             <method name="GET" id="search">  
  14.                 <request>  
  15.                     <param name="appid" type="xsd:string" style="query" required="true" />  
  16.                     <param name="query" type="xsd:string" style="query" required="true" />  
  17.                     <param name="type" style="query" default="all">  
  18.                         <option value="all" />  
  19.                         <option value="any" />  
  20.                         <option value="phrase" />  
  21.                     </param>  
  22.                     <param name="results" style="query" type="xsd:int" default="10" />  
  23.                     <param name="start" style="query" type="xsd:int" default="1" />  
  24.                     <param name="sort" style="query" default="rank">  
  25.                         <option value="rank" />  
  26.                         <option value="date" />  
  27.                     </param>  
  28.                     <param name="language" style="query" type="xsd:string" />  
  29.                 </request>  
  30.                 <response>  
  31.                     <representation mediaType="application/xml" element="yn:ResultSet" />  
  32.                     <fault status="400" mediaType="application/xml" element="ya:Error" />  
  33.                 </response>  
  34.             </method>  
  35.         </resource>  
  36.     </resources>  
  37. </application>  
 

 

28行开始一个应用的描述,定义在应用描述的其他地方要用到的XML命名空间。

29行定义了服务要用到的XML语法(grammars),这里包含了两个XMLSchema文件

的引用。

1645行描述了雅虎新闻搜索的Web资源和这个资源支持的HTTP方法。

1843行描述了 "search" GET方法,

1936行描述了 方法的输入,

3742行描述了 方法可能的输入,


WADL(Web Application Description Language)是一种用于描述Web服务的语言,它支持基于HTTP的请求方法,包括POST请求。要使用WADL进行POST请求,可以参考以下步骤: 1. 获取服务描述文件(WADL) 可以使用浏览器访问服务URL,并在URL后面添加“?_wadl”参数,来获取服务描述文件。例如: ``` http://localhost:8080/your/service/url?_wadl ``` 2. 解析服务描述文件 使用工具(例如Java的jaxb)解析服务描述文件,获取服务请求的URL、请求参数等信息。 3. 构造POST请求 根据服务描述文件中的信息,构造POST请求。例如: ```java URL url = new URL("http://localhost:8080/your/service/url"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/xml"); String input = "<request><param1>value1</param1><param2>value2</param2></request>"; OutputStream os = conn.getOutputStream(); os.write(input.getBytes()); os.flush(); ``` 其中,Content-Type头部指定请求数据的格式;input为请求数据。可以根据服务描述文件中的参数信息,动态生成请求数据。 4. 处理响应 ```java int responseCode = conn.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println(response.toString()); } ``` 其中,conn.getResponseCode()获取响应状态码;conn.getInputStream()获取响应数据流。可以根据服务描述文件中的响应信息,解析响应数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值