WADL:REST对WSDL的诠释

几个月前,Web服务开发者在技术媒体上掀起了一场关于SOAP和REST孰优孰劣的争论,这个现在已被大家熟知的话题总是不时地被提出来,但一场讨论下来从来都没能够盖棺定论,因为每种方式从各自的立场上来看都有其自身的优点。恰当地说,每种技术都是针对某种具体情形,直到最近,人们在RESTful方式中发现缺少了一个很明显的角色,也就是曾在SOAP中出现的"描述符"的概念。接下来,我们就要探讨一下Web应用描述语言(WADL)的新兴提案,它旨在为RESTful服务提供描述符。

  对于SOAP Web服务,描述符基于Web服务描述语言(WSDL)来作为我们现实中设计的出发点,主要是由于现实中服务背后存在的复杂性。在这些复杂的情况下,一个描述符不单要从形式上描述它能完成的所有业务逻辑,还要帮助创建一些辅助的类--通常叫做存根--用来构建服务的客户端。

 

  WADL,虽然是和WSDL相似的描述语言,但是它严格地定位于RESTful服务的需求。REST起初很简单,就是在主要门户网站上为客户查询返回结构化数据的URL,但是随着大家对这种新型Web服务方式兴趣的增加,就需要了解这种方式所能实现的业务流程的范围和大小,描述符由此应运而生。

 

  以HTTP作为背后支持的REST服务具有和HTTP相同的方法——GET, POST, PUT, DELETE, HEAD——在后来的协议中都是可用的。另一方面,输入参数在复杂的服务中也能满足许多的需求,通过利用必需的、可选的选项和一些类型值,为试图在第一时间懂得请求的开发者提供乐于接受的标记。当涉及到响应值时,结构化的响应也变得复杂,包括从定制的XML命名空间到JSON,以及请求万一被废弃时就不返回错误的情况。

 

  根据上面所说,我们来看一下WADL描述符。

 

  列表1.1 WADL描述符
<?xml version="1.0"?>
<application xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:yn="urn:yahoo:yn"
  xmlns:ya="urn:yahoo:api"
  xmlns="http://research.sun.com/wadl">
 
  <grammars>
    <include href="NewsSearchResponse.xsd"/>
    <include href="NewsSearchError.xsd"/>
  </grammars>
 
  <resources base="http://api.search.yahoo.com/NewsSearchService/V1/">
    <resource uri="newsSearch">
      <method href="#search"/>
    </resource>
  </resources>
   
  <method name="GET" id="search">
    <request>
      <query_variable name="appid" type="xsd:string" required="true"/>
      <query_variable name="query" type="xsd:string" required="true"/>
      <query_variable name="type" type="xsd:string"/>
      <query_variable name="results" type="xsd:int"/>
      <query_variable name="start" type="xsd:int"/>
      <query_variable name="sort" type="xsd:string"/>
      <query_variable name="language" type="xsd:string"/>
    </request>
    <response>
      <representation mediaType="application/xml" element="yn:ResultSet"/>
      <fault id="SearchError" status="400" mediaType="application/xml"
        element="ya:Error"/>
    </response>
  </method>
</application>

 

  正如你所见,一个WADL契约完全是自描述的,但你当然也拥有更大的自主性。其中值得注意的动作之一就是通过能够简化服务客户端构建过程的WADL契约来创建存根类和基于WSDL的SOAP 契约一样具有相同的步骤。

 

  为了创建服务的客户端存根,早期由Sun提供的一个WADL实现中带有一个wadl2java工具,它的功能正如它的名字所示,使用一个WADL契约来创建相应的Java存根类。对于前面的WADL契约,执行下面的使用说明后,将生成它所相应的Java存根。java -jar wadl2java.jar -o gen-src -p com.techtarget.rest, http://www.techtarget.com/newsrest.wadl

 

  然而使用这种方法的机制,自动化生成代码-,在早期的WADL分析家眼中受到批评,声明说这不仅是不必要的,但是它会使REST倒退到和SOAP及其他分布式技术(如CORBA,它也依赖中间语言/描述符)同样的路上去,但从实用的角度来看,又不能否认通过这种合约来获得存根类是入手REST Web服务客户端的更快捷方法。

 

  当前WADL仍然处于早期阶段中,相关工具也仅仅适用于Java环境和相对更加普遍的WSDL,相反,WADL表现在帮助REST构建Web服务方面是值得委以重任的,就像WSDL对SOAP的重要性一样,在企业中保证REST设计时很可能成为不可或缺的得力助手。

要获得更多内容,请参考:http://www.searchsoa.com.cn/showContent_23349.htm

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值