0

Java Web Services: Up And Running, Second Edition书中 的一句话:

“目前,两种风格的 Web 服务之间的区别并不明显,因为通过 HTTP 交付的基于 SOAP 的服务可以看作是 REST 风格服务的特例;”

如何 ?

4

1 回答 1

2

如何?

我认为作者的陈述是不正确的。

什么是肥皂?

根据维基百科:

SOAP 可以构成 Web 服务协议栈的基础层,提供可以构建 Web 服务的基本消息传递框架。这个基于 XML 的协议由三部分组成:一个信封,它定义了消息中的内容以及如何处理它,一组用于表示应用程序定义的数据类型实例的编码规则,以及一个表示过程调用和响应的约定。SOAP 具有三个主要特性:可扩展性(安全性和 WS-routing 属于正在开发的扩展)、中立性(SOAP 可用于任何传输协议,例如 HTTP、SMTP、TCP 或 JMS)和独立性(SOAP 允许任何编程模型)。

正如您所看到的,在 SOAP 的描述中确实没有任何内容对 API 调用的结构(url 明智)必须遵守的内容采取任何意识形态立场。当然,soap 使用 XML,并且 XML 可以有一个数据结构,它基本上可以作为 API 调用的规则集......这很酷。

相比之下,我们有 REST。

什么是 REST?

根据维基百科:

REST 架构风格描述了应用于架构的以下六个约束,同时让各个组件的实现自由设计:

  • 客户端-服务器:服务器不关心用户界面或用户状态,因此服务器可以更简单,更具可扩展性。
  • 无状态:客户端-服务器通信进一步受到请求之间没有客户端上下文存储在服务器上的限制。
  • 可缓存:响应必须隐式或显式将自己定义为可缓存或不可缓存,以防止客户端重复使用陈旧或不适当的数据来响应进一步的请求。
  • 分层系统:客户端通常无法判断它是直接连接到终端服务器,还是连接到中间的中间人。中间服务器可以通过启用负载平衡和提供共享缓存来提高系统可伸缩性。
  • 按需代码(可选):服务器可以通过传输可执行代码临时扩展或定制客户端的功能。
  • 统一接口:下面讨论的客户端和服务器之间的统一接口简化和解耦架构,使每个部分能够独立发展。(即 HTTP GET、POST、PUT、PATCH、DELETE)

比较

在我看来,它不应该被描述为 SOAP vs REST,它应该是 RPC vs REST。RPC 是远程过程调用,这基本上意味着您的 API 的每一项功能都会获得 1 个不同的 API 端点,依此类推。所以,REST 可以用 1 个 url 来做 RPC 用 7 做的事情。SOAP 是 RPC(对吗?)

是的,两者都是网络服务。

但是说一个 RPC API 是 RESTful-ish 因为它的传输HTTP几乎没有理由说它们是相似的……从上面的详细信息中,你可以看到 REST 对结构、传输、目的采取了更加意识形态化的方法,可伸缩性和服务状态,而 SOAP 并没有真正谈论这些事情,并且大概开发人员可以选择做或不做这些事情。

总之,我需要更多的上下文来真正理解作者试图表达的观点。如果你让它做RESTful的事情,一个 RPC API 可以类似于 REST 。但这真的是间接的,不是吗?

于 2013-09-27T17:43:42.577 回答