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 消息由以下几个部分组成:
- 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
无论选择哪一种,都需要根据项目实际情况进行权衡。