1. REST

REST(Representational State Transfer)是一种用于构建 API 的架构风格。 它不是某种具体的协议或标准,而是一组设计原则,用于创建可扩展、可靠且易于维护的 Web 服务。遵循这些原则的 API 被称为 RESTful API。

REST 最常见的实现方式是基于 HTTP 协议和 JSON 数据格式,但也可以使用其他协议(如 SMTP、FTP)和数据格式(如 XML、HTML)。不过,实际开发中绝大多数 RESTful 服务都使用 HTTP + JSON 的组合。

1.1 REST 的核心约束

要称为 RESTful API,必须满足以下六大核心约束:

客户端-服务器分离(Client-Server)
前后端分离架构,提高可扩展性和可移植性,多个客户端可共用同一套接口。

无状态(Stateless)
每次请求都必须包含所有必要的信息,服务器不保存客户端的会话状态。这样可以提高系统的可靠性和可伸缩性。

可缓存(Cacheable)
服务器应明确标识响应是否可缓存,客户端可以缓存数据以减少请求次数,提升性能。

统一接口(Uniform Interface)
每个资源都应有唯一的 URI,数据表示独立于数据库结构,提升接口的通用性和可理解性。

分层系统(Layered System)
客户端无需知道是否直接连接后端服务器,可以有中间层如负载均衡器、缓存服务器等,便于扩展和安全控制。

按需代码(Code on Demand)(可选)
服务器可以向客户端发送可执行代码(如 JavaScript),但这不是必须的。

1.2 HTTP 请求结构

REST API 通常使用 HTTP 协议进行通信,一个完整的 HTTP 请求包含以下几个部分:

  • 请求方法(HTTP Method):如 GET、POST、PUT、DELETE 等
  • 请求头(Headers):可选,用于传递元数据,如 Accept、Content-Type 等
  • 资源路径(URI):指定请求的资源地址
  • 请求体(Body):可选,用于 POST/PUT 请求,携带数据

下面是一个典型的 POST 请求示例:

POST https://jsonplaceholder.typicode.com/posts
Accept: application/json
Content-Type: application/json

{
  "title": "RESTful API 设计",
  "body": "REST 是一种架构风格,常用于构建 Web 服务。",
  "userId": 1
}

该请求向目标服务器创建一个新的博客文章资源。请求头指定客户端期望返回 JSON 格式数据,请求体包含要创建的资源内容。


2. SOAP

SOAP(Simple Object Access Protocol)是一种标准化的消息协议,用于在分布式环境中交换结构化信息。 它最初由 Microsoft 提出,具有高度的规范性、可扩展性和安全性。

与 REST 不同,SOAP 是一种协议,而非架构风格。它要求开发者严格遵循其规范,灵活性较低,但标准化程度高,适用于企业级、安全性要求高的场景。

2.1 SOAP 消息结构

一个典型的 SOAP 消息是一个 XML 文档,其结构如下图所示:

SOAP Message Page 1

SOAP 消息由以下几个部分组成:

  • Envelope(信封):必须存在,标识该文档为一个 SOAP 消息
  • Header(头部):可选,用于携带额外信息,如认证、超时等
  • Body(主体):必须存在,包含请求或响应数据
  • Fault(错误信息):可选,用于描述调用过程中发生的错误

以下是一个获取自行车价格的 SOAP 请求示例:

<soap:Envelope>
    <soap:Header>
        <maxTime value="10000"/>
    </soap:Header>
    <soap:Body>
        <GetPrice>
            <Name>bicycle</Name>
        </GetPrice>
    </soap:Body>
</soap:Envelope>

在该请求中,maxTime 是 Header 中的自定义标签,表示客户端等待响应的最大毫秒数;GetPrice 是要调用的方法,Name 是方法参数。

2.2 WSDL(Web Services Description Language)

WSDL 是 SOAP 服务的接口描述文档。 它是一个 XML 文件,用于定义服务提供的功能、调用方式以及服务地址。

WSDL 文件可以被工具(如 SoapUI)用来自动生成客户端代码,极大提高了开发效率。

WSDL 通常包含以下信息:

  • 提供的服务列表
  • 各操作的输入输出参数
  • 服务的访问地址(Endpoint)

3. REST vs SOAP:关键对比

特性 REST SOAP
协议类型 架构风格 标准化协议
数据格式支持 JSON、XML、HTML 等 仅支持 XML
状态管理 无状态 可支持有状态
缓存支持 支持 不支持
安全性 依赖 HTTPS、OAuth 等 支持 WS-Security 扩展协议
性能 更轻量,适合移动端和高并发 重量级,性能较低
可读性 JSON 格式易读 XML 格式冗长复杂
接口定义 无强制规范,文档常为 OpenAPI/Swagger 必须配合 WSDL 使用
适用场景 Web、移动应用、微服务 企业级、金融、政务等安全性要求高的系统

踩坑提醒 ⚠️

  • 不要盲目选择 REST:虽然 REST 更流行,但如果你的项目需要高度标准化和安全性(如银行系统),SOAP 仍然是更合适的选择。
  • 注意性能瓶颈:SOAP 因为使用 XML,数据体积大、解析效率低,不适合高并发或低延迟场景。
  • WSDL 的复杂性:虽然 WSDL 提供了完整的服务描述,但也带来了较高的学习和维护成本。

4. 结论

本文深入介绍了 REST 和 SOAP 两种 Web 服务的设计理念、结构特点和使用场景。REST 以其轻量、灵活和易用性在现代开发中占据主流地位,而 SOAP 凭借其标准化、安全性和可扩展性,依然在企业级系统中发挥重要作用。

选择哪种方式,取决于具体业务需求:

  • ✅ 如果你需要快速开发、良好的性能和广泛的生态支持,选择 REST
  • ✅ 如果你所在的行业对标准、安全、事务有严格要求,建议使用 SOAP

无论选择哪一种,都需要根据项目实际情况进行权衡。


原始标题:REST vs SOAP