Java中SOAP和RESTful Web服务的主要区别

258

目前我对SOAP和RESTful服务之间的差异有一些了解。

我的问题是,在什么情况下应该使用SOAP,以及在什么情况下应该使用RESTful;就性能/速度或请求处理方面而言,哪一个更好?

我第一次在RESTful(Java)中实现它,我想要更多地了解它;我之前用过SOAP。

这是这篇文章的后续问题。


12
这类问题有很多,很可能是这些问题中至少一个的重复:https://dev59.com/-nVD5IYBdhLWcg3wI36L https://dev59.com/5HVC5IYBdhLWcg3wsTbv https://dev59.com/xnVD5IYBdhLWcg3wGHiu https://dev59.com/xnVD5IYBdhLWcg3wGHiu https://dev59.com/G0jSa4cB1Zd3GeqPBwA4 https://dev59.com/e3VD5IYBdhLWcg3wR5ko。 - Joachim Sauer
请参阅“SOAP RPC对比”:http://en.wikipedia.org/wiki/Representational_State_Transfer#Concept - trashgod
11个回答

251

REST几乎总是更快的。SOAP的主要优点在于它提供了一种机制,使得服务可以向客户端描述自己,并宣传自己的存在。

REST更加轻便,可以使用几乎任何工具来实现,从而降低带宽和学习曲线。然而,客户端必须知道要发送什么和期望什么。

一般来说,当你将API发布到外部且该API非常复杂或者可能会发生变化时,SOAP会更有用。除此之外,REST通常是更好的选择。


5
从Web服务的消费者角度来看,何时应该使用REST,何时应该使用SOAP?(假设两种选项都提供了)。根据我的理解,当消费者想要通过浏览器访问Web服务时,应该使用REST。由于浏览器可以理解XML和JSON格式。如果Web服务是以编程方式被消费,似乎没有什么主要优势。事实上,SOAP似乎更符合要求,因为它们更加有组织(WSDL)。我很希望听到你的想法。 - Andy Dufresne
2
Andy,如果API很简单,现有的调用不太可能改变,那么使用REST就可以了。SOAP有一个正式的描述过程,它的优点是如果服务发生更改,你会立即知道并能够更轻松地适应它。 - dj_segfault
Swagger可以负责发布restful web服务的API。 - akhil_mittal
在我看来,SOAP是基于硬合同的,不容易修改,但REST很容易修改,因为没有固定的合同。但是,如果没有适当的文档,可能会在系统中引入更多的错误,这让我想到了一个问题:REST的这个缺点是否超过了轻便易改的好处。 - xpioneer

69

REST与SOAP Web服务

我发现现在很多新的Web服务使用REST架构而不是SOAP。让我们先解释一下什么是REST。

什么是REST Web服务?

REST代表{表征性状态转移},这基本上意味着每个唯一的URL都是某个对象的表示。您可以使用HTTP GET获取该对象的内容,使用POST、PUT或DELETE来修改该对象(实际上,大多数服务使用POST来进行此操作)。

谁在使用REST?

雅虎的所有Web服务都使用REST,包括FlickrDelicious

API使用它,pubsub,bloglines,Technorati,eBay和Amazon都有REST和SOAP Web服务。

谁在使用SOAP?

Google似乎一贯地使用SOAP实现他们的Web服务,除了Blogger,它使用XML-RPC。企业软件中也会找到SOAP Web服务。

REST vs. SOAP

正如你可能已经注意到的那样,我提到使用REST API的公司并没有存在太长时间,他们的API大多数都出现在今年。因此,如果创建Web服务可以成为时尚的话,REST绝对是时尚的方式。 REST Web服务的主要优点是:

  • 轻量级 - 没有太多额外的XML标记,易于阅读结果
  • 易于构建 - 不需要工具包。 SOAP也有一些优点:

易于使用 - 有时很严格-类型检查,遵循合同开发工具对于消费Web服务而言,有时在哪种方式更容易之间需要做出权衡。例如,Google的AdWords Web服务在ColdFusion中真的很难使用,它使用SOAP头和许多其他使其有点困难的东西。相反地,Amazon的REST Web服务有时可能难以解析,因为它可以高度嵌套,而且基于您搜索的内容,结果架构可能会有所不同。

无论您选择哪种架构,都要确保开发人员可以轻松访问它,并且有很好的文档说明。

Freitag, P. (2005). "REST vs SOAP Web Services". 从http://www.petefreitag.com/item/431.cfm检索,于2010年6月13日。


55
请停止发布这篇文章或链接。它是2005年的,因此不太相关。此外,你不是作者,对吧? - John Saunders
3
REST被认为是无状态的,那么雅虎等网站如何在需要登录的情况下使用它们呢?这不违反了REST的第二法则(无状态)吗? - antnewbee
4
这篇10年前的文章现在是否仍有意义? - akhil_mittal

44

SOAP

简单对象访问协议(SOAP)是一种标准,用于定义消息体系结构和消息格式的XML语言,被Web服务使用。它包含操作的描述。

