DELETE 是什么
DELETE 请求删除目标资源,是幂等方法:重复删除同一资源不会产生额外副作用,第二次可以返回无内容,也可以返回未找到,两者都符合规范。它不安全,因为它改变了资源状态。RFC 9110 §9.3.5 对它的定义很克制:只说明删除意图,是否为物理删除、要不要保留可恢复副本,完全由服务端策略决定,因此生产环境里常见的实现是软删除加延迟清理。
基本信息
| 名称 | DELETE(RFC 9110 §9.3.5) |
|---|---|
| 作用 | 删除目标资源 |
| 特性 | 幂等但不安全;重复删除不应产生额外副作用 |
| 成功码 | 无内容、成功或已受理,取决于实现 |
| 请求体 | 一般不带,个别实现用它传删除条件,属于非标准用法 |
典型使用场景
- 删除单条记录:按资源标识移除,通常配合软删除
- 批量清理:按条件删除过期数据,建议走异步任务而不是同步接口
- 注销与解绑:逻辑删除用户资源并保留审计记录
- 回收站操作:允许恢复的删除,实际上只是改变状态位
- 资源下线:接口层拒绝访问同时保留数据以备追溯
删除并确认结果
删除并确认结果
curl -i -X DELETE https://api.example.com/users/101 # 看状态码与是否带响应体
curl -si -X DELETE https://api.example.com/users/101 # 再次执行,验证幂等:应返回未找到或无内容
curl -s -o /dev/null -w '%{http_code}\n' -X DELETE https://api.example.com/users/101 # 脚本里只取状态码删除的响应码怎么选
| 场景 | 推荐码 | 说明 |
|---|---|---|
| 立即删除且无内容可返回 | 无内容码 | 最常用,不带响应体 |
| 删除但需要回传结果 | 成功码 | 适合需要确认删除对象的场景 |
| 转为异步清理 | 已受理码 | 给出进度查询地址 |
| 目标本来就不存在 | 未找到或无内容 | 幂等实现两种都可接受 |
安全与审计要点
- 删除权限要比读权限更严格,并单独记录操作日志
- 优先采用软删除加延迟清理,给误操作留出恢复窗口
- 删除令牌与管理密钥走认证头,不要放进地址参数
- 批量删除要有速率限制与二次确认,避免一次误操作清空数据
如果删除接口是读取方法可达的链接,会被爬虫预取或浏览器预加载触发,造成静默丢数据。删除必须使用带副作用的请求方法,并配合权限校验与来源校验。
物理删除与逻辑删除的取舍在于数据价值:涉及资金、审计或合规的数据通常只做状态变更并保留一段时间,真正的物理清理交给定期任务执行,这样既能满足合规要求,也能在误删时快速恢复。