WADL:REST对WSDL的诠释

日期: 2009-08-11 作者:Daniel Rubio翻译:杨晓明 来源:TechTarget中国 英文

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

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

几个月前,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 http://www.w3.org/2001/XMLSchema">http://www.w3.org/2001/XMLSchema"
 
 
  http://research.sun.com/wadl">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设计时很可能成为不可或缺的得力助手。

  关于作者

  Daniel Rubio 是在企业开发领域拥有10多年经验的软件顾问,最近创立了Mashup Soft公司,正开始专门致力于Web服务在Mashups上应用。他是个技术狂,专注所有领域的软件平台并维护这方面话题的博客。

相关推荐

  • API开发与管理大作战

    2014将会是API管理方法新旧PK的一年,据Delyn Simons说,她领导了Mashery开发者的外展团队。应用编程接口(API)的主流化和私有化在新的一年也将掀起波澜,她在波士顿“Future Insights Ultimate Developer Event 2013”大会上预测说。

  • 公共API外包管理是否值得考虑?

    公共API外包管理是指聘请一个专家小组来解决可扩展性问题,同时也提出几套可替代的方案。

  • 最适合大数据应用的是SOA还是REST?

    跟所有的企业数据一样,大数据唯有通过应用投射给用户才有用。对于设计或重新设计大数据应用的架构师来说,一个关键问题是究竟是用SOA还是RESTful的API?

  • 弹性资源对传统的REST架构构成挑战了吗?

    组件化应用程序需要机制来将组件传递到下一个工作地。从一开始,人们对连接流程及其实施就有不同的观点。可以证明,SOA阵营是由RPC和SOAP的软件接口发展而形成的。