做开发时,谁都希望调用一个干净利落、一看就懂的 API。可现实中,碰上命名混乱、返回值 unpredictable 的接口,调试起来真是头大。其实,好的 API 设计不是靠猜,而是有一套行之有效的做法。
用一致的命名规则
比如处理用户相关的接口,统一用 /users 开头。获取列表是 GET /users,查单个是 GET /users/123,别一会儿用 user 一会儿用 account。参数也一样,时间字段统一叫 created_at 而不是今天写 createTime 明天变 timestamp。
合理使用 HTTP 方法
GET 用来取数据,POST 提交新内容,DELETE 删资源,这些别乱用。见过有人所有操作都用 POST,前端得靠参数判断意图,这种设计等于埋雷。RESTful 不是教条,但基本语义要守。
返回结构化错误信息
别动不动就 500 或者 { "error": true }。出错了至少告诉调用方错在哪,什么级别,要不要重试。比如:
{
"error": {
"code": "invalid_email",
"message": "邮箱格式不正确",
"field": "email"
}
}
这样前端能直接定位问题,用户输错邮箱时也能精准提示。
版本控制别偷懒
一开始可能觉得加个 v1 多此一举,等上线半年要改字段时就知道厉害了。老客户端还在跑,新功能又要上,没版本怎么搞?建议在 URL 或 Header 里标明版本,比如 /api/v1/users。升级时留足过渡期,别一刀切。
文档要跟代码同步
很多团队写完代码才补文档,结果越补越偏。用 Swagger 或 OpenAPI 这类工具,把注解写在代码里,生成的文档自然跟着变。哪怕只是内部用,也比贴在 Wiki 里没人更新强。
限制数据量,支持分页
别让 GET /users 一次吐出十万条。默认限制数量,比如 ?limit=20,需要更多就翻页。加上 offset 或游标方式,避免深翻性能爆炸。这就像查快递记录,谁也不会一口气拉三年的数据。
考虑客户端的实际场景
移动端网络不稳定,API 就得省流量。提供字段过滤,比如 ?fields=name,phone,只传需要的内容。有些 App 只显示用户名和头像,结果每次还得下载一堆地址、备注信息,体验能好吗?
提前想好扩展性
现在只要用户姓名,不代表以后不用昵称或头像。字段设计留点余地,新增非必填字段不影响旧逻辑。别动不动就重构整个接口,合作方会骂人的。
测试要覆盖真实情况
除了正常流程,还得测网络中断、参数缺失、边界值。比如分页传了个负数 limit,是该报错还是默认处理?别等到线上出事才定规则。本地起个 Mock Server 模拟各种异常,前端联调也方便。