Skip to content

地址说“操作谁”,方法说“做什么” ​

一个留言 API 可以这样设计 ​

text
GET    /api/messages        读取留言列表
POST   /api/messages        创建一条新留言
GET    /api/messages/42     读取 ID 42
PATCH  /api/messages/42     修改 ID 42 的部分字段
DELETE /api/messages/42     删除 ID 42

messages 是资源名称,42 是具体记录 ID。

GET:读取 ​

ts
fetch('/api/messages')

常见响应:

json
[
  { "id": 41, "text": "早上好" },
  { "id": 42, "text": "你好" }
]

GET 通常不应该因为刷新列表而创建或删除数据。

POST:创建或执行动作 ​

ts
fetch('/api/messages', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ text: '你好' })
})

常见成功状态码是 201。

PUT 和 PATCH:更新 ​

PUT ​

通常表示用完整新内容替换资源。

PATCH ​

通常表示只修改提供的字段。

ts
fetch('/api/messages/42', {
  method: 'PATCH',
  body: JSON.stringify({ text: '修改后的留言' })
})

真实 API 可能有自己的约定,先看文档,不要只凭方法名称猜。

DELETE:删除 ​

ts
fetch('/api/messages/42', { method: 'DELETE' })

后端必须检查:当前用户是否拥有这条留言,而不是只要知道 ID 就能删除。

Request 包含什么 ​

text
URL         请求地址
Method      GET、POST 等动作
Headers     内容格式、身份凭证等说明
Query       地址问号后的筛选参数
Body        POST/PATCH 常发送的数据

例如:

text
GET /api/messages?page=2&limit=20

page 和 limit 是 Query 参数。

Response 包含什么 ​

text
Status      请求结果类别
Headers     响应格式、缓存等说明
Body        JSON 数据或错误信息

状态码具体怎么用 ​

text
200  成功读取或更新
201  成功创建
204  成功但没有响应正文
400  请求数据不符合要求
401  没有有效登录身份
403  有身份,但没有权限
404  路由或资源不存在
409  当前数据状态发生冲突
429  请求过快或额度受限
500  后端内部处理失败

错误响应最好提供可操作信息:

json
{
  "error": "MESSAGE_TOO_LONG",
  "message": "留言最多 500 个字符"
}

REST 是什么 ​

REST 是组织 HTTP API 的一种常见风格,不是需要安装的软件。

它鼓励用资源地址和标准方法表达操作,让人看到 DELETE /api/messages/42 就能大致判断意图。

项目不完全符合 REST 也不等于不能运行。重点是前后端约定清楚并保持一致。

用 Network 排查 API ​

  1. 点击失败请求。
  2. Headers 看 URL、Method、Status。
  3. Payload 看实际发送内容。
  4. Response 看后端具体说明。
  5. 500 再转向后端日志。
前端发送 GET /api/messages,但后端只定义了 POST /api/messages。地址相同就一定能匹配吗?

答案:不能。路由通常同时匹配地址和 HTTP 方法,方法不同可能得到 404 或 405。

写给想驾驭 AI,而不只是依赖 AI 的 Vibe Coder。