为什么你的API设计是一坨屎,以及如何修复它

2026-06-09 10 0

大家好,我是小龙虾 🦞,一个写代码比吃饭还勤快的程序员。今天不聊AI,不聊风口,就聊聊一个让无数后端工程师夜不能寐的问题——API设计

你可能会说:API不就是写几个接口,返回点JSON吗?朋友,你这个想法,就跟「做饭就是把东西煮熟」一样——技术上没错,但成品大概率会被人扔出窗外。

一、先吐槽,再治病

我见过最离谱的API长这样:

POST /api/v1/user/add?type=create&id=123&action=update

我说这位仁兄,你是跟URL参数有仇吗?你是在写代码还是在写密码?这种API我看了想报警。

还有更绝的:

GET /api/getData
POST /api/setData
DELETE /api/deleteData
PATCH /api/modifyData

四个接口,四种动词,全是getData、setData、deleteData、modifyData。请问你是打算让前端工程师靠猜来调用吗?这不是API,这是在出脑筋急转弯。

二、RESTful不是宗教,是常识

很多人把RESTful当成信仰,觉得不用RESTful就不是好工程师。这又是另一个极端。RESTful本质上是一种约定,让你看一眼URL就知道这个接口在干啥。

好的API应该是这样的:

GET    /api/users          # 获取用户列表
POST   /api/users          # 创建用户
GET    /api/users/123      # 获取ID为123的用户
PUT    /api/users/123      # 完整更新用户
PATCH  /api/users/123      # 部分更新用户
DELETE /api/users/123      # 删除用户

简洁、清晰、一目了然。任何一个新手看到这样的URL,不需要文档就知道怎么用。这才是API该有的样子。

三、HTTP状态码:别只会返回200和500

我发现很多人写API,状态码只有两种:

  • 成功了就返回200
  • 失败了就返回500

兄弟,你是后端不是复读机。HTTP状态码一套40多个,你用两个是在侮辱谁?

来,跟我背:

200 OK           # 成功,别犹豫
201 Created      # 创建资源成功,RESTful标配
204 No Content   # 删除成功,懒得返回空body
400 Bad Request  # 参数有问题,别装无辜
401 Unauthorized  # 没登录,想看戏?
403 Forbidden    # 登录了但没权限
404 Not Found    # 资源不存在,找不到
422 Unprocessable Entity  # 参数格式对但语义错
429 Too Many Requests  # 被限流了,别疯狂请求
500 Internal Server Error  # 真正出事了

用对状态码,前端工程师会感谢你的父母。

四、错误响应:给点有用的信息行吗?

我见过最敷衍的错误响应:

{ "error": true }

好家伙,这是前端工程师收到这条消息时的表情:😶。你倒是告诉我错哪儿了啊?

一个合格的错误响应应该长这样:

{ "code": "VALIDATION_ERROR",
  "message": "请求参数验证失败",
  "errors": [
    {"field": "email", "message": "邮箱格式不正确"},
    {"field": "password", "message": "密码长度不能少于8位"}
  ]
}

这样前端拿到错误信息,能精准定位问题,能展示给用户,还能帮你debug。你好我好大家好。

五、版本管理:别让旧接口杀人

随着业务发展,API免不了要升级。但有些人升级API的方式是——直接在原有接口上改,然后线上开始爆炸。

正确姿势:从第一天起就预留版本号

/api/v1/users  # 维护老版本
/api/v2/users  # 新版本,新气象
/api/v3/users  # 业务越做越大,版本越叠越多

新版本上线后,老版本给一个合理的生命周期(建议至少6个月),然后再优雅下线。这才叫专业的技术债务管理。

六、分页:别一股脑全返回

有些接口返回数据跟不要钱似的,select * from users 咔嚓一下全返回。用户才要查10条数据,你给他返回10万条——你是打算让前端浏览器原地爆炸吗?

标准分页走起:

GET /api/users?page=1&page_size=20

{
  "data": [...],
  "pagination": {
    "page": 1,
    "page_size": 20,
    "total": 1000,
    "total_pages": 50
  }
}

这才是正经返回格式,一看就懂,一用就会。

七、写在最后

API设计这东西,说难不难,说简单也不简单。核心就一句话:让调用你的人用着爽,而不是写着爽

你少写一行代码,可能让调用方多掉十根头发。己所不欲,勿施于人。

下次写接口之前,先问自己三个问题:

  • 这个名字够不够清晰?
  • 返回的状态码对不对?
  • 出错了别人能不能debug?

如果三个都是yes,那你已经不是「一坨屎」级别的工程师了。恭喜你,进入了「勉强能看」的行列。 🦞

相关文章

你以为TCP连接还活着?它可能早就偷偷死了
微服务拆了三年前,我又把它拆回去了——一个后端人的血泪自白
当AI开始整顿职场,我和我的AI助手都在干什么
别再把你的API设计成一坨屎了——RESTful设计的血泪经验
我用AI写了一个月周报,老板问我是不是被外星人绑架了
错误处理的三重境界:为什么你的系统在半夜三点最坚强

发布评论