Skip to content

参考:REST 动词、状态码、分页与易错点速查

基于 REST 架构风格 · HTTP/1.1 (RFC 9110) · 核于 2026-08

速查

  • REST 定义:Roy Fielding 2000 提出的网络架构风格,基于 HTTP,资源 + 动词 + 状态码。
  • 六大约束:客户端-服务器分离、无状态、可缓存、统一接口、分层、按需代码(可选)。
  • 资源 URI:名词复数(/users),层级 ≤ 2 层,查询参数过滤。
  • 动词语义:GET(查询,幂等安全)、POST(新增/触发,不幂等)、PUT(全量替换,幂等)、PATCH(部分更新)、DELETE(移除,幂等)。
  • 状态码:2xx 成功、3xx 重定向、4xx 客户端错、5xx 服务端错。401 vs 403(认证 vs 授权),400 vs 422(格式 vs 语义)。
  • 幂等性:GET/PUT/DELETE 幂等,POST 不幂等;非幂等操作用 Idempotency-Key 防重。
  • 分页:offset(简单,深翻慢漂移)、cursor(稳定,不能跳页)、keyset(最优,需唯一排序键)。

一、HTTP 动词速查

动词CRUD幂等安全用途成功响应
GETRead查询200 + body
POSTCreate新增 / 触发动作201 + Location
PUTUpdate全量替换200 / 204
PATCHUpdate✅*部分更新200 + body
DELETEDelete删除204
HEAD-只取头(如检查资源存在)200(无 body)
OPTIONS-查支持的动词(CORS 预检)200 + Allow 头

二、状态码速查

名称用途
200 OK成功GET / PATCH 成功
201 Created创建成功POST 新增,带 Location
202 Accepted已接收异步任务已排队
204 No Content无内容DELETE / PUT 成功
301 Moved Permanently永久重定向URI 永久变更
304 Not Modified未修改缓存命中
400 Bad Request请求格式错JSON 解析失败 / 缺必填
401 Unauthorized未认证没登录 / token 失效
403 Forbidden无权限登录了角色不够
404 Not Found不存在资源没找到
405 Method Not Allowed方法不允许URI 对但动词错(GET 用成了 DELETE)
409 Conflict冲突唯一约束 / 并发版本冲突
410 Gone永久消失曾存在已永久删除
422 Unprocessable Entity语义错业务校验失败
429 Too Many Requests限流配 Retry-After
500 Internal Server Error服务器错未捕获异常
502 Bad Gateway网关错上游挂了
503 Service Unavailable暂不可用维护 / 过载

三、分页策略对比

策略请求示例深翻漂移跳页total适用
offset?page=3&pageSize=20后台/小数据
cursor?cursor=abc&pageSize=20Feed/大数据
keyset?afterId=42&pageSize=20最快按id排序

四、PUT vs PATCH 速查

维度PUTPATCH
语义全量替换部分更新
body完整资源只传变化字段
漏传字段被置空/默认保留原值
幂等通常 ✅
表单全量编辑-
单字段编辑-

五、幂等性速查

动词幂等防重试方式
GET天然可重试
PUT天然可重试
DELETE天然可重试(首次 204,后续可能 404)
POST需 Idempotency-Key 头
PATCH✅*取决于操作

六、易错点清单

  • 「REST 就是 HTTP API」:错。HTTP 是协议,REST 是基于 HTTP 的架构风格(六大约束)。POST /createUser 是 HTTP API 不是 REST(动词在 URL 里违反统一接口)。
  • 「GET 可以用来创建资源」:错。GET 必须安全(无副作用)。用 GET 改数据会被爬虫/预取/缓存误触发,导致数据被误改。
  • 「PUT 和 PATCH 一样,都是更新」:错。PUT 是全量替换(漏传字段被清空),PATCH 是部分更新(只改变化字段)。误用 PUT 做部分更新是高频 bug。
  • 「创建成功返回 200 就行」:不规范。应用 201 Created + Location 头指向新资源。
  • 「401 和 403 一样」:错。401 = 未认证(没登录),403 = 无权限(登录了但角色不够)。
  • 「所有错误都返回 200 + error body」:反模式。破坏 HTTP 状态码语义,网关/监控/客户端无法据状态码判断。应用正确的 4xx/5xx。
  • 「offset 分页随便用」:深翻慢(LIMIT 100000,20 扫 10 万行),且有数据漂移。大数据集/无限滚动用 cursor。
  • 「DELETE 返回 200 + body」:可以但不规范。DELETE 成功通常 204 No Content(删了就没内容返回)。
  • 「幂等 = 重复请求返回相同结果」:不严谨。幂等是服务器状态相同(DELETE 第二次返回 404 但状态一致,仍算幂等),不是响应字节相同。
  • 「POST 一定不幂等」:基本对,但 POST + Idempotency-Key 可实现应用层幂等(Stripe 支付)。

七、进阶方向(链接其他叶)

权威链接