REST 是什么
REST 是一种以资源为中心的架构风格,用统一接口与表述操作资源状态。实践中意味着:资源用名词复数命名,层级关系体现在路径上,通过 HTTP 方法表达操作语义,用状态码表达结果,用超媒体表达可继续的动作。它常被简化成“用 JSON 加 HTTP”,其实无状态、可缓存、分层系统与统一接口这些约束才是它带来可伸缩性的原因。
命名对照
| 做法 | 推荐写法 | 说明 |
|---|---|---|
| 资源命名 | GET /orders/123 | 名词复数,层级表达从属关系 |
| 子资源动作 | POST /orders/123/cancel | 无法映射到标准方法时用子资源表达动作 |
| 集合过滤 | GET /orders?status=paid&page=2 | 过滤、分页走查询参数 |
| 避免 | GET /getOrder?id=123 | 动词入路径,缓存与语义都受影响 |
| 避免 | POST /orders/delete/123 | 放弃 HTTP 方法语义,工具链无法识别 |
基本信息
| 核心约束 | 统一接口、无状态、可缓存、分层系统、按需代码 |
|---|---|
| 无状态含义 | 每个请求自带完成处理所需的信息,服务端不保存会话上下文 |
| 状态码使用 | 201 创建成功、204 无内容、409 冲突、422 语义错误 |
| 版本策略 | 路径版本、请求头版本或演进式兼容,选定后统一执行 |
| 文档方式 | OpenAPI 描述契约,便于生成客户端与自动化测试 |
典型使用场景
- 对外开放接口:资源化设计便于缓存与第三方理解
- 前后端分离:契约清晰,前端可依据接口文档独立开发
- 移动端接入:无状态便于横向扩容与负载均衡
- 多语言客户端:统一接口语义降低各端适配成本
- 内部服务集成:简单查询与写入用 REST,复杂交互考虑消息
- 网关治理:按方法与路径做限流、鉴权与审计策略
REST 的约束不止“用 JSON 加 HTTP”:统一接口、无状态、可缓存与分层系统是常被忽略但影响可伸缩性的部分。
把界面逻辑直接映射成资源(每个页面一个接口),会导致接口随界面改版频繁变动,复用性极差。