我正在实现一个Web服务,已经同时实现了REST和SOAP版本来看哪个更适合我的需求。我决定选择REST,因为它简单易用,并且我可能会开发一个iPhone应用程序来使用它。我的问题很简单,是否可以为我的REST服务创建WSDL或WADL,这是否必要?
谢谢
我正在实现一个Web服务,已经同时实现了REST和SOAP版本来看哪个更适合我的需求。我决定选择REST,因为它简单易用,并且我可能会开发一个iPhone应用程序来使用它。我的问题很简单,是否可以为我的REST服务创建WSDL或WADL,这是否必要?
谢谢
一个好的RESTful服务不需要生成WADL(更别提不太适合的WSDL)因为它会自我描述。我特指“自我描述”是指它会提供描述服务发布的所有(相关的)资源的文档,并且在这些资源上使用标准的HTTP OPTIONS请求将产生有关如何交互的基本信息。使用WADL的唯一真正好处是它允许调用者提前发现与其工作所需的复杂文档的模式;REST本身在这方面并没有提供任何帮助(一些REST信徒认为做这样的事情是不利于生产力提升的,但我不确定是否同意)。
当然,这并不能捕获更深层次的交互模式,但大多数服务的WSDL描述也无法做到这一点,所以这里没有改变。
就记录而言,我使用Apache CXF创建RESTful服务(使用JAX-RS),并为它们发布WADL。
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服务的语言。
正如@GiuliaDiFederico所说,“当然可以”(使用WSDL2),并提供了一个很好的来源链接来说明如何操作。另一方面,@DonalFellows不鼓励使用WSDL...
我认为使用WSDL是一个问题
RestDoc 旨在为 REST 资源创建一个简单的文档框架。通过 restdoc-renderer 可以使用浏览器查看。
它还提供了 Java 注解,以便实时创建 RestDoc 文档。可用于 Jersey 1.x 和 JAX-RS 2.0 实现。
严格来说,使用WSDL 1.0是无法实现的,但是使用WSDL2就可以。因为它是为了接受这种需求而开发的。
"......在WS-I配置文件中,WSDL 2.0解决了REST风格Web服务的要求。SOAP 1.2中添加了GET方法以及WSDL 2.0中的几个新增功能,例如操作安全性、描述引用其他Web服务的消息以及改进的HTTP绑定,现在可以描述REST风格的Web服务了。",Arthur Ryman。
我认为WSDL不适用于REST,而WADL也不是必需的。HTTP已经暴露了WADL可以在单独文件中描述的内容。例如,“Allow”头返回允许的HTTP方法,而内容协商则用于选择正确的格式。