知识卡片
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和客户端也是完全解耦的。