Restful Web服务如何比基于SOAP的Web服务更好

时间:2010-11-09 10:41:01

标签: java rest soap service

我已经浏览过各种网站,他们提供的唯一答案是 - Restful webservices使用Http自己的方法,如(GET,POST,PUT,DELETE)。而基于SOAP的webservices使用自己的自定义方法。 。 - Restful Web服务将每个服务方法视为资源,并为其提供URI ..

但是我不明白这些答案的全部意义。至于为什么这些事情比基于SOAP的Web服务更具优势......

一个例子将不胜感激

4 个答案:

答案 0 :(得分:10)

REST自然适用于Web / Cloud API,而SOAP适用于分布式计算方案。

带宽是REST的主要优点,因为没有复杂的文档可以遍历(即XML,SOAP标头),这对于性能良好的Web API非常重要。 JSON是一种广泛认可且简单的数据交换标准,可以通过浏览器和客户端代码轻松读取,这就是大多数RESTful API(雅虎都是一个很好的例子)提供JSON的原因。

更不用说REST可用于XmlHttpRequest对象,这对于Web API的AJAX能力也是至关重要的。

当然,REST的可缓存性功能也不容忽视。因为REST基于HTTP,所以它可以利用HTTP(和Web本身)的许多语义,通过利用HTTP数据包(过期)上的标头来启用浏览器的缓存。更不用说像gzip压缩这样的东西来提高效率。在性能方面,REST确实将它钉在了SOAP上。

对于SOAP,well SOAP适用于有状态操作。 WS *标准(安全性,事务等)处理这种管道,这在分布式场景中非常常见。当然,它可以通过REST来完成,但它实际上并不是REST。 SOAP非常适合在客户端和服务器之间定义操作契约,这在分布式场景中至关重要。

所以我的观点(以及整个SOAP vs REST的事情都是高度自以为是),将SOAP用于分布式计算场景,将REST用于Web API。

答案 1 :(得分:4)

SOAP的主要问题是膨胀。您可以做的越多,使用默认值就越少。即使对于简单的方法,这也会导致巨大的WSDL下载。接下来,它使解析器膨胀(特定解析器总是小于通用解析器),消息(整个一堆XML而不是带有URI的DELETE),错误处理程序(你发送20-30KB的XML)服务器,它响应50KB错误消息;祝你好运阅读并理解它。)

具体示例:通过SOAP从SharePoint服务器读取文档列表的Java代码非常庞大,您需要为Java编译器提供1GB的RAM来编译它。

与Restful相同只需要几行代码。在客户端上,您需要使用GET list/some/url构建请求。即使您必须手动编写代码,在服务器上解析它也会比编译WSDL更省力。

答案 2 :(得分:2)

许多人对基于SOAP的Web服务表示不满,因为SOAP层增加了额外的复杂性,将其视为过度开销,提出了RESTful Web服务。
在REST框架中,xml消息直接封装在HTTP有效负载中,而不是封装在SOAP信封内(与AJAX相同)。 这大大减少了解析开销 但在实际情况下,通常需要向服务器/客户端发送与实际xml消息有效负载无关的额外信息 这导致找到通过HTTP消息传输信息的方法 由于需要传输此类信息,因此有些人反驳说基于SOAP的服务可以满足这些需求。

答案 3 :(得分:1)

优点是战术性的 - 它当然可以完成你可以用另一个做的所有事情,但是Web服务器在SOAP之前就已经存在并且配置相当简单,因此通常更简单。例如,身份验证等通常可以由Web服务器处理,也可以重定向和负载平衡和事物。普通的SOAP框架实际上并没有完整的一组这样的东西,并且会导致成长的痛苦。

相关问题