信息化 频道

使用WSDL 2.0描述REST Web服务

  【IT168 信息化】

  Web服务这个术语通常与使用SOAP和WS*标准(例如WS-Addressing和WS-Security)的基于操作的服务相关联。REST Web服务这个术语一般是指使用HTTP和XML的基于资源的Web服务体系结构。其中每种体系结构的Web服务风格各有其影响力,但是直到最近,WSDL不再同等地支持这两种风格。WSDL 1.1 HTTP绑定不足以描述使用HTTP和XML的通信,因此没有办法使用WSDL来正式地描述REST Web服务。WSDL 2.0在设计时考虑到了REST Web服务,将WSDL 2.0作为World Wide Web Consortium (W3C)建议标准来发布意味着现在有了用于描述REST Web服务的语言。

  REST

  REST是一种体系结构风格,它将Web服务视为以资源为中心的应用程序。实际上,这意味着RESTful应用程序中的每个URL表示一个资源。URL 还易于理解和记忆。例如,某个书店可能为其销售的图书列表定义URLhttp://www.bookstore.com/books/,并对ISBN为0321396855的特定图书的相关详细信息定义了URL http://www.bookstore.com/books/0321396855/。这与以操作为中心的应用程序形成鲜明对比,后者通常具有很长的加密URL,用于描述要执行的特定操作,例如http://www.bookstore.com/action/query?t=b&id=11117645532&qp=0321396855。查询参数用于筛选结果。使用同样的书店示例,指定主题参数可以将图书列表限制到关于某个特定主题的图书。例如,URL http://www.bookstore.com/books/?subject=computers/eclipse 将返回关于 Eclipse 平台的图书列表。

  Roy Fielding博士在他的博士论文中提出了术语REST,他在其中提到了“作为应用程序状态引擎的超媒体”。这意味着资源预期将包含超链接。这些超链接是用以进行转换的方法,该转换或者改变资源状态,或者转移到另一个资源。虽然超链接在由人类使用的(X)HTML应用程序中司空见惯,但它们通常不出现在由计算机使用的 XML 中。与 (X)HTML 一样,REST Web服务在XML中利用了超链接。

  传统Web应用程序使用HTTP GET或POST操作来访问资源。相反,RESTful应用程序全面使用了HTTP谓词(POST、GET、PUT和DELETE),按照创建、读取、更新和删除模式来访问资源。

  REST应用程序存在一个更重要的组件:RESTful应用程序应该是无状态的。这意味着在REST用程序中,服务器上没有存储任何会话状态。满足请求所需要的所有信息都携带在请求消息本身之中。因此在服务显式地允许的情况下,客户端可以缓存资源的表示形式,从而显著改进应用程序的性能。要了解有关 EST的更多信息,请参阅本文结尾的参考资料部分。

  WSDL和REST

  WSDL描述包含Web服务的所有详细信息,包括:

  服务的URL。

  服务所理解的通信机制。

  服务所能执行的操作。

  服务消息的结构。

  客户端可以使用这些详细信息来与服务进行交互。

  毫无疑问,REST Web服务到目前为止还没有利用WSDL 1.1 HTTP绑定的一个重要原因是由于WSDL 1.1 HTTP绑定不足以描述REST Web服务。

  WSDL 2.0于2007年6月被宣布为W3C建议标准。创建 WSDL 的这第二个版本是为了解决WSDL 1.1存在的问题,Web服务互操作性(Web Services Interoperability,WS-I)组织已确了其中的许多问题。此外,WSDL 2.0还具有对HTTP绑定的良好支持。

  WSDL是一种正式地描述Web服务的XML语言。可以将Web服务的WSDL描述看作是其与客户端之间签署的的API契约。WSDL描述指定Web服务的地址、允许的通信机制、接口和消息类型。简而言之,WSDL描述为客户端提供了使用 Web 服务所需要的所有信息。

  WSDL的可用性不只是用作API契约。作为正式的定义,WSDL可由Web服务工具用于执行操作,例如:

  采用各种语言生成客户端和服务存根。

  发布Web服务。

  动态测试Web服务。

  绝大多数Web服务工具都包括 WSDL 1.1的支持,并且对WSDL 2.0的支持也正在增加。Apache Web服务项目包含两个目前支持WSDL 2.0的子项目。Woden是一个基于Java?的WSDL 2.0验证分析器。该项目还包含XSL Transformation (XSLT) WSDL 2.0优质打印机,用于提供更加可读的 WSDL文档形式。同样来自于Apache的Axis2是一个流行 Web服务运行时引擎,能够在WSDL 2.0文档的基础上生成Java客户端和服务器存根。

  使用WSDL 2.0描述REST Web服务

  本文的其余部分将指导您完成所需的步骤,以使用下面的简单示例场景来为一个REST Web服务创建WSDL 2.0描述。

  您将运作一家具有创造性URL的书店http://www.bookstore.com。您先前已经创建了两个REST Web服务:

  图书列表服务 检索您的书店中销售的图书的列表。

  图书详细信息服务检索有关某一本特定图书的详细信息。

  信息在XML文档中返回。请考虑一下有关那些服务的详细信息:

  图书列表服务的URL为 http://www.bookstore.com/books/。因为您是一家历史悠久的图书零售商,所以您销售的图书的列表相当大。因此您提供了以下查询参数列表,客户可以使用这些参数来筛选结果: Author 、Language 、Publisher 、Subject 、Title

  例如,URL http://www.bookstore.com/books/?subject=computers/eclipse 返回有关Eclipse的计算机图书的列表,如清单 1 所示。

  清单 1. 来自图书列表服务的响应
  以下是引用片段:

  <booklist:bookList xmlns:booklist="http://www.bookstore.org/booklist/xsd"
  xmlns:book="http://www.bookstore.org/book/xsd"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.bookstore.org/booklist/xsd booklist.xsd 
  http://www.bookstore.org/book/xsd book.xsd">
  <booklist:book url="http://www.bookstore.com/books/0321442598"
  title="BIRT: A Field Guide to Reporting"/>
  <booklist:book url="http://www.bookstore.com/books/0321205758"
  title="Contributing to Eclipse: Principles, Patterns, and Plug-Ins"/>
  <booklist:book url="http://www.bookstore.com/books/0321245873"
  title="Eclipse AspectJ: Aspect-Oriented Programming with AspectJ and the..."/>
  <booklist:book url="http://www.bookstore.com/books/0321288157"
  title="Eclipse Distilled"/>
  <booklist:book url="http://www.bookstore.com/books/0131425420"
  title="Eclipse Modeling Framework"/>
  <booklist:book url="http://www.bookstore.com/books/0321334612"
  title="Eclipse Rich Client Platform: Designing, Coding, and Packaging Java..."/>
  <booklist:book url="http://www.bookstore.com/books/0321396855"
  title="Eclipse Web Tools Platform: Developing Java Web Applications"/>
  <booklist:book url="http://www.bookstore.com/books/032142672X"
  title="Eclipse: Building Commercial-Quality Plug-Ins (2nd Edition)"/>
  <booklist:book url="http://www.bookstore.com/books/0321443853"
  title="Integrating and Extending BIRT"/>
  <booklist:book url="http://www.bookstore.com/books/0321268385"
  title="Official Eclipse 3.0 FAQs"/>
  <booklist:book url="http://www.bookstore.com/books/0321256638"
  title="Official Eclipse 3.0 FAQs"/>
  </booklist:bookList>


  图书详细信息服务的 URL 为 http://www.bookstore.com/books/ISBN_NUMBER,其中ISBN_NUMBER应该替换为特定图书的ISBN。例如,URL http://www.bookstore.com/books/0321396855 将返回我的图书Eclipse Web Tools Platform的详细信息,如清单 2 所示(请参阅参考资料以获得指向该图书网站的链接)。

  清单 2. 来自图书详细信息服务的响应

  以下是引用片段:
  <book:book xmlns:book="http://www.bookstore.org/book/xsd
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
  xsi:schemaLocation="http://www.bookstore.org/book/xsd book.xsd">
  <book:title>Eclipse Web Tools Platform: Developing Java Web Applications</book:title>
  <book:author>
  <book:firstName>Naci</book:firstName>
  <book:lastName>Dai</book:lastName>
  </book:author>
  <book:author>
  <book:firstName>Lawrence</book:firstName>
  <book:lastName>Mandel</book:lastName>
  </book:author>
  <book:author>
  <book:firstName>Arthur</book:firstName>
  <book:lastName>Ryman</book:lastName>
  </book:author>
  <book:overview>
  Discover Eclipse Web Tools Platform (WTP), the new end-to-end toolset for Java-based
  Web development. The WTP seamlessly integrates all of the tools today's Java Web 
  developer needs. Eclipse WTP is both an unprecedented open source resource for 
  working developers and a powerful foundation for state-of-the-art commercial products.
  This book offers in-depth descriptions of every tool included in WTP, introducing powerful
  capabilities never before available in Eclipse. The authors cover the entire 
  Web-development process -- from defining Web application architectures and 
  development processes through testing and beyond. And if you're seeking to extend WTP,
  this book provides an introduction to the platform's rich APIs. The book also
  </book:overview>
  <book:pages>752</book:pages>
  <book:publisher>Addison-Wesley Professional</book:publisher>
  <book:language>English</book:language>
  <book:isbn-10>0321396855</book:isbn-10>
  <book:isbn-13>978-0321396853</book:isbn-13>
  <book:price>54.99</book:price>
  </book:book>


  在下面的几个部分中,您将了解如何使用上面列出的详细信息来创建图书列表服务的WSDL 2.0描述。图书详细信息服务虽然在该场景中有用,但其WSDL描述并没有结构上的不同,因此本文将不介绍该服务。然而,本文结尾的下载部分提供了图书列表和图书详细信息服务的 WSDL 2.0 描述以及清单1和清单2中的相同文档。

  在开始图书列表服务的WSDL描述之前,让我们首先看一下WSDL 2.0基础。

  WSDL 2.0基础

  WSDL 2.0是核心命名空间为 http://www.w3.org/ns/wsdl 的XML语言。WSDL 2.0文档的根元素是description元素。description具有四个子元素,它们共同封装了关于某个Web服务的所有详细信息。

  WSDL 2.0 文档的框架如清单 3 所示。

  清单 3. WSDL 2.0文档框架

  以下是引用片段:
  <wsdl:description xmlns:wsdl="http://www.w3.org/ns/wsdl">
  <wsdl:types/>
  <wsdl:interface/>
  <wsdl:binding/>
  <wsdl:service/>
  </wsdl:description>


  types元素包含了描述Web服务消息的所有XML模式元素和类型定义。WSDL 2.0对其他类型系统的使用保持开放,但实际上仅与XML模式一起使用。

  interface元素定义Web服务操作,包括特定的输入、输出和所传递的错误消息,以及传递那些错误消息的顺序。

  binding元素定义客户端如何与Web服务通信。在REST Web服务的情况下,一个绑定指定客户端可以使用HTTP进行通信。

  service元素将Web服务的地址与特定的接口和绑定相关联。

  WSDL 2.0定义了另外两个关于REST Web服务的相关命名空间:

  HTTP命名空间 http://www.w3.org/ns/wsdl/http,其中包括HTTP绑定元素

  WSDL扩展命名空间 http://www.w3.org/ns/wsdl-extensions,其中包括三个属性的定义:两个用于将XML文档中的超链接与Web服务描述相关联,第三个用于安全地描述Web服务操作

0
相关文章