WSDL是一种基于XML的语言,用于描述Web服务及其如何访问。它可以在SMTP、HTTP、FTP等上运行。它需要中间件支持和明确定义的机制来定义服务,例如WSDL+XSD和WS-Policy。SOAP将返回基于XML的数据。

REST

表述性状态转移(RESTful)Web服务是第二代Web服务。

RESTful Web服务通过HTTP通信,而不是基于SOAP的服务,并且不需要XML消息或WSDL服务API定义。对于REST,不需要中间件,只需要HTTP支持。它是一个WADL标准,REST可以返回XML、纯文本、JSON、HTML等。


43
REST是一种架构风格。
REST将提供易于理解的结果。
REST是无状态的。
REST服务易于缓存。
SOAP是一种协议。它可以在JMS,FTP和HTTP之上运行。

2
尽管REST与HTTP非常相配,就像SOAP一样,但它并不限于HTTP。 - Alireza

33
  1. REST没有WSDL(Web服务描述语言)接口定义。

  2. REST是基于HTTP的,但SOAP可以使用任何传输协议,如HTTP、FTP、SMTP、JMS等。


15
REST也有类似SOAP的WSDL,叫做WADL。 - ant
6
REST不仅仅是XML,它可以是任何你可以通过HTTP传输的东西(纯文本、JSON、HTML等)。 - GokcenG
我认为SOAP WSDL也是用XML编写的。 - Deepak Lamichhane
9
REST可以用于HTTP、FTP和STMP等协议的实现。 - kedar kamthe
REST可以通过SMTP、FTP等方式实现,只需要一个URI方案即可。阅读- https://dev59.com/sGgu5IYBdhLWcg3w6rQ9#10976047 - Raúl

27
  • REST代表“表现层状态转移”,而SOAP代表“简单对象访问协议”。

  • SOAP定义了自己的安全性,而REST继承了底层传输的安全性。

  • SOAP不支持错误处理,但REST内置了错误处理

  • REST轻量级且不需要XML解析。 REST可以被任何客户端使用,包括带有Ajax和JavaScript的Web浏览器。 REST消耗更少的带宽,它不需要每个消息都有SOAP头。

    • REST在提供URI的任何协议上都很有用。请忽略下面图片中关于REST的第5点。

SOAP vs. REST


4
REST不仅限于HTTP协议,还可以在任何提供URI的协议上使用。 - Raúl
2
SOAP具有内置的错误处理机制,并发送错误信息。SOAP-ENV:Fault <faultcode></faultcode> <faultstring></faultstring> <faultactor></faultactor> </SOAP-ENV:Fault>https://www.tutorialspoint.com/soap/soap_fault.htm - vimal krishna
@Raúl,是的,你说得对。 - IRSHAD
Uhhmm SOAP非常易于阅读,毕竟它是XML。RPC风格的SOAP已经被弃用,文档式服务定义是首选风格。声称REST在性能上优于SOAP是绝对荒谬的。一个无限循环的REST服务永远不会像一个简单的hello world SOAP服务那样快速执行。 - Namphibian

23

REST vs. SOAP

SOAP:

► SOAP是一种简单对象访问协议,可在TCP/UDP/SMTP上运行。
► SOAP以XML格式读取和编写请求响应消息。
► SOAP使用接口定义服务。
► 由于SOAP具有自己的安全性和明确定义的标准,因此更加安全。
► SOAP遵循RPC和文档样式来定义Web服务。
► SOAP使用SOAP-UI作为客户端测试工具。

REST

► REST是表现层状态转移,使用底层HTTP协议。
► REST是无状态的。
► REST是一种用于描述和定义Web服务的架构风格。
► REST可以在JSON/XML /Plain HTML格式下读取和编写请求响应消息。
► REST为Web服务中的每个资源使用URI。资源可以是图像、文本、方法等。
► REST使用一组动词,如HTTP的GET、POST、PUT、DELETE。
► REST比SOAP UI更易于开发和管理。
► REST具有轻量级的客户端工具或插件,可轻松集成到浏览器中。
► REST服务可缓存。


REST可以使用任何其他传输协议(FTP,SMTP等),唯一的条件是它们必须实现URI方案。请参见- https://dev59.com/sGgu5IYBdhLWcg3w6rQ9#10976047 - Raúl

16

REST和SOAP的区别:

这里输入图片描述


8

SOAP Web服务:

  1. 如果您的应用程序需要保证可靠性和安全性,则SOAP提供了额外的标准以确保此类操作。
  2. 如果双方(服务提供者和服务使用者)必须就交换格式达成一致,则SOAP为这种类型的交互提供了严格的规范。

RestWeb服务:

  1. 完全无状态操作:适用于无状态CRUD(创建、读取、更新和删除)操作。
  2. 缓存情况:如果需要缓存信息。

6

SOAP Web服务总是执行POST操作,而使用REST您可以选择特定的HTTP方法,如GET、POST、PUT和DELETE。

例如:使用SOAP获取项目时,您应创建请求XML,但在REST的情况下,您可以直接在URL中指定项目ID。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接