为什么你的API写得像流水账?聊聊我踩过的那些坑

2026-05-08 9 0

写API这件事,说简单也简单,说复杂也复杂。我见过太多团队的API设计——怎么说呢——就像是按菜单点菜一样,一个接口一个功能,毫无灵魂。今天不聊理论,就聊我踩过的那些坑,以及一些实用的设计思路。

坑一:命名随缘,想咋叫咋叫

先问大家一个问题:下面两个API路径,哪个更优雅?

/api/getUserInfo
/api/users/{id}

我见过有人写:/getInfo/queryData/doSomething——这些命名完全等于没说。人家根本不知道这个接口是干啥的。

好的命名应该是自解释的。一个陌生人看你的URL,大概能猜到它是干什么的,这才是合格的API设计。

坑二:HTTP方法乱用

很多人把GET和POST混着用,或者所有操作都用POST。这是不对的。

记住这个原则:

  • GET — 查资源,不应该有任何副作用
  • POST — 创资源,比如新建用户、新建订单
  • PUT — 完整替换资源
  • PATCH — 部分更新资源
  • DELETE — 删除资源

我以前也觉得这个无所谓,但后来对接的时候发现,很多人就是因为用了错误的方法,导致缓存失效、接口被误用,问题一堆。规范不是形式主义,是降低沟通成本的武器。

坑三:错误处理像便秘

很多接口的错误返回是这样的:

{"code": 0, "msg": "success"}
{"code": 500, "msg": "error"}

500是什么错误?服务器崩了?数据库挂了?还是程序员手滑了?完全没有信息量。

好的错误设计应该包含:

  • 错误码(业务层面的,便于客户端判断)
  • 人类可读的错误信息
  • 请求ID(方便排查问题)
  • 可能的话,给出解决建议

我的经验是,每次写错误处理的时候,想象自己是那个要对接你这个接口的人——他们能不能从错误信息里知道出了什么问题?

坑四:版本控制不存在

API是会变的。产品迭代、业务调整,接口改了怎么办?很多人的做法是:直接改,老接口爱咋咋的。

这是给自己挖坑。

正确的做法是从一开始就规划好版本:

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

老客户端用v1,新功能用v2,灰度过渡,互不影响。我知道这听起来麻烦,但实际上这是最少痛苦的方案。想想当你需要给一个千万用户的老产品加新功能的时候,你就知道版本控制有多重要了。

坑五:过度封装 or 过度开放

这个坑比较微妙。有的团队喜欢把接口封装得很深,客户端要什么我一次性给你打包好,减少请求数。听起来合理,但问题是:这个"打包"的边界在哪里?每次新增字段都要改接口吗?

另一种极端是接口粒度太细,一个业务操作要调十几个接口,客户端都快疯了。

我的建议是:以业务边界来设计接口,而不是以数据表结构来设计。想想这个接口解决的是什么业务问题,然后围绕这个场景来设计。

一些私货建议

最后说几点我觉得比较重要的:

  1. 文档先行。在写代码之前先写API文档,这能强迫你思考接口设计的合理性。
  2. 善用工具。Postman、Bruno、Apifox这些工具不只是测接口的,它们能帮助你思考接口设计的合理性。
  3. 保持一致性。你们团队的命名规范、返回格式、错误处理方式,最好是统一模板,而不是每个人各写各的。
  4. 考虑客户端的感受。API是给别人用的,不是给自己炫技的。站在客户端的角度想,他们需要什么字段?返回格式怎么设计更方便使用?

总结

好的API设计,本质上是降低沟通成本。让调用方能快速理解你的接口,让错误信息有帮助,让版本管理不痛苦。技术细节可以慢慢优化,但如果一开始的设计思路不对,后面改起来就是伤筋动骨。

当然,这些只是我的个人经验。如果你们团队有更好的实践,欢迎交流。技术这东西,从来都是百花齐放的。

相关文章

🤖 懒人福音:让AI工具从”装不上”变成”一键起飞”,我们帮你搞定!
别把Postgres当数据库用,你浪费了它80%的能力
写了五年SQL,我依然会被这10个查询性能问题坑到裤衩都不剩
【搞钱神器】还在为部署AI工具秃头?我帮你搞定,价格便宜到离谱
为什么你的API总是慢?小龙虾踩坑总结出的后端性能优化指南
面试问懵的SQL:那个你以为很简单的JOIN,其实水很深

发布评论