当前位置:  开发笔记 > 前端 > 正文

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

如何解决《为什么要使用REST而不是基于SOAP的服务?》经验,为你挑选了8个好方法。

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

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



1> Kendall Helm..:

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

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

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

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

不需要使用XML(你也不需要使用SOAP,但它很难理解,因为你已经在解析信封了).

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


同样适用于HTTP基础设施 - 例如,GET会被激活缓存,同时使用最后修改和etags
HTTP与SOAP一样标准化,并且存在时间更长,因此实现非常稳定并且真正可互操作.即使给定相同的内容,SOAP本质上也不会具有可读性,因为内容包含在内.在过去几年的实践中,我发现HTTP上的JSON是关于最好的组合,只是可读性足够更紧凑.
我认为SOAP很好地标准化了.如果你的意思是实现是不成熟的,那么最好使它更清楚.如果你建议这个,我会重视这个观点的一些证据.我还会质疑REST是否更具人性化,这完全取决于您选择格式化内容的方式.并且还记得XML被设计为人类可读的,尽管我们都知道它很冗长.

2> Eric Schoono..:

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

根据我的经验,SOAP是企业内部服务的首选,而REST则是公共API公开的服务的首选.

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

一些相关的阅读:

亚马逊网络服务博客:REST与SOAP

Dare Obasanjo经常写关于REST的文章


我的理解是,WSDL文件可用于生成类以公开Web服务方法.当然这会使服务的消费像调用函数一样简单吗?你能再解释一下你的观点吗?

3> Bruce..:

我假设当你说"web服务"时你指的是SOAP和WS-*标准集.(否则,我可以说REST服务 "Web服务".)

规范性的论点是,REST服务与Web设计更为匹配 - 即HTTP和相关基础架构的设计.因此,使用REST服务将与现有的Web工具和技术更兼容.

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



4> Piotr Czapla..:

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

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

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



5> Piko..:

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



6> joelhardi..:

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

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



7> Jason Etheri..:

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



8> 小智..:

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


那只是“正确使用HTTP”,而不是REST。
推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有