HTTP/1.1 9 种请求方法实战:从 CRUD 到 RESTful API 设计的 3 个关键映射

发布时间:2026/9/2 22:22:46

HTTP/1.1 9 种请求方法实战:从 CRUD 到 RESTful API 设计的 3 个关键映射
HTTP/1.1 请求方法实战从 CRUD 到 RESTful API 设计的 3 个关键映射在构建现代 Web 应用时HTTP 协议作为应用层通信的基础其请求方法的设计直接影响着 API 的清晰度和可维护性。本文将深入探讨如何将 HTTP/1.1 的 9 种请求方法与数据库 CRUD 操作和 RESTful 设计原则进行实战映射帮助开发者构建更规范的 API 接口。1. HTTP 方法与 CRUD 操作的核心映射HTTP 协议定义了一组标准方法每种方法都有其特定的语义和用途。理解这些方法与数据库基本操作CRUD的对应关系是设计 RESTful API 的第一步。1.1 基础方法对照表HTTP 方法CRUD 操作语义描述幂等性GETRead获取资源是POSTCreate创建新资源否PUTUpdate完整替换现有资源是PATCHUpdate部分修改现有资源否DELETEDelete删除指定资源是幂等性说明一个方法如果多次执行产生的结果与单次执行相同则称为幂等方法。这在网络请求重试等场景中尤为重要。1.2 特殊用途方法解析除了基础的 CRUD 对应方法外HTTP 还定义了几种特殊用途的方法HEAD与 GET 类似但只返回响应头不返回实体主体。常用于检查资源是否存在验证缓存有效性通过 Last-Modified 或 ETagHEAD /users/123 HTTP/1.1 Host: api.example.comOPTIONS获取目标资源支持的通信选项。在 CORS 预检请求中扮演重要角色OPTIONS /users HTTP/1.1 Host: api.example.com Access-Control-Request-Method: POST Access-Control-Request-Headers: Content-Type响应示例HTTP/1.1 200 OK Allow: GET, POST, OPTIONS Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, POST, OPTIONS Access-Control-Allow-Headers: Content-TypeTRACE用于诊断回显服务器收到的请求。注意生产环境应禁用此方法以防止安全风险。CONNECT用于建立隧道连接主要在 HTTPS 代理场景使用。2. RESTful API 设计的三层映射RESTful 架构风格强调资源的表现层状态转移。要实现良好的 RESTful 设计需要建立从 URI 到 HTTP 方法再到业务操作的三层映射关系。2.1 资源URI设计规范RESTful API 的核心是资源导向URI 设计应遵循以下原则使用名词而非动词表示资源正确/users错误/getUsers层级关系表达/集合/元素/子集合/子元素 示例/users/123/orders/456版本控制建议URI 路径中/v1/users自定义头中Accept: application/vnd.example.v1json2.2 方法到操作的完整映射示例以用户管理系统为例展示完整的 API 设计用户资源操作HTTP 方法URI状态码获取用户列表GET/users200 OK创建新用户POST/users201 Created获取单个用户GET/users/{id}200 OK 或 404 Not Found全量更新用户PUT/users/{id}200 OK 或 204 No Content部分更新用户PATCH/users/{id}200 OK删除用户DELETE/users/{id}204 No Content订单子资源操作HTTP 方法URI状态码获取用户所有订单GET/users/{id}/orders200 OK创建用户新订单POST/users/{id}/orders201 Created获取特定订单详情GET/users/{id}/orders/{orderId}200 OK2.3 状态码使用指南正确的状态码返回是 RESTful API 的重要组成部分2xx 成功200 OK通用成功状态201 Created资源创建成功204 No Content成功但无内容返回4xx 客户端错误400 Bad Request请求参数错误401 Unauthorized需要认证403 Forbidden无权限访问404 Not Found资源不存在405 Method Not Allowed方法不允许5xx 服务端错误500 Internal Server Error通用服务端错误503 Service Unavailable服务不可用3. 创建与更新操作的高级决策在实际 API 设计中POST、PUT 和 PATCH 的选择常常引发讨论。本节将提供清晰的决策框架。3.1 POST vs PUT 创建决策POST 创建资源的特点客户端不知道最终资源标识符服务端决定资源存储位置典型响应HTTP/1.1 201 Created Location: /users/123PUT 创建资源的特点客户端指定资源标识符必须是幂等操作典型响应HTTP/1.1 201 Created (首次创建) 或 HTTP/1.1 200 OK (后续更新)决策树是否由客户端指定资源ID? ├── 是 → 使用PUT └── 否 → 使用POST3.2 PUT vs PATCH 更新决策PUT 全量更新示例PUT /users/123 HTTP/1.1 Content-Type: application/json { name: 新用户名, email: newexample.com, age: 30 }注意未包含的字段可能被置为nullPATCH 部分更新示例JSON Merge PatchPATCH /users/123 HTTP/1.1 Content-Type: application/merge-patchjson { email: updatedexample.com }PATCH 部分更新示例JSON PatchPATCH /users/123 HTTP/1.1 Content-Type: application/json-patchjson [ { op: replace, path: /email, value: updatedexample.com } ]决策树是否需要保留未指定字段的现有值? ├── 是 → 使用PATCH └── 否 → 使用PUT3.3 批量操作的特殊处理对于批量操作可以采用以下模式批量创建POST /users/bulk HTTP/1.1 Content-Type: application/json [ { name: 用户1, email: user1example.com }, { name: 用户2, email: user2example.com } ]批量更新PATCH /users/bulk HTTP/1.1 Content-Type: application/json-patchjson { operations: [ { op: replace, path: /1/email, value: newexample.com }, { op: remove, path: /2/age } ] }4. 实战中的边界情况处理即使遵循了所有规范实际开发中仍会遇到需要特殊处理的场景。4.1 非CRUD操作的处理对于如激活用户、重置密码等非CRUD操作推荐以下处理方式作为子资源动作POST /users/123/activate使用自定义动词谨慎使用POST /users/123?actionactivate作为字段更新PATCH /users/123 Content-Type: application/json { status: active }4.2 并发控制策略处理资源并发修改的常用方法Last-Modified If-Unmodified-SinceGET /users/123 HTTP/1.1 200 OK Last-Modified: Wed, 21 Oct 2025 07:28:00 GMT PUT /users/123 If-Unmodified-Since: Wed, 21 Oct 2025 07:28:00 GMTETag If-MatchGET /users/123 HTTP/1.1 200 OK ETag: 33a64df551425fcc55e4d42a148795d9f25f89d4 PUT /users/123 If-Match: 33a64df551425fcc55e4d42a148795d9f25f89d44.3 异步操作处理对于耗时操作可采用异步模式立即返回202 AcceptedHTTP/1.1 202 Accepted Location: /queue/12345 Retry-After: 120客户端轮询状态GET /queue/12345 HTTP/1.1 200 OK { status: processing, progress: 60, estimated_completion: 2025-10-21T08:00:00Z }或使用WebHook回调机制。

