RESTful服务 – WSDL等效
我一直在阅读关于REST和SOAP的知识,并理解为什么实现REST可能比使用SOAP协议有益。 然而,我仍然不明白为什么REST世界中没有“WSDL”等价物。 我看过post说WSDL没有“需要”,或者在REST的世界里是多余的,但我不明白为什么。 以编程方式绑定到定义并创build代理类而不是手动编码总是有用吗? 我不打算进行哲学辩论,只是寻找REST中没有WSDL的原因,或者为什么不需要它。 谢谢。
Web应用程序描述语言 (WADL)基本上等同于RESTful服务的WSDL,但是一直存在争议,是否需要这样的东西。
乔·格雷戈里奥(Joe Gregorio)写了一篇很好的文章,值得一读。
WSDL描述了服务端点。 REST客户端不应该耦合到服务器端点(即不应提前知道URL)。 REST客户端耦合到在客户端和服务器之间传输的媒体types。
自动生成客户端上的类来包装返回的媒体types是有意义的。 然而,只要你开始创build服务交互周围的代理类,就会开始模糊HTTP交互,并退化为RPC模型。
RSDL的目标是像超媒体一样将其余部分转换为rest,换句话说,它具有比WSDL或WADL这样的服务描述符更多的信息。 例如,它具有关于导航的信息,如超文本和超链接。
例如,给定一个当前的资源,你有一个设置操作系统的链接到另一个资源相关。
但是,我没有find支持这种格式的Rest客户端,或者Rest服务器解决scheme具有自动生成它的function。
我认为要得出结论还有很长的路要走。 查看HTML长篇故事和W3C与浏览器哈哈。
有关像Hypermedia这样的更多细节请看http://en.wikipedia.org/wiki/HATEOAS
注意:Roy Fielding一直批评Rest Apis中的这些倾向,但没有使用hypermidia方法: http ://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
我的结论:现在一天,WADL比骆驼CXF等rest和集成框架已经支持WADL(生成和消费)更为常见,因为它类似于WSDL,因此在这个迁移过程(SOAP到REST)中最容易理解。
我们来看下面的章节;)
有一个相当于WSDL的RSDL(平静的服务描述语言)。 下面的URL描述了它的做法http://en.wikipedia.org/wiki/HATEOAS和http://en.wikipedia.org/wiki/RSDL 。 问题是,我们有很多工具来从wsdl生成代码到Java,或反向。 但是我没有find任何工具从RSDL生成代码。
以编程方式绑定到定义并创build代理类而不是手动编码总是有用吗?
全心全意的同意,这就是我为什么亲自使用Swagger.io
Swagger是一个function强大的开源框架,由大量工具生态系统支持,帮助您devise,构build,logging和使用您的RESTful API。
所以基本上我使用Swagger来描述我的模型,端点等,然后我使用其他工具,如swagger-codegen来生成代理类,而不是手动编码它。
另见: RAML
WSDL是可扩展的,以允许描述端点及其消息,而不pipe使用哪种消息格式或networking协议进行通信
但是,REST使用networking协议通过使用HTTP动词和URI来表示对象状态。
WSDLs在这个地方告诉你,如果你发送这个消息,你将执行这个动作,并得到这个格式。
在REST中,如果我想要创build一个新的configuration文件,我将使用带有JSON正文或HTTP服务器variables的动词POST
来描述我的configuration文件到URL /profile
POST
应该返回一个服务器端生成的ID,使用状态码201 CREATED
和标题Location: *new_profile_id*
(例如12345)
然后,我可以使用HTTP动词POST
更改/profile/12345
的状态来更新我的电子邮件地址或电话号码。 显然改变远程对象的状态。
GET
将返回/profile/12345
的当前状态
PUT
通常用于客户端生成的ID
DELETE
,显而易见
HEAD
,获得身份而不返回身体。
使用REST,它应该通过一个devise良好的API自行logging,因此更易于使用。
这是关于REST的一篇很棒的文章 。 这真的帮助我了解它。
WSDL 2.0规范也增加了对REST Web服务的支持。 两种世界的情况最好。 问题是WSDL 2.0还没有得到大多数工具的广泛支持。 WSDL 2.0是W3C推荐的,WSDL1.1不是W3C推荐的,但是被工具和开发人员广泛支持。 参考: http : //www.ibm.com/developerworks/library/ws-restwsdl/
Web应用程序描述语言(WADL)是用于描述RESTful Web服务的XML词汇表。
与WSDL一样,通用客户端可以加载WADL文件,并立即装备访问相应Web服务的全部function。
由于RESTful服务具有更简单的接口,所以对于这些服务来说,WADL不如WSDL对RPC风格的SOAP服务是必需的。