这个问题在这里已经有了答案:Representational state transfer (REST) and Simple Object Access Protocol (SOAP) (14 answers) Closed 9 years ago。
我目前发现类似的情况是两者都使用互联网协议(HTTP)在消费者和提供者之间交换数据。
区别在于:
SOAP 是基于 XML 的消息协议,而 REST 是一种架构风格 SOAP 使用 WSDL 进行消费者和提供者之间的通信,而 REST 只是使用 XML 或 JSON 发送和接收数据 SOAP 通过调用 RPC 方法调用服务,REST 只是简单地调用服务通过 URL 路径 SOAP 不返回人类可读的结果,而 REST 结果仅通过纯 XML 或 JSON 可读 SOAP 不仅通过 HTTP,它还使用其他协议,例如 SMTP、FTP 等,REST 仅通过 HTTP
这就是我所知道的它们之间的差异。任何人都可以纠正我并添加更多内容。
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 应用程序。使用这些通用媒体类型的子集总是合理的,这些媒体类型具有强烈的语义意义并提供足够的控制信息(链接等)来协调客户端和服务器之间的交互。
有关控制信息的更多详细信息,我强烈建议您阅读:http://www.amundsen.com/hypermedia/hfactor/
网页链接:https://www.rfc-editor.org/rfc/rfc5988
注册链接关系:http://www.iana.org/assignments/link-relations/link-relations.xml
REST 仅通过 HTTP
不正确,HTTP 使用最广泛,当我们谈论 REST Web 服务时,我们只是假设 HTTP。 HTTP 定义了接口及其方法(GET、POST、PUT、DELETE、PATCH 等)和可以统一用于与资源交互的各种标头。这种一致性也可以通过其他协议来实现。
PS 非常简单但非常有趣的 REST 解释:http://www.looah.com/source/view/2284
在日常的实际编程术语中,最大的区别在于,使用 SOAP,您使用的是静态和强定义的数据交换格式,相比之下,REST 和 JSON 数据交换格式非常松散。例如,使用 SOAP,您可以验证交换的数据是否与 XSD 模式匹配。因此,XSD 充当了客户端和服务器如何理解所交换数据的结构的“合同”。
JSON 数据通常不会根据强定义的格式传递(除非您使用支持它的框架.. 例如 http://msdn.microsoft.com/en-us/library/jj870778.aspx 或实现 json-schema)。
事实上,一些人(很多/大多数人)会争辩说,JSON 的“动态”秘诀违背了通过数据合同约束它的哲学/文化 (Should JSON RESTful web services use data contract)
习惯于使用动态松散类型语言的人们往往更喜欢 JSON 的松散性,而来自强类型语言的开发人员更喜欢 XML。
http://www.mnot.net/blog/2012/04/13/json_or_xml_just_decide
SOAP 带来了它自己的协议,并专注于将应用程序逻辑(而不是数据)作为服务公开。 SOAP 公开操作。 SOAP 专注于访问命名操作,每个操作通过不同的接口实现一些业务逻辑。
尽管 SOAP 通常被称为“Web 服务”,但这是用词不当。 SOAP 与 Web 几乎没有任何关系。 REST 提供基于 URI 和 HTTP 的真正“Web 服务”。
举例来说,这里有几个电话和他们适当的家与评论。
getUser(User);
这是访问资源(数据)时的休息操作。
switchCategory(User, OldCategory, NewCategory)
REST 允许许多不同的数据格式,而 SOAP 只允许 XML。虽然这似乎增加了 REST 的复杂性,因为您需要处理多种格式,但根据我的经验,它实际上是非常有益的。 JSON 通常更适合数据并且解析速度更快。由于支持 JSON,REST 可以更好地支持浏览器客户端。