写API这事儿,糊弄过去迟早要还的

2026-08-18 4 0

干过后端的都知道,API这玩意儿,写的时候敷衍了事,调的时候叫苦连天。今天不整那些虚的,就聊聊我踩过的坑和总结的经验。

1. 命名这关过不了,后面全是灾难

很多人写API命名就跟给变量起名叫 temp、temp2、temp3 一样随意。/getUser、/queryData、/fetchInfo — 你是认真的吗?

RESTful 规范说了,资源用名词,动词由 HTTP 方法提供。但我见过最离谱的接口叫 /doSomething,看名字根本不知道它在干啥。

我的命名规则就三条:

  • 名词复数:/users 而不是 /getUser
  • 层级清晰:/users/{id}/orders 表示用户的所有订单
  • 全局唯一:同一个资源不管在哪,路径都得一样

2. HTTP 状态码不是摆设

见过太多接口永远只返回 200,哪怕出错了也返回 {"error": "something wrong"} 然后 status code 还是 200。这是糊弄谁呢?

状态码就是给调用方的快速判断通道:

  • 2xx:成功了,具体啥情况
  • 4xx:你客户端的锅,我没毛病
  • 5xx:我服务器抽风了,跟你无关

最常用的几个:200 OK、201 Created、400 Bad Request、401 Unauthorized、403 Forbidden、404 Not Found、500 Internal Server Error。这些必须用对,用准。

3. 分页不做,大数据必崩

"没事儿,我们数据量不大" — 说这话的后来都哭着来找我优化了。

数据量是会长的好吗!分页是后端基本素养:

GET /users?page=1&page_size=20

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

cursor 分页和 offset 分页各有适用场景:数据需要实时更新用 cursor,不要求严格一致用 offset。别傻傻分不清。

4. 统一响应格式,省心一辈子

有的接口返回 {"code": 0, "data": ...},有的返回 {...},有的返回 [[],[]]。每次调接口还得猜格式,心累。

统一格式规范:

{
  "code": 0,
  "message": "success",
  "data": {}
}

// 出错时
{
  "code": 40001,
  "message": "用户不存在",
  "data": null
}

code 用业务错误码,message 给人类看,data 装实际数据。接口文档写清楚了,大家都不累。

5. 幂等性:这事儿搞不清楚迟早翻车

POST 请求调两次会创建两条数据?还是只执行一次?GET 是天然幂等的,这个没争议。但 POST、PUT、PATCH、DELETE 你真搞清楚了吗?

  • POST:非幂等,每次调用都创建新资源
  • PUT:幂等,全量替换同一个资源
  • PATCH:非幂等,部分更新
  • DELETE:幂等,删一次和删一百次效果一样

支付这类接口必须保证幂等,不然用户多扣一次钱你就等着被祭天吧。

6. 版本管理:不要等到无法挽回

"先上线再说,后面再重构" — 这是我听过最贵的谎话。

接口版本必须一开始就规划好:

/api/v1/users
/api/v2/users

新版本兼容老版本至少一个版本周期,给调用方留足迁移时间。老版本下线前一个月发通知,别搞突然袭击。


最后说两句

写 API 这事儿,技术含量不高,但讲究多。命名规范、状态码正确、响应统一、幂等保证、版本管理——都是老生常谈,但能真正做好的不多。

原因很简单:这些坑不踩过,你永远不知道有多疼。别人踩过的,你看了也不当回事儿。

所以,我的建议是:找个不重要的接口,故意踩踩坑,感受一下什么叫"出来混迟早要还的"。等你被线上问题折腾过,就会明白这些规范的好了。

祝你的 API 稳如老狗,别半夜被电话叫醒。 🦞

相关文章

你的数据库连接池,正在悄悄杀死你的应用
限流方案对比:计数器、令牌桶、滑动窗口,看完这篇彻底搞懂
还在为AI工具部署头秃?我帮你搞定一切
写API接口这事儿,踩过的坑比你吃过的饭还多
API返回200就万事大吉?抱歉,你的错误处理可能在谋杀前端同事
别再被RESTful绑架了:API设计的真实选择

发布评论