理解REST API:每个人都搞错的基础知识

REST(表现性状态转移)是大多数Web API使用的架构风格——但”REST API”这个名称被不一致地使用,许多所谓的REST API违反了原始设计原则。以下是REST实际上是什么以及为什么这些原则中的一些很重要。

核心原则

面向资源:API应该暴露资源(名词),而非操作(动词)。GET /users/123是REST;GET /getUser?id=123是基于HTTP的RPC,而非REST。HTTP方法有含义:GET(读取,安全,幂等)、POST(创建)、PUT(更新/替换,幂等)、PATCH(部分更新)、DELETE(删除)。对所有事情使用POST忽略了协议语义。无状态:每个请求包含所需的所有信息——服务器上请求之间没有会话状态。状态码有含义:200(成功)、201(已创建)、400(错误请求——客户端错误)、401(未授权)、403(禁止)、404(未找到)、500(服务器错误)。在响应体中返回{“error”: “not found”}并带200状态码是REST反模式。

URL设计

资源使用复数名词:/users、/orders、/products。嵌套资源表达关系:/users/123/orders(属于用户123的订单)。URL中避免动词:/users/123/activate是错误的;PATCH /users/123 {“active”: true}更好。使用查询字符串进行过滤和排序:/products?category=books&sort=price&order=asc。

每个人都搞错的状态码

404意味着资源不存在,而非搜索返回无结果。GET /search?q=nothing返回404是错误的——返回200并带空的结果数组。422(不可处理的实体)是验证失败的正确状态,而非400(意味着请求格式错误)或200。

何时不使用REST

当客户端需要灵活地获取数据时(避免过度获取),GraphQL更好。对于内部服务间通信(模式优先、高效二进制协议),gRPC更好。REST适用于公共API、移动后端和任何简单性和广泛客户端支持重要的情况。

上一篇 Understanding REST APIs: The Basics That Everyone Gets Wrong
下一篇 Munich Beer Garden Culture: Beyond Oktoberfest