RESTful API 设计简单介绍

举报
茉莉风铃 发表于 2026/09/11 10:49:08 2026/09/11
【摘要】 前后端分离之后,接口就是前后端唯一的契约。本文讲清楚 RESTful 的核心思想、URL 和动词怎么搭配、状态码怎么用、版本怎么带。

前后端一旦分离,两边就只剩"接口"这一个契约。但接口怎么写才算规范?很多人写的接口长这样:/getUserList、/deleteUserById、/api/queryUserInfo……能用,但不规范,多了之后很容易乱。本文把它拉回正轨。

一、RESTful 到底在"规矩"什么

REST 是一种**用 URL 表示"资源"、用 HTTP 动词表示"动作"**的设计风格。核心就两条:

  • URL 只描述"资源是什么",不描述"要干什么"。
  • "要干什么"交给 HTTP 动词(GET/POST/PUT/DELETE…)来表达。

所以一个用户资源,所有操作都围绕 /users 这个名词转,靠动词区分:

image.png

对照看就明白野路子错在哪:

野路子写法 规范写法 问题
GET /getUserList GET /users “get” 是动词,却塞进路径;用 GET 就别在路径里写动作
POST /deleteUser DELETE /users/{id} 用 POST 做删除,语义错乱,网关/缓存没法优化
POST /updateUserInfo PUT /users/{id} 更新就该用 PUT/PATCH
GET /api/getUser?id=1 GET /users/1 id 是资源定位的一部分,放路径比放 query 更"资源化"

记住一句话:URL 是名词,动词留给 HTTP 方法。别把俩都塞进 URL。

二、URL 设计的几个习惯

  1. 用复数,不用单数:/users 而不是 /user。列表和详情统一在复数下,少一种例外。
  2. 层级用嵌套表达关系:/users/1/orders 表示"用户 1 的订单",资源从属关系一目了然。
  3. 过滤/分页/排序放 query:GET /users?page=1&size=20&sort=-createdAt。这些是"怎么查",不是资源本身。
  4. 版本放路径最前面:/v1/users。以后大改不破坏老客户端。
  5. 小写 + 中划线:/order-items 而不是 /orderItems 或 /OrderItems,统一最省心。

三、状态码

有的人图省事的,所有接口都返回 200,成功失败靠 body 里的 code 字段判断。能用,但丢了 HTTP 本身的语义。建议对齐:

状态码 含义 典型场景
200 成功 GET/PUT 正常返回
201 已创建 POST 新建成功
204 无内容 DELETE 成功(不返回 body)
400 请求参数错 前端传参不合法
401 未认证 token 缺失或过期
403 无权限 已登录但没资格
404 资源不存在 id 对应的记录没有
500 服务器内部错 后端代码炸了

约定:4xx 是"你(客户端)的问题",5xx 是"我(服务端)的问题"。前端拿到 4xx 该提示用户检查输入,拿到 5xx 该上报运维或者后端。

四、响应体要有统一格式

别有的接口返回数组、有的返回 {data: [...]}、有的返回 {result: ...}。统一一种,比如:

{
  "code": 0,
  "message": "ok",
  "data": {
    "id": 1,
    "name": "张三",
    "roles": ["admin"]
  }
}

分页再套一层:

{
  "code": 0,
  "message": "ok",
  "data": {
    "list": [ { "id": 1, "name": "张三" } ],
    "total": 135,
    "page": 1,
    "size": 20
  }
}

前端拿到后只认 data 字段,管你后面换什么数据库、什么语言,照常解析。

五、字段命名和安全的小细节

  • 命名统一:要么全 camelCase(userName),要么全 snake_case(user_name),前后端对齐,别混。
  • 别过度暴露:返回用户对象时,密码、盐值、内部标记这些字段坚决不往下发。
  • 时间用标准格式:2026-08-25T10:13:16+08:00(ISO 8601),前端好解析,别发 "8月25号"这种的。
  • 写文档:用 OpenAPI/Swagger 把上面的约定固化成文档,前后端对着文档开发。

六、小结

RESTful 不是固定规矩,但它的"名词 URL + 动词方法 + 标准状态码 + 统一响应"这一套,能极大降低前后端的沟通成本。不规范方便的接口短期省事,长期全是技术债——新同事接收后看不懂、网关没法优化、客户端判断逻辑越写越乱。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。