75

我目前发现类似的情况是都使用互联网协议(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

这就是我所知道的它们之间的差异。任何人都可以纠正我并添加更多内容。

4

3 回答 3

54

SOAP 使用 WSDL 进行消费者和提供者之间的通信,而 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 等)和各种可以统一用于与资源交互的标头。这种一致性也可以通过其他协议来实现。

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

于 2012-06-11T07:34:11.507 回答
4

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

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

事实上,一些人(很多/大多数人)会争辩说 JSON 的“动态”秘密酱违背了通过数据契约约束它的哲学/文化(JSON RESTful Web 服务是否应该使用数据契约

习惯于使用动态松散类型语言的人们往往更喜欢 JSON 的松散性,而来自强类型语言的开发人员更喜欢 XML。

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

于 2013-03-21T00:27:22.110 回答
0

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

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

举例来说,这里有几个电话和他们适当的家与评论。

getUser(User);

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

switchCategory(User, OldCategory, NewCategory)

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

于 2012-06-11T07:20:49.580 回答