SOAP 与 REST 之间有何区别?

SOAP 和 REST 是两种互联网数据交换机制。例如,假设您的内部账户系统与客户的账户系统共享数据,以自动执行开发票任务。这两个应用程序使用定义通信规则的 API 共享数据。SOAP 和 REST 是两种不同的 API 设计方法。SOAP 方法是高度结构化的,它使用 XML 数据格式。REST 更灵活,允许应用程序交换多种格式的数据。

了解 API »

了解 XML »

SOAP 和 REST 有何相似之处?

要构建应用程序,可以使用许多不同的编程语言、架构和平台。在这些不同的技术之间共享数据是一项挑战,因为这些技术具有不同的数据格式。SOAP 和 REST 的出现都是为了解决这个问题。

您可以使用 SOAP 和 REST 在不同的应用程序之间构建 API 或通信点。Web 服务API 这两个术语可以互换使用。但是,API 是更广泛的类别。Web 服务是一种特殊类型的 API。

以下是 SOAP 和 REST 之间的其他相似之处:

  • 它们都描述了有关应用程序如何发出、处理和响应来自其他应用程序的数据请求的规则和标准
  • 它们都使用标准化互联网协议 HTTP 来交换信息
  • 它们都支持 SSL/TLS 进行安全、加密的通信

您可以使用 SOAP 或 REST 来构建安全、可扩展且容错的分布式系统。

了解 SSL 证书 »

SOAP API 和 REST API 是如何工作的?

SOAP 是一种较老的技术,它要求系统之间有严格的通信契约。随着时间的推移,增加了新的 Web 服务标准以适应技术变化,但它们会产生额外的开销。REST 是在 SOAP 之后开发的,从本质上解决了它的许多缺点。REST Web 服务也被称为 RESTful Web 服务

SOAP API

SOAP 是一种定义严格通信规则的协议。它有几个相关的标准,可以控制数据交换的各个方面。例如,以下是 SOAP 使用的一些标准:

  • Web 服务安全性(WS-Security)指定安全性措施,例如使用称为令牌的唯一标识符
  • Web 服务寻址(WS-Addressing)要求包括路由信息作为元数据
  • WS-ReliableMessaging 标准化 SOAP 消息收发中的错误处理
  • Web 服务描述语言(WSDL)描述 SOAP Web 服务的范围和功能

当您向 SOAP API 发送请求时,您必须将 HTTP 请求包装在 SOAP 信封中。这是一种按照 SOAP 请求要求修改底层 HTTP 内容的数据结构。由于存在信封,您还可以使用其他传输协议(例如 TCP 或互联网控制消息协议(ICMP))向 SOAP Web 服务发送请求。但是,SOAP API 和 SOAP Web 服务始终在其响应中返回 XML 文档。

REST API

REST 是一种软件架构风格,它对 API 的工作方式施加了六个条件。以下是 REST API 遵循的六项原则:

  1. 客户端-服务器架构。发件人和收件人在技术、平台、编程语言等方面相互独立。
  2. 分层。服务器可以有几个共同协作以完成客户端请求的中介体,但它们对客户端是不可见的。
  3. 统一接口。API 以完整且完全可用的标准格式返回数据。
  4. 无状态。API 独立于先前的请求完成每个新请求。
  5. 可缓存。所有 API 响应都是可缓存的。
  6. 按需编码。如果需要,API 响应可以包含代码片段。

您可以使用 GETPOST 之类的 HTTP 动词来发送 REST 请求。Rest API 响应通常采用 JSON 格式,但也可以采用不同的数据格式。

了解 RESTful API »

了解 JSON »

什么时候使用 SOAP 与 REST?

在 SOAP 和 REST 之间做出选择之前,请考虑您的场景和 API 用户的要求。以下标准值得考虑。

整体应用程序设计

移动应用程序和混合应用程序等现代应用程序,可以更好地与 REST API 配合使用。REST 为您提供了使用微服务和容器等现代架构模式设计应用程序的可扩展性和灵活性。但是,如果您需要集成或扩展已经有 SOAP API 的遗留系统,则最好继续使用 SOAP。

安全性

公有 API 的安全性要求较低,需要更大的灵活性,因此任何人都可以与之交互。因此,当您构建公有 API 时,REST 是更好的选择。相反,一些用于满足企业内部要求的私有 API(例如为满足合规性要求的数据报告)可能会受益于 SOAP 的 WS-Security 中更严格的安全性措施。

ACID 合规性

您的 API 用户是否需要在整个交易链中保持严格的一致性和数据完整性? 例如,即使一次更新失败,金融交易也会要求整批数据更新失败。

