REST Web服务WSDL?

时间:2011-07-26 13:17:22

标签: web-services rest soap wsdl wadl

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

由于

7 个答案:

答案 0 :(得分:38)

有了良好的RESTful服务,没有必要为它生成WADL(更不用说非常适合的WSDL),因为它会自我描述。通过“自我描述”,我特别指的是它将提供描述服务发布的所有(相关)资源的文档,并且使用任何这些资源上的标准HTTP OPTIONS请求将生成有关如何交互的基本信息。使用WADL的唯一真正好处是它允许调用者发现它需要提前处理的复杂文档的模式; REST本身没有提供任何帮助(有些REST人认为做这些事情会产生反效果,我不确定我同意这一点。)

当然,这并没有捕获更深层次的交互模式,但绝大多数服务的WSDL描述都没有改变。


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

答案 1 :(得分:6)

W3C根据REST documentation standardWSDL 2.0提出了正式建议。以下是IBM article

的引用
  

术语Web服务通常与操作或操作相关联   使用SOAP和WS *标准的基于动作的服务,例如   WS-Addressing和WS-Security。通常称为REST Web服务   指的是使用HTTP的基于资源的Web服务体系结构   和XML。这些架构Web服务样式中的每一个都有它的位置,   但直到最近,WSDL标准并没有同样支持这两者   样式。 WSDL 1.1 HTTP绑定不足以描述   与HTTP和XML通信,所以没有办法正式   使用WSDL描述REST Web服务。 WSDL 2.0的发布,   它的设计考虑了REST Web服务,作为万维网   联盟(W3C)推荐意味着现在有一种语言   描述REST Web服务。

答案 2 :(得分:3)

当然有可能,但如果有必要或是没有答案,你没有提供足够的信息。

我建议你看看ibm的developerworks网站,它提供了一篇关于主题http://www.ibm.com/developerworks/webservices/library/ws-restwsdl/的有趣文章。希望它有所帮助。


严格来说,使用WSDL 1.0你不能,但是你可以使用WSDL2,因为它是为接受这种需求而开发的,

  

“... WS-I配置文件中的WSDL 2.0满足了这些要求   用于REST样式的Web服务。在SOAP 1.2和几个中添加了GET   在WSDL 2.0中增加了诸如操作安全性,描述的能力   引用其他Web服务的消息以及改进的HTTP绑定   现在可以描述REST样式的Web服务。“,Arthur Ryman

答案 3 :(得分:3)

正如@GiuliaDiFederico所说,“当然有可能”(使用WSDL2),显示了一个关于如何做的好的源链接。另一方面,@ DonalFellows不鼓励使用WSDL ......

我认为使用WSDL是

的问题
  • FORMALIZATION LEVEL :使用WSDL,您可以更正式地表达您的Web服务的所有相关详细信息。
  • 稳定性等级:如果您需要长期合同,并避免在您的Web服务暴露的环境中发生变化的风险,WSDL有助于保持稳定。
  • 需要标准:如果客户更喜欢可以说是“标准兼容”的网络服务,请使用标准。唯一的一个是W3C,而W3C需要XML,SOAP和WSDL。

答案 4 :(得分:3)

RestDoc尝试为REST资源创建一个简单的文档框架。 浏览器可通过restdoc-renderer获得。

它还提供Java annotations以实现RestDoc文档的即时创建。实施适用于Jersey 1.xJAX-RS 2.0

答案 5 :(得分:1)

我认为WSDL不适合REST,WADL不是必需的。 HTTP公开了WADL可以在单独的文件中描述的内容。例如,“Allow”标头返回允许的HTTP方法,而Content Negotiation用于选择正确的格式。

答案 6 :(得分:0)

不需要WADL。但是,如果客户端代码已存在于应用程序中,并且您要进行新的rest调用,则优良作法是使用wadl生成客户端java stub(POJO)。通过这种方式,客户端POJO将与服务端POJO同步。例如,如果要在现有应用程序中用Rest服务调用替换EJB / SOAP服务调用,那么使用WADL是非常安全和好的做法。

您可以使用wadl2java maven插件从WADL生成客户端Java存根。