知识卡片

Richardson成熟度模型的四级REST演进

结构图卡

内容

“服务设计得够不够RESTful”没有二元答案,Richardson成熟度模型(RMM)把它 拆成0-3四个递进级别,用医生预约系统为例:第0级完全是RPC风格,Endpoint是 动词(/appointmentService?action=query),失败只能靠响应体里的code字段 分支判断;第1级引入资源概念,Endpoint变成名词加ID(/doctors/mjones), 但异常处理、认证授权等问题仍未解决;第2级引入统一接口,把增删改查映射到 HTTP动词和标准状态码(GET查询、POST创建返回201、冲突返回409 Conflict), 这是目前绝大多数系统实际达到的水平;第3级引入超媒体控制(HATEOAS),响应 里附带links字段告诉客户端接下来能做什么操作(如确认预约的链接),服务端 和客户端因此完全解耦,调整服务或升级API都不再需要客户端硬编码Endpoint。 四级演进的核心线索是:每升一级,客户端对服务端实现细节的依赖就减少一层—— 从依赖字段含义(0级),到依赖URI结构(1-2级),最后到只依赖响应中给出的 超链接(3级)。

结构图

flowchart TD
    L0["第0级 Swamp of POX<br/>动词Endpoint+响应code分支判断"] -->|引入资源概念| L1["第1级 Resources<br/>名词Endpoint+资源ID"]
    L1 -->|引入统一接口| L2["第2级 HTTP Verbs<br/>GET/POST映射标准状态码"]
    L2 -->|引入超媒体控制HATEOAS| L3["第3级 Hypermedia Controls<br/>响应内嵌links驱动后续操作"]

参考来源

- 位置:《凤凰架构:构建可靠的大型分布式系统》第2章"访问远程服务"2.2.3节 "RMM"(源文件:_epub-src对应OEBPS/Text/chapter22.xhtml) - 结论依据:原文借用Martin Fowler关于RMM的医生预约系统示例,逐级展示第 0至3级API请求/响应格式的具体变化,并指出"做到第3级REST,服务端API和 客户端完全解耦",直接支撑本卡片四级演进的结构梳理。 - 原始内容:第0级(The Swamp of Plain Old XML):完全不REST。第1级 (Resources):开始引入资源的概念。第2级(HTTP Verbs):引入统一接口, 映射到HTTP协议的方法上。第3级(Hypermedia Controls):超媒体控制…… 如果做到了第3级REST,那服务端的API和客户端也是完全解耦的。