it-swarm.cn

为什么会使用 REST 代替 SOAP 基础服务?

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

是什么原因导致“真实世界”中的任何人使用REST而不是基于SOAP的服务?

149
AngryHacker

减少开销(没有SOAP信封来包装每个调用)

减少重复(HTTP已经表示DELETE,PUT,GET等操作,否则必须在SOAP信封中表示)。

更加标准化 - HTTP操作得到很好的理解并且运行一致。一些SOAP实现可能会变得挑剔。

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

不需要使用XML(你也不需要SOAP,但它几乎没有意义,因为你已经在解析信封了)。

库使SOAP(种类)变得容易。但是正如我所指出的那样,你正在抽象出很多冗余。在理论上是SOAP可以覆盖其他传​​输,以避免在一个层上做类似的事情,但实际上几乎所有SOAP工作,你将做的是通过HTTP。

156

RESTful 服务比 _ soap _ (常规)服务更容易使用。原因是REST基于正常的HTTP请求,这使得能够根据正在进行的请求类型推断出意图(GET = retrive,POST = write,DELETE = remove等等......)并且完全是无国籍的。另一方面,您可能会认为它不太灵活,因为它消除了包含请求上下文的消息信封的概念。

根据我的经验,SOAP已经成为企业内部服务的首选,REST已被公开为公共API的服务。

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

一些相关的阅读:

35
Eric Schoonover

我假设当你说“web服务”时你的意思是SOAP和WS- *标准集。 (否则,我可以说REST services“web services”。)

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

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

12
Bruce

作为良好的架构,开销并不重要。

REST不是一种协议,它是一种鼓励良好可扩展设计的架构。通常选择它是因为RPC中过多的自由度很容易导致设计不佳。

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

9
Piotr Czapla

必须阅读罗伊菲尔丁最优秀 论文 关于这个主题。他做了一个很好的案例,绝对是 _ way _ 在他写作的时候(2000)。

6
Piko

REST与实现无关,而且更加透明,这使得它非常适合公共API,特别是对于像Flickr,Amazon或Digg这样使用其API作为营销工具并且真正希望人们使用其数据的大型网站。他们 不要 想要手持1000名新手开发人员,他们试图调试他们选择的错误SOAP库的脚本语言。

与SOAP和WSDL相比,它们更适合内部应用程序,在这些应用程序中,您可以使用嵌入式库和两端已知的知名人员。 (并且您可能不必关心诸如Internet规模的负载平衡,HTTP缓存等事情。)然后您获得自我记录的API,保留类型等,零工作。

6
joelhardi

Steve Vinoski的博客 和他的 最新文章 绝对值得一读。他是一名前CORBA大师,他用Michi Henning写了一本关于这个主题的最好的书, “高级CORBA®用C++编程” 。但是,他已经看到了他的客户端/服务器方式的错误,现在发誓REST。

5
Jason Etheridge

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

4
David

REST基本上只是实现Web服务的一种方式。它只是一种正确使用HTTP来查询您尝试访问的Web服务的方法。

http://www.xfront.com/REST-Web-Services.htmlhttp://en.wikipedia.org/wiki/Representational_State_Transfer

2
Eric Holscher

这里有一个数据点:亚马逊以REST和SOAP格式提供API,85%的用法是REST。

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

0
pbreitenbach

它非常简单和纤薄。您可以通过http动词:GET使用浏览器。我没有找到一个浏览器可以轻松手动执行通用http POST请求

0
Ray Lu