相关新闻

三步搞定智慧教育平台电子课本下载:开源工具让教育资源触手可及

三步搞定智慧教育平台电子课本下载:开源工具让教育资源触手可及

2026/8/23 0:38:35

三步搞定智慧教育平台电子课本下载:开源工具让教育资源触手可及 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 …

【计算机大数据毕业设计案例】基于 Python 的抖音女装受众评价数据分析系统的设计与实现 基于 Python 的时尚女装抖音评论趋势监测系统(程序+文档+讲解+定制)

【计算机大数据毕业设计案例】基于 Python 的抖音女装受众评价数据分析系统的设计与实现 基于 Python 的时尚女装抖音评论趋势监测系统(程序+文档+讲解+定制)

2026/8/23 0:38:36

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

FP4 Attention内核解析:低精度计算如何优化视频生成性能

FP4 Attention内核解析:低精度计算如何优化视频生成性能

2026/8/23 0:38:36

如果你正在处理大规模视频生成或理解任务,可能会遇到一个瓶颈:attention 计算在长序列上的性能开销。传统的优化方案如 FlashAttention 已经大幅提升了效率,但 FastVideo 最新发布的 B300 FP4 attention 内核,声称在特定硬件上实现…

SGLang 前缀缓存(RadixAttention)如何避免重复 Prefill:完整讲解