SOAP 在原子性、一致性、隔离性和耐久性(ACID)方面具有内置的合规性。而且 SOAP 可能更适合高数据完整性要求。在这种情况下,REST API 可能需要额外的软件模块才能在服务器或数据库级别强制执行状态。

主要区别:SOAP 与 REST

SOAP 是一种协议,而 REST 是一种架构风格。这对 SOAP API 和 REST API 的行为造成了显著差异。

设计

SOAP API 会公开函数或操作,而 REST API 是数据驱动的。例如,假设一个包含员工数据的应用程序,其他应用程序可以对该数据进行操作。该应用程序的 SOAP API 可以公开一个称为 CreateEmployee 的函数。要创建员工,您需要在发送请求时在 SOAP 消息中指定函数名称。

但是,该应用程序的 REST API 可能会公开一个名为 /employees 的 URL,而对该网址发出 POST 请求将创建新的员工记录。

灵活性

SOAP API 非常严格,仅允许在应用程序之间进行 XML 消息收发。应用程序服务器还必须维护每个客户端的状态。这意味着它在处理新请求时,必须记住所有以前的请求。

REST 更加灵活,它允许应用程序以纯文本、HTML、XML 和 JSON 的形式传输数据。REST 也是无状态的,因此 REST API 会将每个新请求与先前的请求分开处理。

性能

SOAP 消息更大、更复杂,这使得其传输和处理速度变慢。这会增加页面加载时间。

由于 REST 的消息大小较小,REST 比 SOAP 更快、更高效。REST 响应也是可缓存的,因此服务器可以将经常访问的数据存储在缓存中,以缩短页面加载时间。

可扩展性

SOAP 协议要求应用程序存储请求之间的状态,这提高了带宽和内存要求。因此,它使应用程序变得昂贵且难以扩展。

与 SOAP 不同的是,REST 允许无状态和分层架构,这使其更具可扩展性。例如,应用程序服务器可以将请求传递给其他服务器或允许中介(如内容分发网络)处理请求。

安全性

SOAP 需要一个额外的 WS-Security 层才能使用 HTTPS。WS-Security 使用额外的标头内容,来确保只有指定服务器中的指定进程读取 SOAP 消息内容。这会增加通信开销并对性能产生负面影响。

REST 支持 HTTPS,且不会产生额外开销。

可靠性

SOAP 内置了错误处理逻辑,它提供了更高的可靠性。另一方面,REST 要求您在通信失败时重试,而且其可靠性较差。

SOAP 与 REST 之间的区别摘要

 

 

SOAP

REST

代表 

简单对象访问协议

表述状态转移

它是什么?

SOAP 是应用程序之间通信的协议

REST 是一种用于设计通信接口的架构风格。

设计

SOAP API 会公开操作。

REST API 会公开数据。

传输协议

SOAP 是独立的,可以与任何传输协议一起使用。

REST 只能通过 HTTPS 使用。

数据格式

SOAP 仅支持 XML 数据交换。

REST 支持 XML、JSON、纯文本、HTML。

性能

SOAP 消息较大,这会使通信变慢。

由于较小的消息和缓存支持,REST 具有更快的性能。

可扩展性

SOAP 很难扩展。服务器通过存储先前与客户端交换的所有消息来维持状态。

REST 易于扩展。它是无状态的,因此每条消息都独立于之前的消息进行处理。

安全性

SOAP 支持加密,但需要额外开销。

REST 支持加密而不影响性能。

使用案例

SOAP 在遗留应用程序和私有 API 中非常有用。

REST 在现代应用程序和公有 API 中非常有用。

AWS 如何支持您的 API 需求?

Amazon Web Services(AWS)提供 Amazon API Gateway 来支持您的 API 要求。API Gateway 是一种完全托管的服务,可以帮助开发人员轻松创建、发布、维护、监控和保护任意规模的 API。使用 API Gateway,您可以创建 REST API,以便实现实时双向通信应用程序。

以下是您可以从使用 API Gateway 中获益的方式:

  • 为您用户提供适用于 API 请求和响应的高速性能。
  • 使用 AWS Identity and Access Management(IAM)和 Amazon Cognito 授予对 API 的访问权限。这两项服务都提供本机 OAuth 支持。
  • 同时运行同一 API 的多个版本,从而快速迭代、测试和发布新版本。
  • 监控性能指标和有关 API 调用、数据延迟和错误率的信息。 

立即创建 AWS 账户,开始在 AWS 上使用 REST API。

使用 AWS 的后续步骤

开始使用 REST API 进行构建
开始使用 SOAP API 进行构建