2010-11-09 280 views
9

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

但是,我不明白这些答案的全部意义。至于为什么这些事情相对于基于SOAP的网络服务而言被证明是如此巨大的优势。

一个示例将被赞赏

+0

可能的重复:http://stackoverflow.com/questions/76595/soap-or-rest – michid 2010-11-09 10:51:20

+0

你有什么想法吗?你有4个非常好的答案。 – RPM1984 2010-11-10 09:01:13

+0

@ RPM1984:是的,我想我会去REST,因为它有不同的服务,这使得它非常松散耦合的URL不同,也有像url结构的目录(不像SOAP有“www.somesite.com?query=something” )这使得搜索引擎友好。 :) – Anand 2010-11-14 07:32:21

回答

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,好的SOAP迎合有状态操作。 WS *标准(安全性,事务处理等)处理这种在分布式场景中很常见的管道。它可以用REST来完成,当然,它不会真的成为REST。 SOAP对于定义客户端和服务器之间的操作契约非常有用,这在分布式场景中至关重要。所以我的意见(以及整个SOAP vs REST的东西都是很有见地的),在分布式计算场景中使用SOAP,为Web API使用REST。

+0

@ RPM1984:“REST的缓存功能”是什么意思? – Cratylus 2010-11-09 11:34:10

+0

@ user384706 - 由于REST基于HTTP,因此它允许在响应中添加缓存标头(过期),以便浏览器可以缓存它们。响应数据包*显式*表示可缓存性。现在,这是**客户**缓存,不要与服务器缓存混淆。这又是为什么我的主要职位是REST for Web,用于分布式计算的SOAP。 – RPM1984 2010-11-09 11:48:49

+0

还通过回答编辑添加该澄清。 – RPM1984 2010-11-09 11:53:54

1

好处是有策略的 - 当然可以做一切你可以做的事情,但web服务器在SOAP之前,并且配置起来相当简单,所以通常更简单。例如,身份验证等通常可以由Web服务器处理,因为可以重定向和负载平衡等。普通的SOAP框架并不是真的具有完整的一套这样的功能,并且可能会导致越来越多的痛苦。

4

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

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

和Restful一样,只需要几行代码。在客户端上,您需要使用GET list/some/url来构建请求。即使您需要手动编写代码,解析服务器上的内容也不会比编译WSDL更省力。

+1

从它的声音,你有一个框架非常糟糕的经验。与REST相比,SOAP通常需要较少的手动编码才能开始,因为框架通常会自动化大部分管道。 WSDL的大小应该与运行时性能无关,因为它仅用于协助客户端代理生成。 – 2010-11-09 12:20:44

+1

我使用了Axis。 Java上还有其他的东西吗?而且,WSDL的大小是相关的,因为大的WSDL ==大的请求。 – 2010-11-09 15:03:26

2

由于SOAP层增加了额外的复杂性,许多人对基于SOAP的Web服务不以为然,认为这是一种不当开销,提出了RESTful Web服务。
在REST框架中,xml消息直接封装在HTTP有效内容中,而不是封装在SOAP封装内(与AJAX相同)。
显着减少了解析开销。
但在实际情况下,通常需要向服务器/客户端发送与实际xml消息有效载荷无关的额外信息。
这导致想方设法通过HTTP消息传输信息。
由于需要传递这样的信息,有些人反驳认为基于SOAP的服务有助于满足这些需求。