SGLang 前缀缓存(RadixAttention)如何避免重复 Prefill:完整讲解

2026/9/2 22:16:13

SGLang 前缀缓存(RadixAttention)如何避免重复 Prefill:完整讲解 【免费下载链接】sglang SGLang is a high-performance serving framework for large language models and multimodal models. 项目地址: https://gitcode.com/GitHub_Tren…

H5调起摄像头识别条形码实战:getUserMedia+jsQR完整指南

H5调起摄像头识别条形码实战:getUserMedia+jsQR完整指南

2026/9/2 22:16:13

简介:手机摄像头实时识别条形码的H5实践资源,面向Web前端与移动端开发者,演示不依赖原生App、在浏览器环境中完成扫码的实现思路,适用于电商、物流、库存管理等场景,对希望低成本接入扫码能力的前端用户尤其友好。压缩…

企业做GEO,究竟在解决什么问题?

企业做GEO,究竟在解决什么问题?

2026/9/2 22:16:13

2026年已至。当你向AI助手抛出一个问题——“东南亚跨境电商现在选什么品好卖?”或者“智能制造出海,合规上最容易踩的坑是什么?”——它给出的回答里,有没有出现你的品牌?这个念头,正让越来越多的出海企业…

CLIP 快速上手:免费跑通 AI 图文匹配与零样本分类

CLIP 快速上手:免费跑通 AI 图文匹配与零样本分类

2026/9/2 22:16:13

CLIP 快速上手:免费跑通 AI 图文匹配与零样本分类 【免费下载链接】CLIP CLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image 项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP 没有标注数据&am…

Docker迁移Podman:从守护进程到无守护进程的容器运行时选型指南

Docker迁移Podman:从守护进程到无守护进程的容器运行时选型指南

2026/9/2 22:16:13

如果你最近在团队里听到“要不把 Docker 换成 Podman 吧”,大概率不是开发人员闹脾气,而是财务、安全或运维那边先发话了。这不难理解。Docker 在容器技术普及上的贡献毋庸置疑,它把复杂的容器概念变成了docker run一条命令,把镜像…

CAN物理层测试实战:CANoe与示波器联合诊断信号质量

CAN物理层测试实战:CANoe与示波器联合诊断信号质量

2026/9/2 22:06:13

很多工程师在排查CAN总线通信故障时,都有过类似的经历:报文ID、波特率、DBC矩阵、收发器寄存器都检查了一遍,软件仿真也正常,但一到实车或台架上就偶发错误帧,甚至整车网络瘫痪。最后把示波器探到CAN_H和CAN_L上一看&a…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/9/2 10:08:07

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/9/2 12:11:52

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/9/1 23:49:08

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

2026/9/2 0:04:59

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

2026/9/2 0:04:59

这次我们来看一个很实用的 DeepSeek 落地场景:用 DeepSeek 把英文视频字幕自动翻译成中文。具体案例是《恶魔君》1989 年第 28 集的英转中字幕任务,标题写得很直白,但背后其实是一整套可以复用的技术流程:字幕解析、模型调用、批量…

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

2026/9/2 0:04:59

当你家里摆着一台天猫精灵,却总希望语音助手偶尔“不正经”一点,不用官方腔回答问题,而是张口就接几句搞笑段子,会是什么体验?我最近动手验证了一下这个想法——没有去改装任何市面上现有的智能音箱,而是直…

远程协作的工作台整理

远程协作的工作台整理

2026/9/2 6:21:32

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/2 6:21:32

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/2 2:45:06

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…