比较和对比REST和SOAP Web服务?

时间:2012-06-11 07:16:32

标签: web-services rest soap

我目前发现类似的是使用互联网协议(HTTP)在消费者和提供者之间交换数据。

区别在于:

  1. SOAP是一种基于XML的消息协议,而REST是一种架构风格
  2. SOAP使用WSDL进行消费者和提供者之间的通信,而REST只使用XML或JSON来发送和接收数据
  3. SOAP通过调用RPC方法调用服务,REST只是通过URL路径调用服务
  4. SOAP不会返回人类可读的结果,而REST结果只能是纯XML或JSON
  5. SOAP不仅仅是通过HTTP,它还使用其他协议,如SMTP,FTP等,REST仅通过HTTP
  6. 我所知道的就是他们之间的差异。任何人都可以纠正我并添加更多。

3 个答案:

答案 0 :(得分:54)

  

SOAP使用WSDL进行通信btw使用者和提供者,而   REST只使用XML或JSON来发送和接收数据

WSDL定义了客户端和服务之间的契约,并且本质上是静态的。在REST的情况下,合同有些复杂,并且由HTTP,URI,媒体格式和应用程序特定协调协议定义。与WSDL不同,它具有高度动态性。

  

SOAP不会返回人类可读的结果,而REST结果是可读的,只是简单的XML或JSON

事实并非如此。纯XML或JSON根本不是RESTful。它们都没有定义任何控件(即链接和链接关系,方法信息,编码信息等......),这些控件是针对REST的,因为消息必须是自包含的,并且协调代理/客户端和服务之间的交互。

通过链接+语义链接关系,客户端应该能够确定下一个交互步骤是什么,并按照这些链接继续与服务进行通信。

消息不必是人类可读的,可以使用神秘的格式并构建完全有效的REST应用程序。消息是否是人类可读的并不重要。

因此,纯XML(application / xml)或JSON(application / json)不足以构建REST应用程序。使用具有强大语义含义的这些通用媒体类型的子集并提供足够的控制信息(链接等)来协调客户端和服务器之间的交互是合理的。

  

REST仅通过HTTP

不正确,HTTP是最广泛使用的,当我们谈论REST Web服务时,我们只假设HTTP。 HTTP定义了与其方法(GET,POST,PUT,DELETE,PATCH等)的接口以及可以统一用于与资源交互的各种头。这种均匀性也可以通过其他协议来实现。

P.S。 REST的非常简单但非常有趣的解释:http://www.looah.com/source/view/2284

答案 1 :(得分:4)

在日常实用的编程术语中,最大的区别在于,使用SOAP,您正在使用静态和强定义的数据交换格式,而REST和JSON数据交换格式相比之下非常松散。例如,使用SOAP,您可以验证交换的数据是否与XSD架构匹配。因此,XSD作为客户和服务器如何理解如何交换数据的“合同”。

JSON数据通常不会根据强烈定义的格式传递(除非您使用支持它的框架...例如http://msdn.microsoft.com/en-us/library/jj870778.aspx或实现json-schema)。< / p>

事实上,有些(很多/大多数人)认为JSON的“动态”秘诀违背了通过数据合同约束它的哲学/文化(Should JSON RESTful web services use data contract

过去使用动态松散类型语言的人们往往会对JSON的松散感到更加自在,而强类型语言的开发人员更喜欢使用XML。

http://www.mnot.net/blog/2012/04/13/json_or_xml_just_decide

答案 2 :(得分:0)

SOAP带来了自己的协议,并专注于将应用程序逻辑(而不是数据)作为服务公开。 SOAP公开了操作。 SOAP专注于访问命名操作,每个操作都通过不同的接口实现一些业务逻辑。

虽然SOAP通常被称为“Web服务”,但这是用词不当。 SOAP几乎没有与Web有关。 REST提供基于URI和HTTP的真正“Web服务”。

通过举例说明,这里有几个电话和他们适当的家庭评论。

getUser(User);

当您访问资源(数据)时,这是休息操作。

switchCategory(User, OldCategory, NewCategory)

REST允许许多不同的数据格式,而SOAP只允许XML。虽然这可能会增加REST的复杂性,因为您需要处理多种格式,但根据我的经验,它实际上非常有用。 JSON通常更适合数据和解析更快。 REST允许更好地支持浏览器客户端,因为它支持JSON。