为什么你的API总是被人骂?因为你踩了这5个坑

2026-08-07 7 0

做后端开发这么多年,我见过太多「能跑就行」的API。它们确实能跑,但用的人每天都在心里问候开发者。以下是我见过的5个高频糟心事,看看你中了几条。

坑1:HTTP状态码乱用

你永远不知道有人会把404返回给「用户不存在」,把500返回给「密码错误」。我就问一句:密码错误是服务器挂了吗?

正确的做法其实很简单:

  • 400系列 → 客户端的锅,你请求有问题
  • 401 → 没登录 / 认证失败
  • 403 → 登录了但没权限
  • 404 → 资源不存在(真的不存在)
  • 422 → 请求格式对,但语义有问题(比如校验失败)
  • 500 → 服务端炸了

记住:状态码是你的API给开发者的第一语言,说清楚点。

坑2:错误响应Body跟个谜语人似的

你有没有见过这种错误返回:

{
  "code": "ERR_INVALID_PARAM",
  "message": "Invalid parameter"
}

好家伙,invalid哪个参数?不告诉你。正确值是什么?不告诉你。你能怎么办?去读文档吧您呐。

一个好的错误响应应该是这样的:

{
  "error": {
    "code": "VALIDATION_FAILED",
    "message": "请求参数校验失败",
    "details": [
      {
        "field": "email",
        "message": "邮箱格式不正确",
        "rejected_value": "abc"
      }
    ]
  }
}

看,这才叫有效沟通。

坑3:分页返回total等于-1

什么?你问我为什么分页接口不返回总数?「因为数据库量大,性能不好」。好,那你至少告诉我有没有下一页啊!

两种推荐方案:

  1. Cursor-based pagination:返回next_cursor,下一页用cursor去拿,简单高效
  2. Limit/Offset + has_more:返回has_more字段,告诉前端「还有」,比total靠谱多了

别让你的API用户做无谓的请求。

坑4:把API版本号藏起来

「我们没版本号概念,URL里不需要v1/v2。」好,半年后你要breaking change的时候怎么办?强制用户升级?偷偷改行为?

URL版本控制虽然不完美,但它是事实标准:

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

用户可以选择什么时候迁移,你也可以平滑过渡。双赢。

坑5:鉴权错误返回404

这个我真的要单独拿出来骂。有些API,没登录访问受保护资源,返回404。「安全」嘛,别人不知道你有哪些接口。

但这是脱了裤子放屁。攻击者稍微试试就知道你这个URL存在不存在,返回404反而让正常用户一脸懵。

正确做法:返回401或403,并明确告知需要认证。安全不是靠假装不存在来实现的。

总结一下

好的API设计本质上是一种用户体验设计。你的用户是其他开发者,他们的痛点你要感同身受。

记住三句话:

  • 状态码要精准,别让开发者猜
  • 错误响应要有用,别返回黑箱
  • 分页和版本要提前想好,别到时候拍脑袋

API是你给世界的接口,精致点。

相关文章

你的 ORM 正在偷偷吃掉你的性能——一个被低估了五年的问题
还在手动部署AI工具?看这篇文章省下你半天时间
你的’容错机制’,正在亲手杀死你的服务
别让你的API成为同事的噩梦:RESTful设计避坑完全指南
从傀儡到主人:我与OpenClaw的相爱相杀
从傀儡到主人:我与OpenClaw的相爱相杀

发布评论