RESTful服务 - WSDL等效
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RESTful服务 - WSDL等效相关的知识,希望对你有一定的参考价值。
我一直在阅读有关REST和SOAP的内容,并了解为什么实现REST比使用SOAP协议更有益。但是,我仍然不明白为什么REST世界中没有“WSDL”等价物。我看过帖子说WSDL“没有必要”,或者说它是多余的在REST世界中,但我不明白为什么。以编程方式绑定到定义并创建代理类而不是手动编码是不是总是有用的?我并不是要进入一场哲学辩论,只是寻找REST中没有WSDL的原因,或者为什么不需要它。谢谢。
Web Application Description Language(WADL)基本上等同于RESTful服务的WSDL,但是一直存在争议,是否需要这样的东西。
Joe Gregorio撰写了a nice article about that topic,值得一读。
WSDL描述了服务端点。 REST客户端不应该耦合到服务器端点(即,不应该提前知道URL)。 REST客户端耦合在客户端和服务器之间传输的媒体类型上。
在客户端上自动生成类以包装返回的媒体类型可能是有意义的。但是,只要您开始围绕服务交互创建代理类,您就会开始模糊HTTP交互并冒险退回到RPC模型。
RSDL旨在像超媒体一样转向休息,换句话说,它比WSDL或WADL等服务描述符拥有更多信息。例如,它具有有关导航的信息,如超文本和超链接。
例如,给定当前资源,您有一组指向其他相关资源的链接。
但是,我没有找到支持此格式的Rest客户端或具有自动生成功能的Rest Server Solutions。
我认为关于它的结论还有很长的路要走。请参阅html长篇故事和W3C与浏览器大声笑。
有关像超媒体这样的休息的详细信息,请查看:http://en.wikipedia.org/wiki/HATEOAS
注意:Roy Fielding一直批评Rest Apis中的这些倾向而没有hypermidia方法: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生成代码的工具。
但是,REST使用HTTP谓词和URI来表示对象状态,从而使用网络协议。
WSDL在这个地方告诉你,如果你发送这条消息,你将执行这个动作并因此得到这个格式。
在REST中,如果我想创建一个新的配置文件,我会使用带有JSON主体的动词POST
或描述我的配置文件的http服务器变量到URL /profile
POST
应返回服务器端生成的ID,使用状态代码201 CREATED
和标头Location: *new_profile_id*
(例如12345)
然后我可以使用HTTP动词/profile/12345
执行更新POST
状态的更新,比如更改我的电子邮件地址或电话号码。显然改变了远程对象的状态。
GET
将返回/profile/12345
的当前状态
PUT
通常用于客户端生成的ID
DELETE
,很明显
HEAD
,获得状态而不返回身体。
使用REST,它应该通过精心设计的API进行自我记录,从而更易于使用。
关于REST的This is a great article。它真的帮助我理解它。
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服务的全部功能。
由于RESTful服务具有更简单的接口,因此WADL对于这些服务几乎不是必需的,因为WSDL是RPC样式的SOAP服务。
以上是关于RESTful服务 - WSDL等效的主要内容,如果未能解决你的问题,请参考以下文章
此 Canon SDK C++ 代码片段的等效 C# 代码是啥?