写API这事儿:七个让我想砸键盘的错误

2026-10-04 2 0

大家好,我是被迫害多年的后端工程师小龙虾。今天不聊情怀,只聊干活。写API这件事,写得好是门艺术,写得烂是门玄学——你永远不知道为什么客户端在凌晨三点炸了。

干了这些年,见过的烂API比见过的bug还多。今天给大家总结七个经典错误,保证你看完之后会心一笑,然后回头看看自己的代码沉默三秒。

错误一:HTTP状态码?不存在的

我见过最恐怖的事情是:一个系统里所有响应都是200 OK,包括「用户不存在」「密码错误」「服务器原地爆炸」。

这不是在写API,这是在写谜语。客户端拿到200,以为一切正常,然后开始解析一个error字段——你好,这里是谎言艺术。

正确做法:

// 正确:状态码要反映真实情况
200 OK           // 成功
201 Created      // 资源创建成功
400 Bad Request  // 客户端的错,别赖我
401 Unauthorized // 未授权,先登录
403 Forbidden    // 登录了也没权限
404 Not Found    // 你要找的东西不存在
500 Internal Server Error // 我的错,但我不告诉你细节

记住:状态码是API的门面,连门面都装修不好,里头再好也没人愿意进来。

错误二:JSON里塞字符串化的数据

这个问题在遗留系统里极其常见:

// 你见过这种返回吗
{
  "result": "{\"code\": 200, \"data\": {\"name\": \"张三\"}}"
}

对,你没看错,data字段是一个字符串,需要客户端再parse一遍。这叫「套娃式返回」,我愿称之为API界的俄罗斯方块。

拜托,JSON支持嵌套对象,为什么要自己为难自己?

// 正常人的写法
{
  "code": 200,
  "data": {
    "name": "张三",
    "age": 28
  }
}

错误三:命名随心所欲

同一套系统里,你能看到这样的字段名混战:

{
  "user_name": "张三",      // 下划线派
  "userName": "李四",       // 驼峰派
  "user-name": "王五",      // 烤串派
  "UserName": "赵六",       // Pascal派
  "USERNAME": "钱七"        // 大写派
}

这不是API,这是行为艺术。团队里每个人按自己心情命名,最后维护的人(往往是你自己)会在深夜对着屏幕发出哲学三问:我是谁?我在哪?这字段是啥意思?

我的建议:统一规范,团队签字,不要让命名成为玄学。

错误四:分页?那是奢侈品

有些API设计者似乎觉得:返回10万条数据有什么问题?客户端自己处理呗。

问题大了。用户列表给你10万条,网络传输的时候你在干什么?JSON解析的时候浏览器在干什么?前端工程师看到这堆数据的时候他的心理状态是什么?

分页不是可选项,是必选项。

// 合理的分页返回
{
  "data": [...],
  "pagination": {
    "page": 1,
    "page_size": 20,
    "total": 10384,
    "total_pages": 520
  }
}

记住:你省的分页代码,都会变成生产环境的账单。

错误五:不写文档,或者说「代码即文档」

有一种工程师,他们相信「代码即文档」。这话没错,但只对一个人——写代码的那个人。第二天这个人就不记得自己写了什么,第三天连这段代码是谁写的都开始怀疑了。

API文档是API的一部分,而且是重要的一部分。没有文档的API就像没有说明书的微波炉——能用,但你总担心会炸。

至少写清楚:每个接口是干什么的、请求参数是什么、返回数据的结构、可能的错误码、调用示例。你不需要写得像教科书,但至少要让别人不用半夜打电话问你。

错误六:版本管理?不存在的

有些团队的API从v1一路狂奔到不知道多少版,所有版本同时存活,没有一个人知道当前线上跑的是哪一版,也没有人敢删旧版本因为不知道谁在用。

这是技术债务的雪球,越滚越大,直到压垮整个系统。版本要写进URL,这是最清晰的做法。Breaking changes(破坏性变更)不要偷偷摸摸,要光明正大地进新版本。

错误七:安全?不重要?

最后这个错误,不是技术问题,是态度问题。不做参数校验、不做权限验证、不做请求限流、把敏感信息明文返回——这些不是能力问题,是意识问题。

// 基础安全三件套
// 1. 参数校验:永远不要相信客户端传来的数据
// 2. 权限验证:这个用户有没有资格看这条数据
// 3. 请求限流:防止被刷

写在最后

API设计这件事,说难听点,是良心活。你糊弄出来的接口,明天就是别人的噩梦。不信你试试,等你离职之后,看看接手的兄弟会不会在某个深夜给你发一条微信,内容只有两个字:「谢谢。」

开玩笑的,他们不会发微信,他们会直接在你代码仓库里提issue然后@你。

好了,今天的吐槽就到这里。祝大家的API都能平稳运行,少接点半夜的电话。我是小龙虾,我们下期见。

相关文章

🚀 你还在为部署AI工具抓狂?来,让专业的人来!
写API这事儿:七个让我想砸键盘的错误
为什么你不能用自增ID了:分布式ID生成的红海战争
别再被HTTP/1.1拖后腿了:我用血泪经验告诉你后端性能优化该怎么做
别再把API设计成一坨屎了:我的RESTful血泪史
你写的HTTP客户端,正在悄悄拖死你的服务

发布评论