REST和SOAP的复杂性

转载 2007年09月18日 13:50:00

REST和SOAP的复杂性

转自 :Eric Newcomer博客中文版

(原文地址 http://blog.csdn.net/ericnewcomer

Pete对上一篇blog文章的评论已引发出更多的评论。好,让我来尝试回答Pete在他的评论中所提出的问题吧。希望这篇文章能引起更多愉快而有益的讨论。。。­

在我看来,Pete的主要问题是:哪些Web服务用例(use cases)体现了与REST用例的区别?它们各自应当在什么情况下采用?以及增添的Web服务复杂性在什么情况下是合理的?

也许这样的回答太过于简单化了,但我认为这是最好的概括:如果你要用浏览器来显示XML数据,那么就采用REST;如果你要把XML数据传给一个程序来处理,那么就采用SOAP。

关于Amazon.com的Web服务的使用情况是:去年,80%的开发者采用了XML over HTTP版,而20%的开发者采用了SOAP版。这是合理的,因为大多数Amazon.com用户所关心的是“用浏览器访问虚拟店铺时的数据显示”。不过,Amazon.com同时支持这两种风格的“Web服务”,因为也有开发者关注于“把数据传给程序作处理”。(为了明确起见,我将采用Amazon的术语——REST和SOAP Web服务)。

看待REST的一种方式是:它基本上意味着把Web服务请求放在URL里。

下面这个URL是我在Google.com中搜索“Skateboots”时得到的:

http://www.google.com/search?hl=en&ie=UTF-8&q=%22Skateboots%22&btnG=Google+Search

基本上,Google是把我输入Web表单的关键字作为参数放在URL里(URL里还有其他一些关于字符集和即将执行的操作(比如“搜索”)的信息),并根据此URL来执行服务,然后在浏览器中返回结果。Google还会提示我:要搜索的是不是“Skate Boots”(即两个词,而不是我输入的单个词)。如果点击该提示链接的话,将会得到下面的URL:

http://www.google.com/search?hl=en&ie=UTF-8&q=%22Skate+boots%22&spell=1

Amazon.com最近(2004年8月)发布的Web服务第4版继续一如既往地同时支持REST和SOAP请求。目前,有些人会争辩说REST和Web服务是不同的事物;而另一些人则认为,Web服务能做的,用REST也能做。在我看来,它们就像是相同操作的不同格式。

它们之间的区别似乎可以归结为:你是否希望用浏览器来解释结果数据。如果是的话,那么你最好还是采用REST请求(即把参数放在URL里)。但是,如果你要用程序来解释数据的话,你还是应该采用SOAP请求,因为它是用XML消息(而不是URL)来携带参数的。

下面是Amazon为基于REST的Web服务请求定义的格式:

http://webservices.amazon.com/onca/xml?Service=AWSECommerceService
&SubscriptionId=[your subscription ID here]
&Operation=ItemSearch
&SearchIndex=Books
&Keywords=dog
&ResponseGroup=Request,Small

在你获得订购ID之后(不好意思,我还没有体验过获得一个订购ID),你可以把请求参数放在Firefox(或其他浏览器)地址栏中,然后按回车键执行之,并浏览XML结果。这最简单不过了。

但是,如果你要把XML数据传给程序处理的话(可能采用其他传输协议),SOAP请求格式将能够更好地胜任,因为它就是为此而设计的;消息所需的全部都在信封(envelope)里(即不依赖于传输协议的特征,比如固定接口、URL参数等)。如果采用REST请求的话,你得自己编写除在浏览器中显示XML以外的所有代码。而且,你在添加企业应用所需的重要特征(比如安全性、可靠性、事务性等)时,你也必须考虑如何编写相关代码。代码可能很快就会变得相当复杂。

接下来的讨论主要是围绕着开发工具进行的,因为开发工具在使用SOAP(以及WSDL)时是相当重要的。这里的基本问题是:像XMLSpy、Visual Studio、WebLogic Workshop、Artix Developer这样的工具是把工作简单化、还是复杂化了?按照Jeff Webb的说法,如果你要修改自动生成的VB类,采用SOAP会比较困难。如果你只是原封不动地使用SOAP请求,利用生成的代码,那么采用SOAP可能是处理XML的最简单、最直接的方式。

另外,这里还有WSDL的问题——这是REST请求所没有的。在Web上发布一个WSDL文件,可以让你的Web服务加入到一个更大的“生态系统”中,因为大多数Web服务工具包(toolkits)可以导入WSDL,并自动生成SOAP消息、以及处理SOAP消息的代理(proxy)和桩(stub)代码。还有许多工具可以根据现有应用元数据(包括CORBA IDL、COBOL Copybooks、C++和Java类、EJB、COM对象等等)生成WSDLs。

如果你已经在用像Visual Studio或Eclipse这样的集成开发环境(IDE)的话,那么Web服务支持已经内置了。而且,随着更多的WS-*规范获得采纳,工具会增加对它们的支持。比如,IONA的Artix已经支持WS-Security,并能自动生成有关SOAP报头(headers)。我认为这里的原则是:尽可能简单,直至别无更简单的适合者;反之亦然,避免复杂,仅当不得以时。

我认为,随着Web“超越浏览器”继续发展,当它遇到企业应用时,自然要面对更多的复杂性。如果所有任务都能用简单的HTTP接口加URL参数完成的话,那将是完美的。不过,IT界在Web以外需要可靠性保证和事务完整性来解决法律与业务问题,比如确保证券交易订单按照收到的次序被执行、以及验证大宗订单(比如数吨钢材)发出者的身份。而且,IT界很长一段时间都不将发生改变。Web需要适应IT界,最简单的做法就是,集成某些已存在的复杂性。

好,那么请给出评论,开始愉快的讨论吧!

原文链接:http://blogs.iona.com/newcomer/archives/000099.html 

 

soap和rest比较

  • 2013年01月22日 09:55
  • 857KB
  • 下载

REST与SOAP样式Web 服务的区别

http://tscjsj.blog.51cto.com/412451/84810 从基本原理层次上说,REST 样式和 SOAP 样式 Web 服务的区别取决于应用程序是面向资源的还是面向...

rest soap cxf webservice maven springmvc

  • 2016年02月18日 10:30
  • 16.81MB
  • 下载

WebService的两种方式:SOAP和REST比较

我的读后感:由于第一次接触WebService,对于很多概念不太理解,尤其是看到各个OpenAPI的不同提供方式时,更加疑惑。如google map api采用了AJAX方式,通过javascript...

Web 服务编程,REST 与 SOAP

REST 简介 在开始我们的正式讨论之前,让我们简单看一下 REST 的定义。 REST(Representational State Transfer)是 Roy Fielding 提出...
  • xjbclz
  • xjbclz
  • 2016年08月07日 22:57
  • 696

三种主流的WebService实现方案(REST/SOAP/XML-RPC)简述及比较

目前知道的三种主流的Web服务实现方案为: REST:表象化状态转变 (软件架构风格) SOAP:简单对象访问协议  XML-RPC:远程过程调用协议  简单介绍: REST:表征状态转移(Re...

WebService两种发布协议--SOAP和REST的区别

WebService两种发布协议--SOAP和REST的区别 1、 [html] view plain copy SOAP是一种具体的通讯...
  • z10z32
  • z10z32
  • 2017年07月27日 15:52
  • 288

Web 服务编程,REST 与 SOAP比较

原文地址:http://www.ibm.com/developerworks/cn/webservices/0907_rest_soap/
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:REST和SOAP的复杂性
举报原因:
原因补充:

(最多只允许输入30个字)