为什么要使用REST而不是基于SOAP的服务?[关闭]


153

今天参加了有关REST的一个有趣的演示,但是,我想不出一个单独的原因(也没有一个人提出),为​​什么REST比基于SOAP的服务栈更好或更简单地使用和实现。

为什么“现实世界”中的任何人都使用REST而不是基于SOAP的服务的原因有哪些?


37
通过Web服务,您是指SOAP风格的Web服务吗?因为据我所知,您也可以拥有RESTful Web服务。
詹姆斯·麦克马洪

Answers:


160

更少的开销(无需SOAP信封即可封装每个调用)

更少的重复(HTTP已经代表了DELETE,PUT,GET等操作,这些操作否则必须以SOAP信封形式表示)。

更加标准化-HTTP操作已广为人知,并且操作一致。某些SOAP实现可能很挑剔。

更具人类可读性和可测试性(仅使用浏览器很难测试SOAP)。

不需要使用XML(嗯,您也不必使用SOAP,但是由于您已经在解析信封,因此几乎没有意义)。

库使SOAP(种类繁多)变得容易。但是,正如我所指出的,您在下面提取了很多冗余。是的,从理论上讲,SOAP可以遍历其他传输,从而避免在做类似事情的层次上扎根,但实际上,您要做的几乎所有SOAP工作都是通过HTTP。


1
我想补充一下,跨平台的SOAP通信也可以是PITA(这不是SOAP的重点吗?!?)。
Justin Bozonier

7
例如,获取正积极与使用的最后修改日期和ETag的沿缓存-兼与HTTP基础工作的伟大
詹姆斯斯特拉坎

与网络浏览器一起使用,为您的服务提供通用客户端也很棒:)
James Strachan

2
我认为SOAP是标准化的。如果您的意思是实现不成熟,那么最好将其弄清楚。如果您提出这一建议,我将为此观点提供一些证据。我还要质疑REST是否更易读,这完全取决于您选择格式化内容的方式。还要记住,XML被设计为人类可读的,尽管众所周知,它是冗长的。
霍华德2009年5

6
HTTP与SOAP一样标准化,并且已经存在了很长的时间,因此实现在各个方面都非常稳定并且真正可以互操作。即使给定相同的内容,SOAP本身也将固有较少的可读性,因为内容被包裹在其中。在过去的几年中,我发现HTTP上的JSON大约是最佳的组合,只要具有可读性即可更加紧凑。
肯德尔·赫尔姆斯特·盖尔纳

36

RESTful服务比基于SOAP的(常规)服务更容易使用。原因是REST基于正常的HTTP请求,可以从发出的请求类型(GET =检索,POST =写,DELETE =删除等)中推断出意图,并且它是完全无状态的。另一方面,您可能会争辩说它不那么灵活,因为它取消了包含请求上下文的消息信封的概念。

以我的经验,SOAP被首选用于企业内的服务,而REST被首选作为公开API公开的服务。

使用.NET框架中的WCF之类的工具,将服务实现为REST或SOAP非常简单。

一些相关的读物:


9
我的理解是WSDL文件可用于生成用于公开Web服务方法的类。当然,这会使服务的使用像调用函数一样容易吗?您能否再解释一下您的观点。
霍华德

1
霍华德·梅(Howard May):假设您仅使用原始数据类型调用函数,这的确是正确的。但是在那种情况下,您不能确切地说SOAP比休息容易。如果您具有复杂的数据类型,则在具有相同WS堆栈的两台计算机之间,WSDL处理可能会正常工作。但是,一旦混合堆栈,您将不可避免地遇到问题。一旦您必须手工研究WSDL来调试不兼容性,它就变得如此简单。
Joseph Holsten

1
在2014年,几乎所有平台(甚至是较旧的平台)都支持WSDL。代理类使使用API​​非常简单。我们正在实施推送服务,我正在考虑使用REST,但是我真的很难看到任何好处。
JohnOpincar 2014年

13

我假设当您说“ Web服务”时,是指SOAP和WS- *标准集。(否则,我可能会认为REST服务 “ Web服务”。)

规范的论点是,REST服务与Web设计(即HTTP和相关基础结构的设计)更接近。因此,使用REST服务将与现有的Web工具和技术更加兼容。

当然,一旦深入研究细节,就会发现两种方法在不同情况下都有优势。您感兴趣的是这些细节吗?


10

开销并不像好的架构那么重要。

REST不是协议,它是鼓励良好可扩展设计的体系结构。之所以选择它,是因为RPC中的自由度过高容易导致设计不佳。

另一个原因是基于HTTP的RESTful协议的可预测成本,因为它可以利用现有技术(主要是代理)。RPC的初始成本非常低,但是随着负载的增加,它往往会显着增加。


7

REST与实现无关,并且更加透明,这使得它非常适合公共API,尤其是对于像Flickr,Amazon或Digg这样的大型网站,这些网站都将其API用作营销工具,并且确实希望人们使用其数据。他们并不想成为开发新手的手拿着1000谁试图调试选择的越野车SOAP库的脚本语言。

与SOAP和WSDL比较,SOAP和WSDL更适合内部应用程序,因为在内部应用程序中您都有嵌入式库和两端都有知名的人。(而且,您可能不必关心Internet规模的负载平衡,HTTP缓存等。)然后,您将获得自记录的API,以零工作量保存类型等。


一个很好的答案,但是我不同意SOAP意味着您无法进行Internet规模的负载平衡。
HDave

7

阅读了Roy Fielding 关于该主题的最优秀论文。他让一个优秀的情况下,是绝对WAY领先的时候,他写了他的时间(2000年)。



5

REST允许缓存您的非变异操作(通常使用GET动词)。即,由客户端缓存和/或由代理缓存。这可能是一个巨大的胜利!


8
那只是“正确使用HTTP”,而不是REST。
aehlke


0

这是超级简单和苗条。您可以通过http动词:GET使用浏览器完成此操作。我找不到浏览器可以轻松地手动执行通用的HTTP POST请求


1
结帐提琴手。它不是浏览器,但却是无需代码即可构建HTTP POST的好方法。fiddler2.com/fiddler2
Eric Sc​​hoonover,

我通常会通过与Charles修改现有请求来做到这一点。我也有提琴手。
Ray Lu

0

这里是一个数据点:Amazon提供了REST和SOAP格式的API,REST的使用率为85%。

REST更易于实现,更易于理解和更高性能。


7
您对“更高的性能”陈述有任何参考吗?
詹姆斯·麦克马洪

3
您从哪里获得85%的使用率?很高兴知道(如果我能看到证明的话)
schmoopy 2012年

3
手动阅读API规范,打印页面等比“右键单击,添加服务参考”更容易实现?(VS2010)
BlueChippy 2012年

@schmoopy来自亚马逊博客:aws.typepad.com/aws/2005/09/rest_vs_soap.html
欢乐
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.