WADL
越来越多的 依赖于Web的企业(像Google, Yahoo, Amazon, Flickr等)正在开发基于HTTP的应用(通过XML访问其内部数据)。用基于文本的协议描述和基于XMLSchema的数据格式描述来描述应用;为了使用这种基于HTTP的web应用(尤其是使用XML进行交互的应用),WADL被设计用来提供一种机器可处理的协议描述格式。
1,Web应用(Web Application)
Web应用被定义为一种基于HTTP的应用,它们的交互应该能够被计算机处理。有很多存在的Web站点(比如一些基于HTTP的应用),为了能成功地运用他们,大量的这些站点都需要人来识别它们的功能。
l 基于已经存在的Web架构和基础结构
l 不依赖于特定的平台和编程语言
l 促进了应用的重用(不仅限于浏览器)
l 能够和其他的Web应用或桌面应用集成。
l 使用它们的过程中交换的内容(表象)有明确的语义
最后一个必须遵守的要求是使用自描述的数据格式,比如XML或JSON。XML尤其适合,因为它允许在特定的应用领域 定义特定的模式(complete custom schema) 或者 利用扩展点把 特定的格式片段(custom micro-format)嵌入到一个已经存在的模式。
鉴于上面Web应用的定义,我们能够看出一个应用的下面几个方面能够被机器可处理的格式有效地描述
l 资源的集合:类似在网站站点上提供的资源
l 资源之间的关系:描述资源之间的联系,即引用和因果(链接)
l 适用于每个资源的方法(Unique Interface):适用于所有资源的HTTP方法,期望的输入输出以及支持的格式。
l 资源表象的格式:所支持的MIME类型和数据模式(XMLSchema)的使用。
1.2 用例(使用案例)
现在描述Web应用的主要方式是基于文本的文档加上一个或多个数据格式的定义,比如XMLSchema。虽然完全足够供人类消费,但这个级别的描述排除了如下的一些用例,这些用例需要对计算机来说更加友好的描述格式。
l 应用的模型化和形象化(Visualization):支持资源建模工具的开发,资源建模工具能够对资源之间的关系和资源的编排进行分析和处理。
l 代码生成:自动生成 存根(stub), 骨架代码 和 操作资源表象的代码。
l 配置:用一种轻便的格式来配置客户端和服务器。
对每个应用来说都有一个共同的基础,这种协议可重用可扩展(总比发明一种新的描述格式要好),这将是很有用的。
1.3 WADL示例
下面是一个雅虎新闻搜索应用的WADL描述示例。
<?xml version="1.0"?> <application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://research.sun.com/wadl/2006/10 wadl.xsd" xmlns:tns="urn:yahoo:yn" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:yn="urn:yahoo:yn" xmlns:ya="urn:yahoo:api" xmlns="http://research.sun.com/wadl/2006/10"> <grammars> <include href="NewsSearchResponse.xsd" /> <include href="Error.xsd" /> </grammars> <resources base="http://api.search.yahoo.com/NewsSearchService/V1/"> <resource path="newsSearch"> <method name="GET" id="search"> <request> <param name="appid" type="xsd:string" style="query" required="true" /> <param name="query" type="xsd:string" style="query" required="true" /> <param name="type" style="query" default="all"> <option value="all" /> <option value="any" /> <option value="phrase" /> </param> <param name="results" style="query" type="xsd:int" default="10" /> <param name="start" style="query" type="xsd:int" default="1" /> <param name="sort" style="query" default="rank"> <option value="rank" /> <option value="date" /> </param> <param name="language" style="query" type="xsd:string" /> </request> <response> <representation mediaType="application/xml" element="yn:ResultSet" /> <fault status="400" mediaType="application/xml" element="ya:Error" /> </response> </method> </resource> </resources> </application>
第2—8行开始一个应用的描述,定义在应用描述的其他地方要用到的XML命名空间。
第2—9行定义了服务要用到的XML语法(grammars),这里包含了两个XMLSchema文件
的引用。
第16—45行描述了雅虎新闻搜索的Web资源和这个资源支持的HTTP方法。
第18—43行描述了 "search" GET方法,
第19—36行描述了 方法的输入,
第37—42行描述了 方法可能的输入,