我一直在阅读有关REST和SOAP的内容,并了解为什么实现REST比使用SOAP协议更有益.但是,我仍然不明白为什么REST世界中没有"WSDL"等价物.我看过帖子说WSDL"没有必要",或者说它是多余的在REST世界中,但我不明白为什么.以编程方式绑定到定义并创建代理类而不是手动编码是不是总是有用的?我并不是要进入一场哲学辩论,只是寻找REST中没有WSDL的原因,或者为什么不需要它.谢谢.
在Web应用程序描述语言(WADL)基本上是WSDL中RESTful服务等同,但有是一个持续的争论这样的事情是否需要在所有.
Joe Gregorio撰写了一篇关于该主题的精彩文章,值得一读.
WSDL描述了服务端点.REST客户端不应该耦合到服务器端点(即,不应该提前知道URL).REST客户端耦合在客户端和服务器之间传输的媒体类型上.
在客户端上自动生成类以包装返回的媒体类型可能是有意义的.但是,只要您开始围绕服务交互创建代理类,您就会开始模糊HTTP交互并冒险退回到RPC模型.
RSDL旨在像超媒体一样转向休息,换句话说,它比WSDL或WADL等服务描述符拥有更多信息.例如,它具有有关导航的信息,如超文本和超链接.
例如,给定当前资源,您有一个os链接到另一个相关资源.
但是,我没有找到支持此格式的Rest客户端或具有自动生成功能的Rest Server Solutions.
我认为关于它的结论还有很长的路要走.请参阅HTML长篇故事和W3C与浏览器大声笑.
有关像超媒体这样的休息的详细信息请查看:http://en.wikipedia.org/wiki/HATEOAS
注意:Roy Fielding在没有hypermidia方法的情况下批评了Rest Apis中的这些趋势:http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
我的结论:现在,WADL更常见的是像Camel CXF这样的Rest和Integration Frameworks已经支持WADL(生成和使用),因为它类似于WSDL,因此在这个迁移过程(SOAP to REST)中最容易理解.
让我们看看下一章;)
以编程方式绑定到定义并创建代理类而不是手动编码是不是总是有用的?
全心全意地同意,这就是我个人使用Swagger.io的原因
Swagger是一个功能强大的开源框架,由大型工具生态系统支持,可帮助您设计,构建,记录和使用RESTful API.
所以基本上我使用Swagger来描述我的模型,端点等,然后我使用其他工具,如swagger-codegen来生成代理类,而不是手动编码.
另见:RAML
有一个RSDL(restful服务描述语言),它等同于WSDL.以下URL描述了其实践http://en.wikipedia.org/wiki/HATEOAS 和http://en.wikipedia.org/wiki/RSDL.问题是我们有很多工具可以生成从wsdl到java或反向的代码.但我没有找到任何从RSDL生成代码的工具.