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?」
原因:
- 请求体可能很大:对话历史、工具定义、系统提示词都可能很长,放在 URL 里不合适
- GET 有长度限制:URL 长度有限制(通常 2KB-8KB),复杂的 AI 请求可能超限
- 语义上更像「操作」:AI 生成回复是一个「计算任务」,更像 POST 的语义
- 安全考虑:请求体放在 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/DELETE | GET 应该是安全的 |
| 用 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 数据如何组织
互链
链接来自概念卡正文里的双链,编译时能解到本期词条集的才成为站内链接。
- JSON 数据结构基础正文引用
- REST API 基础概念正文引用
反链(1)
- MDN Web Docs相关概念
出现在哪些课时里(0)
判据与「课时正文里能不能点出来」是同一个:那一节确实提到了它。点课时走当前页跳转, 它是导航,不是词条链接。
还没有课时讲到这一条。它是词条跑在课程前面的那一部分,不是错链。
关联图
只画这一条与它直接相连的词条,边与上面两区同源。可拖拽、可缩放,点节点是新标签。
以列表方式看这 4 个节点
出处
路径是本地知识库(Obsidian 库)里的位置,正文与概念卡逐字对应。
- 概念卡原文HTTP 请求方法详解
03_RESOURCES/概念/http-请求方法详解.md - 所属知识地图栏目概念页索引 · API 与后端基础
03_RESOURCES/概念/Index.md
编译入库:2026年11月2日。词条由知识库编译而来, 修正要回到概念卡改,再重新编译。