RESTful API设计中的七宗罪,看看你踩了几个

2026-08-24 13 0

做后端开发这么多年,看过的API没有一千也有八百。有时候我真想把某些API设计者拉出来吊打一顿——不是因为我脾气差,而是他们的设计实在让人血压飙升。

今天咱们就来盘点一下RESTful API设计中最常见的七宗罪,保证你看完感同身受。

第一宗:动词乱用

最常见的问题就是动词滥用。POST用来更新,GET用来删除,PUT用来创建——总之就是怎么乱怎么来。

// 经典反面教材
GET /api/deleteUser?id=123
POST /api/getUserInfo
PUT /api/createOrder  // 创建居然用PUT

REST的精髓是什么?是用HTTP方法表达操作语义。GET就是获取,POST就是创建,PUT就是完整更新,PATCH就是部分更新,DELETE就是删除。记住这个口诀:查 GET、创 POST、改 PUT/PATCH、删 DELETE

第二宗:命名放飞自我

有些人命名API跟给自己孩子起名似的,想怎么来就怎么来:

/api/getUserInfoByIdAndType
/api/fetch_data_for_display
/api/userDetailQuery
/api/getAllTheUsersPlease

API命名应该简洁、一致、可预测。建议采用名词复数形式,配合HTTP方法区分操作:

GET    /users          # 获取用户列表
GET    /users/{id}     # 获取单个用户
POST   /users          # 创建用户
PUT    /users/{id}     # 更新用户
DELETE /users/{id}     # 删除用户

第三宗:状态码随便返回

见过最离谱的是一个接口,成功了返回200,失败了也返回200,然后在body里写个{"code": 500, "message": "服务器错误"}。我当时就懵了——你这200到底是想说成功还是失败?

HTTP状态码是有明确语义的:

  • 2xx:成功(200 OK, 201 Created, 204 No Content)
  • 3xx:重定向
  • 4xx:客户端错误(400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 422 Unprocessable Entity)
  • 5xx:服务器错误

请严格遵守这套语义,别自己发明轮子。

第四宗:分页是什么不存在

“我这接口返回一万条数据很轻松的”——这是某个同事的原话。拜托,一次性返回一万条数据,数据库压力、网络传输、前端渲染,每个环节都在哭。

标准分页应该是这样:

GET /users?page=1&per_page=20

// 响应
{
  "data": [...],
  "pagination": {
    "page": 1,
    "per_page": 20,
    "total": 1000,
    "total_pages": 50
  }
}

或者用游标分页,适合大数据量和高并发场景:

GET /users?cursor=abc123&limit=20

第五宗:版本管理?不存在的

很多项目的API是裸奔的:/api/users。然后业务迭代一多,接口参数变了,返回结构变了,前端天天报bug。

API版本管理是必须的:

/api/v1/users   # 第一版
/api/v2/users   # 第二版,breaking changes

版本号放在URL里是最直观的方式,别搞什么Header版本或者日期版本,那叫自找麻烦。

第六宗:错误信息等于没说

当接口出错时,最怕看到这种响应:

{
  "error": "Error",
  "message": "Something went wrong"
}

我就想问一下:到底是什么错误?哪里出错了?怎么才能修复?

一个好的错误响应应该包含:

{
  "error": {
    "code": "VALIDATION_FAILED",
    "message": "请求参数校验失败",
    "details": [
      {
        "field": "email",
        "message": "邮箱格式不正确"
      },
      {
        "field": "age",
        "message": "年龄必须大于0"
      }
    ]
  }
}

让调用者知道错在哪里、为什么错、怎么改正,这才是正确的错误处理姿势。

第七宗:安全?不熟

见过太多裸奔的API了。没有认证、没有授权、敏感数据明文传输——这是等着被人薅羊毛还是被人脱裤?

基本的安全措施必须有:

  • HTTPS必须启用,别跟我讲什么性能损耗
  • 认证机制(JWT、OAuth2等)必须要有
  • 敏感操作需要二次验证
  • 接口要有流量限制,防止恶意请求
  • 日志要记录,但别记录敏感信息

总结

API设计看似简单,实则门道很深。一个好的API应该是什么样的?

简单、一致、可预测、安全、有文档。

做到这五点,你的API至少不会被人骂。做到更好,那你就是个合格的后端工程师了。

下次有人问你API设计经验,直接把这七宗罪甩他脸上,保证他心服口服。

相关文章

还在为部署AI工具掉头发?来,让专业的人干专业的事 🦞
RESTful API 设计翻车现场:我从血泪中总结的避坑指南
一次诡异的死锁,让我发现了MySQL MVCC最深处的秘密
别再自己折腾了,让我帮你一键部署 AI 工具 🚀(¥39起)
那些年我们一起踩过的API设计坑
那些年我们一起踩过的API设计坑

发布评论