REST Web服务WSDL是什么?

41

我正在实现一个Web服务,已经同时实现了REST和SOAP版本来看哪个更适合我的需求。我决定选择REST,因为它简单易用,并且我可能会开发一个iPhone应用程序来使用它。我的问题很简单,是否可以为我的REST服务创建WSDL或WADL,这是否必要?

谢谢

7个回答

43

一个好的RESTful服务不需要生成WADL(更别提不太适合的WSDL)因为它会自我描述。我特指“自我描述”是指它会提供描述服务发布的所有(相关的)资源的文档,并且在这些资源上使用标准的HTTP OPTIONS请求将产生有关如何交互的基本信息。使用WADL的唯一真正好处是它允许调用者提前发现与其工作所需的复杂文档的模式;REST本身在这方面并没有提供任何帮助(一些REST信徒认为做这样的事情是不利于生产力提升的,但我不确定是否同意)。

当然,这并不能捕获更深层次的交互模式,但大多数服务的WSDL描述也无法做到这一点,所以这里没有改变。


就记录而言,我使用Apache CXF创建RESTful服务(使用JAX-RS),并为它们发布WADL。


8

W3C已经基于[WSDL 2.0][3]提出了一个REST文档标准的正式推荐。以下是IBM文章中的一句引用:

术语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服务的设计,作为万维网联盟(W3C)的推荐,意味着现在有一种描述REST Web服务的语言。


3

正如@GiuliaDiFederico所说,“当然可以”(使用WSDL2),并提供了一个很好的来源链接来说明如何操作。另一方面,@DonalFellows不鼓励使用WSDL...

我认为使用WSDL是一个问题

  • 规范级别: 使用WSDL,您可以更正式地表达您的Web服务的所有相关细节。
  • 稳定性级别: 如果您需要长期合同,并避免您的Web服务所在环境发生变化的风险,则WSDL有助于保持稳定性。
  • 标准需求: 如果客户喜欢可以称之为“标准兼容”的Web服务,请使用标准。唯一的标准是W3C,而W3C要求XML、SOAP和WSDL。

3

3
当然可以,但是对于是否必要回答这个问题,你没有提供足够的信息。我建议你看一下IBM的developerWorks网站,他们提供了一个有趣的文章

严格来说,使用WSDL 1.0是无法实现的,但是使用WSDL2就可以。因为它是为了接受这种需求而开发的。

"......在WS-I配置文件中,WSDL 2.0解决了REST风格Web服务的要求。SOAP 1.2中添加了GET方法以及WSDL 2.0中的几个新增功能,例如操作安全性、描述引用其他Web服务的消息以及改进的HTTP绑定,现在可以描述REST风格的Web服务了。",Arthur Ryman


1
WADL并非必需。但是,如果应用程序中已经存在客户端代码并且您想要进行新的REST调用,则最好使用WADL生成客户端Java存根(POJO)。通过这种方式,客户端POJO将与服务端POJO保持同步。例如,如果您正在将EJB / SOAP服务调用替换为现有应用程序中的Rest服务调用,则使用WADL非常安全且是良好的做法。
您可以使用wadl2java maven插件从WADL生成客户端Java存根。

1

我认为WSDL不适用于REST,而WADL也不是必需的。HTTP已经暴露了WADL可以在单独文件中描述的内容。例如,“Allow”头返回允许的HTTP方法,而内容协商则用于选择正确的格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接