RESTful API 设计规范:资源、状态码与版本管理

API 开发 2026-08-18 5 浏览

前后端分离的项目里,接口设计直接决定协作效率。RESTful 不是必须遵守的法律,但它是一套经过验证的约定,按它设计,团队沟通成本最低。这篇讲核心几个点。

资源用名词,不用动词

REST 的核心思想是把数据当作"资源",URL 只描述资源,动作交给 HTTP 方法:

方法URL含义
GET/api/users获取用户列表
GET/api/users/12获取单个用户
POST/api/users创建用户
PUT/api/users/12整体更新
PATCH/api/users/12部分更新
DELETE/api/users/12删除用户

常见的错误写法是 /api/getUser/api/deleteUser。方法已经表达了动作,URL 里再放动词就重复了。

集合用复数,嵌套别太深

资源集合统一用复数:/api/users 而不是 /api/user。嵌套关系最多两层:

/api/users/12/orders      # 用户的订单
/api/orders/5/items        # 订单的商品

超过两层说明资源划分有问题,考虑把深层资源独立出来。

状态码要表达清楚

接口返回的 HTTP 状态码直接说明结果,前端不用猜:

  • 200:成功;201:创建成功(POST 用);
  • 400:参数错误;401:未登录;403:无权限;404:资源不存在;
  • 422:业务校验不通过(比如邮箱格式错);
  • 500:服务器内部错误。

错误时响应体里给人类可读的信息:

{
  "code": 422,
  "message": "邮箱格式不正确",
  "errors": {"email": ["格式错误"]}
}

分页、过滤、排序

列表接口一律分页,用统一的查询参数:

GET /api/users?page=2&per_page=20&status=active&sort=-created_at

响应里带上分页信息,前端才好做翻页:

{
  "data": [...],
  "pagination": {"page": 2, "per_page": 20, "total": 156}
}

版本管理

接口迟早要变。推荐把版本放进 URL:/api/v1/users/api/v2/users。旧版本保留一段时间,给客户端迁移时间,不要直接改掉旧接口让线上应用崩掉。

安全底线

接口设计得再规范,安全不过关也白搭:所有写操作要校验权限;对外接口做限流;敏感字段(密码、token)永远不进响应体;输入一律校验长度和类型。RESTful 解决的是"怎么组织",安全是另一条不能省的红线。