HTTP 请求方法详解

HTTP 方法的完整说明:GET、POST、PUT、DELETE、PATCH 的区别和使用场景

生产方式:人写签发:晓黎学习复核:2026年9月19日被 1 个词条引用

什么是 HTTP 方法?

HTTP 方法(也叫 HTTP 动词)是客户端告诉服务器**「我想做什么」**的方式。

客户端:我想 查 用户信息     → GET /users/123
客户端:我想 创建 新用户     → POST /users
客户端:我想 修改 用户信息   → PUT /users/123
客户端:我想 删除 用户       → DELETE /users/123

核心方法速查

GET — 获取数据

GET /users/123
  • 含义:请求获取指定资源的数据
  • 类比:去图书馆借书——你只是想看书,不会改变书架上的书
  • 安全:不会修改服务器上的数据
  • 幂等:多次请求结果相同
  • 参数:通常放在 URL 查询参数中(?name=张三&age=25)

适用场景:查询、搜索、获取详情

POST — 创建数据

POST /users
Body: {"name": "张三", "age": 25}
  • 含义:在服务器上创建一条新数据
  • 类比:去邮局寄信——你新增了一封信,改变了邮局的数据
  • 安全:会修改服务器上的数据
  • 幂等:多次请求会创建多条数据(不幂等)
  • 参数:放在请求体(Body)中

适用场景:注册用户、提交表单、发送消息

PUT — 完整替换数据

PUT /users/123
Body: {"name": "李四", "age": 30}
  • 含义:用新数据完整替换指定资源
  • 类比:去柜台改签——用一张新票替换原有的票
  • 安全:会修改服务器上的数据
  • 幂等:多次请求结果相同(都是替换为同样的数据)
  • 参数:放在请求体中,通常需要完整的资源数据

适用场景:更新整个用户信息、替换配置文件

PATCH — 部分更新数据

PATCH /users/123
Body: {"age": 30}
  • 含义:部分修改指定资源的某些字段
  • 类比:去柜台改签——只改日期,不改其他信息
  • 安全:会修改服务器上的数据
  • 幂等:多次请求结果相同
  • 参数:放在请求体中,只需要要修改的字段

适用场景:修改用户昵称、更新部分配置

DELETE — 删除数据

DELETE /users/123
  • 含义:删除指定资源
  • 类比:去银行销户——彻底删掉账户
  • 安全:会修改服务器上的数据(删除)
  • 幂等:多次请求结果相同(第一次删了,后面几次都是「已经删了」)
  • 参数:通常在 URL 中

适用场景:删除用户、删除文件、取消订阅

语义对比表

方法含义修改数据?幂等?参数位置AI API 中的使用
GET获取❌✅URL极少使用(AI API 用 POST)
POST创建✅❌Body✅ 主要方法
PUT完整替换✅✅Body极少使用
PATCH部分更新✅✅Body极少使用
DELETE删除✅✅URL极少使用

安全 vs. 幂等

这两个概念经常被混淆,需要理清:

安全(Safe)

安全 = 这个方法不会修改服务器上的数据。

GET /users/123     → 安全(只读)
POST /users        → 不安全(会创建数据)

幂等(Idempotent)

幂等 = 执行一次和执行多次的效果一样。

GET /users/123     → 幂等(每次返回同样的数据)
POST /users        → 不幂等(每次创建一条新数据)
PUT /users/123     → 幂等(每次都是替换为同样的数据)
DELETE /users/123  → 幂等(第一次删了,后面几次都是「已删除」)

AI API 为什么只用 POST?

你可能会问:「AI API 明明只是「提问」,为什么用 POST 而不是 GET?」

原因:

  1. 请求体可能很大:对话历史、工具定义、系统提示词都可能很长,放在 URL 里不合适
  2. GET 有长度限制:URL 长度有限制(通常 2KB-8KB),复杂的 AI 请求可能超限
  3. 语义上更像「操作」:AI 生成回复是一个「计算任务」,更像 POST 的语义
  4. 安全考虑:请求体放在 Body 中,不会出现在服务器日志里(保护敏感内容)

