ChatGPT解决这个技术问题 Extra ChatGPT

比较和对比 REST 和 SOAP Web 服务? [复制]

这个问题在这里已经有了答案: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 是一种协议,而 REST 是一个根本没有定义规范的概念。没有什么能阻止人们编写与 REST 兼容的 SOAP Web 服务。
(1) “SOAP 是一种基于 XML 的消息协议” (2) “SOAP 不返回人类可读的结果” --- 结论:XML 不是人类可读的。但显然……公平地说其中一个前提一定是错误的?

C
Community

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


+1 最后一个链接(“我如何向我的妻子解释 REST”)
C
Community

在日常的实际编程术语中,最大的区别在于,使用 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


protobuf 的类型比 XML 强得多!
来自documentation:“..you compile [the data] with protoc, the protocol buffer compiler, to generate code in C++, Java, or Python” - 似乎非常有限。直接的 JSON 和 SOAP 不受这些限制,因为整个要点是语言中立。
@fread2281 protobuf 的类型不是更强(这不是真的)。这是一个高性能的有线协议,需要编译后的代码来支持最新的格式(@Michael.M),这实际上与 SOAP 的限制没有什么不同,在 SOAP 的限制中,您必须在每一端部署 WSDL 和代码来应对最新格式。
S
Shiven

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

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

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

getUser(User);

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

switchCategory(User, OldCategory, NewCategory)

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


有趣的是,这个答案正是 this 2010 年 1 月博文所说的……几乎是逐字逐句
"(not data)" = FALSE - SOAP Web 服务中的 WSDL 为返回的数据输入/输出提供了非常丰富和清晰的描述,以便可以根据 XSD '合同'轻松序列化/反序列化数据。这就是它在 .Net/WCF 中被称为“DataContract”的全部原因
(“SOAP 只允许 XML”)= 这并不意味着您不能保持 XML 标记非常简单并嵌入任何其他格式,包括 JSON 或 base64 编码数据。如果您认为必须将 SOAP 数据包装在标记 (XML) 中,那么反驳 JSON 也需要它的标记包装才能从 A 点到 B 点很简单。使用 SOAP Web 服务 JavaScript 很简单。
“REST 允许 更好 支持浏览器客户端,因为它支持 JSON”= FALSE - 旧版浏览器不支持原生 JSON 解析 (stackoverflow.com/questions/891299/…) 发出 HTTP 请求以通过 JavaScript 进行 SOAP 调用自 AJAX 时代以来就已成为可能。 jQuery SOAP 是一个库示例,它使得从可以运行 jQuery JavaScript 代码的浏览器调用 SOAP 服务变得非常简单。你能指定另一种“更好”的方式吗?