REST(表述性状态转移)
字数 685 2025-11-29 10:13:31
REST(表述性状态转移)
REST是一种基于HTTP协议的软件架构风格,用于构建分布式系统和Web服务。其核心思想是将网络上的所有事物抽象为资源,通过统一接口进行操作。
-
基础概念:资源与标识
- 资源指网络上的任意实体,如用户数据、图片、服务等
- 每个资源通过统一资源标识符(URI)唯一标识,例如:
https://api.example.com/users/123 - URI应使用名词性结构表示资源,避免在路径中使用动词
-
统一接口约束
- 使用标准HTTP方法对资源进行操作:
- GET:获取资源表示(安全且幂等)
- POST:创建新资源(非幂等)
- PUT:完整更新资源(幂等)
- PATCH:部分更新资源
- DELETE:删除资源(幂等)
- 通过HTTP状态码表示操作结果:
- 200 OK:成功
- 201 Created:创建成功
- 400 Bad Request:客户端错误
- 404 Not Found:资源不存在
- 使用标准HTTP方法对资源进行操作:
-
无状态约束
- 每个请求必须包含处理所需的所有信息
- 服务器不保存客户端会话状态
- 示例对比:
// 违反无状态:依赖服务器保存的会话 GET /cart HTTP/1.1 Cookie: sessionid=abc123 // 符合无状态:显式传递所有参数 GET /users/123/cart HTTP/1.1 Authorization: Bearer xyz789
-
表述分离
- 资源与其表现形式分离
- 通过Content Negotiation机制支持多种格式:
GET /users/1 HTTP/1.1 Accept: application/json GET /users/1 HTTP/1.1 Accept: application/xml
-
超媒体驱动(HATEOAS)
- 响应中包含后续操作的链接
- 示例JSON响应:
{ "user": { "id": 123, "name": "张三", "_links": { "self": { "href": "/users/123" }, "orders": { "href": "/users/123/orders" } } } }
-
缓存约束
- 响应应明确标识是否可缓存
- 使用HTTP缓存头控制缓存行为:
HTTP/1.1 200 OK Cache-Control: max-age=3600 ETag: "a1b2c3"
-
分层系统
- 支持通过代理、网关等中间组件构建分层架构
- 客户端无需了解是否直接连接最终服务器
-
实践示例
- 完整的RESTful API调用流程:
# 创建用户 POST /users HTTP/1.1 Content-Type: application/json {"name": "李四"} # 响应 HTTP/1.1 201 Created Location: /users/124
- 完整的RESTful API调用流程:
REST架构通过这些约束实现了系统的可伸缩性、简单性和可靠性,成为现代Web API设计的主流标准。