请求体 vs. URL 参数

┌─────────────────────────────────────────────────────┐
│ GET /search?q=你好&limit=10                          │
│                                                     │
│ ↑ URL 参数:适合简单、短小的查询                    │
│ ↑ 有长度限制,不适合复杂数据                         │
└─────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────┐
│ POST /v1/messages                                   │
│ Body: {                                             │
│   "model": "claude-sonnet-4-5",                     │
│   "messages": [...],                                │
│   "tools": [...]                                    │
│ }                                                   │
│                                                     │
│ ↑ 请求体:适合复杂、大型的数据                       │
│ ↑ 无长度限制(理论上),支持任意结构                 │
└─────────────────────────────────────────────────────┘

常见的 RESTful 设计误区

误区正确做法说明
用 GET 修改数据用 POST/PUT/PATCH/DELETEGET 应该是安全的
用 POST 做查询用 GET查询应该用 GET
URL 里放动作URL 里放资源POST /users/create ❌ → POST /users ✅
返回状态码不统一统一使用标准状态码200 成功,4xx 客户端错误,5xx 服务器错误

在 API 文档中的标识

当你看到 API 文档时,通常会这样标识:

POST /v1/messages
GET /v1/models
DELETE /v1/files/{file_id}

解析:

  • 第一个词是 HTTP 方法
  • 后面的路径是端点(Endpoint)
  • {file_id} 是路径参数(需要在 URL 中替换为实际值)

实战示例

curl 命令速查

# GET 请求
curl https://api.example.com/users/123

# POST 请求(带 JSON 数据)
curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{"name": "张三", "age": 25}'

# PUT 请求(完整替换)
curl -X PUT https://api.example.com/users/123 \
  -H "Content-Type: application/json" \
  -d '{"name": "李四", "age": 30}'

# PATCH 请求(部分更新)
curl -X PATCH https://api.example.com/users/123 \
  -H "Content-Type: application/json" \
  -d '{"age": 30}'

# DELETE 请求
curl -X DELETE https://api.example.com/users/123

常见问题

问题说明
POST 和 PUT 的区别POST 创建新资源,PUT 替换已有资源
PATCH 和 PUT 的区别PUT 需要完整资源,PATCH 只需要要修改的字段
DELETE 可以返回数据吗?可以,但通常只返回状态码(204 No Content)
可以用 POST 代替所有方法吗?技术上可以,但会失去 RESTful 的语义优势

总结

方法一句话记忆
GET取数据,不改变
POST增数据,创建新的
PUT替数据,完整替换
PATCH改数据,部分修改
DELETE删数据,彻底删除

返回 REST API 基础概念 了解 API 的请求/响应结构 返回 JSON 数据结构基础 了解请求体中的 JSON 数据如何组织

互链

链接来自概念卡正文里的双链,编译时能解到本期词条集的才成为站内链接。

反链(1)

出现在哪些课时里(0)

判据与「课时正文里能不能点出来」是同一个:那一节确实提到了它。点课时走当前页跳转, 它是导航,不是词条链接。

还没有课时讲到这一条。它是词条跑在课程前面的那一部分,不是错链。

关联图

只画这一条与它直接相连的词条,边与上面两区同源。可拖拽、可缩放,点节点是新标签。

出处

路径是本地知识库(Obsidian 库)里的位置,正文与概念卡逐字对应。

  • 概念卡原文HTTP 请求方法详解03_RESOURCES/概念/http-请求方法详解.md
  • 所属知识地图栏目概念页索引 · API 与后端基础03_RESOURCES/概念/Index.md

编译入库:2026年11月2日。词条由知识库编译而来, 修正要回到概念卡改,再重新编译。