概述
REST 和 SOAP 是在线传输数据的两种不同的方法。具体而言,它们都定义了应用编程接口(API)(该接口允许数据在 Web 应用之间交换)的构建方式。表述性状态传递(REST)是一组架构原则。简单对象访问协议(SOAP)则是一个由万维网联盟(W3C)制定的官方协议。二者的主要区别在于 SOAP 是一种协议,而 REST 不是。通常,取决于实际用例和开发人员偏好,API 会遵循 REST 或 SOAP 准则。
REST:表述性状态传递
REST 是一组适合于轻量级 Web 服务和移动应用需求的架构原则。鉴于它是一组指导准则,因此这些建议的实施是由开发人员负责完成。
当有数据请求发送给 REST API 时,通常是通过超文本传输协议(通常称为 HTTP)来完成的。收到请求后,专为 REST 设计的 API(称为 RESTful API 或 RESTful Web 服务)可返回多种格式的消息:HTML、XML、纯文本及 JSON。JSON(JavaScript 对象表示法)是人们青睐的消息格式,因为它可以被任何编程语言(不管叫什么)读取,人机可读,并且十分轻量。因此,RESTful API 不仅更加灵活,而且更容易设置。
只要某个应用遵循了 6 个架构准则,那它就是 RESTful 应用。RESTful 应用必须具有:
- 由客户端、服务器和资源构成的客户端-服务器架构。
- 无状态客户端-服务器通信,即请求间隔期间,服务器上不会存储任何客户端内容。与会话状态相关的信息会存储在客户端上。
- 可缓存性数据,可免去客户端与服务器之间的某些交互。
- 组件间的统一接口:使信息以标准化形式传输,而不是应用各个需求特有的形式。REST 的创建者 Roy Fielding 表示,"这是区分 REST 架构风格与其他基于网络的风格的核心特征"。
- 分层系统约束,客户端与服务器之间的交互可以通过分层来进行调解。
- 按需编码,允许服务器通过传输可执行代码来扩展客户端的功能(但这样也会降低可见性,因此这是一条非必需准则)。
SOAP:简单对象访问协议
SOAP 是一项标准协议,其最初的设计意图是让使用不同语言且在不同平台上构建的应用之间进行通信。由于 SOAP 是一项协议,因此它会施加一些内置规则,从而增加复杂性和开销,并可导致页面加载时间延长。但是,这些标准还提供了内置合规性,使其更适合企业应用。内置合规性标准包括安全性、原子性、一致性、隔离性和持久性(ACID),这是一组旨在确保数据库事务可靠性的属性。
常见的 Web 服务规范包括:
- Web 服务安全性(WS 安全性):通过叫做"令牌"的唯一标识符,实现消息安全防护和传输方式的标准化。
- WS-ReliableMessaging:标准化了在不可靠的 IT 基础架构间传输消息的错误处理方式。
- Web 服务寻址(WS 寻址):将路由信息打包为 SOAP 标头中的元数据,而不是在网络深处维护此类信息。
- Web 服务描述语言(WSDL):描述 Web 服务的功能以及该服务的工作起点和终点。
当有数据请求发送给 SOAP API 时,可以通过任何应用层协议来处理该请求:HTTP(针对 Web 浏览器)、SMTP(针对电子邮件)、TCP 等等。但是,一旦收到请求,返回的 SOAP 消息必须以 XML 文档(一种人机均可读的标记语言)的形式返回。浏览器无法缓存已完成的 SOAP API 请求,因此如果不重新发送给 API,之后便无法访问该请求。