什么是超媒体与 HATEOAS
HATEOAS(Hypermedia as the Engine of Application State)指响应中携带可用状态转移的链接,客户端不预置 URL 规则,而是按服务端给出的链接决定下一步能做什么。它是 Richardson 成熟度模型的第 3 级。适合状态机明显、步骤有限的业务流程;实现与理解成本较高,投入前要评估收益。
基本信息
| 表现形式 | 响应内 _links 字段给出可用操作与目标地址 |
|---|---|
| 核心思想 | 服务端控制状态转移,客户端按链接驱动 |
| 适用条件 | 流程状态明确、需要服务端引导下一步操作 |
| 主要顾虑 | 客户端实现复杂度与前端框架生态支持有限 |
典型使用场景
- 订单状态流转:不同状态下可用操作不同,由响应决定可做什么
- 审核工作流:待审、通过、驳回等状态由服务端给出可用动作
- 版本演进:新增或调整路径时,客户端无需修改 URL 拼接逻辑
- 多端共用:移动端与网页端都按链接驱动,减少路径硬编码
- 权限可见性:无权操作时不展示对应链接,减少无效请求
- 对外接口:为第三方提供自描述接口,降低文档与联调成本
响应示例
响应示例
{
"id": "1001",
"status": "pending",
"amount": 1280.00,
"_links": {
"self": { "href": "/orders/1001" },
"cancel": { "href": "/orders/1001/cancel", "method": "POST" },
"pay": { "href": "/orders/1001/payment", "method": "POST" }
}
}
// 客户端按 _links 决定可执行操作;服务端仍必须逐请求鉴权使用前提与代价
| 方面 | 要求 | 说明 |
|---|---|---|
| 状态机 | 流程状态清晰且转移有限 | 状态模糊时链接集合难以定义 |
| 客户端 | 按链接驱动而非拼路径 | 需要客户端框架与团队习惯配合 |
| 鉴权 | 链接可见性只是提示 | 服务端必须做真实权限校验 |
| 文档 | 链接语义要被说明 | 缺少说明时客户端仍不知道操作含义 |
链接可见性可承担部分授权提示(不展示无权操作),但服务端仍必须做真实鉴权,否则链接可被直接构造调用。
链接地址硬编码域名或环境前缀,环境迁移或域名变更时会导致大量链接失效。