Typescript API 软删除(仅标记DB属性为deleted: true)应使用何种HTTP请求方法?
软删除场景的HTTP请求方法选择
软删除的本质是修改资源的deleted状态字段,而非真正擦除数据库记录,符合REST规范的选择主要有两种,根据你的接口暴露逻辑选择即可:
优先选
PATCH方法
这是语义最匹配的方案:PATCH本身就用于资源的局部更新,刚好对应你修改单个deleted字段的操作。
常规请求示例:PATCH /api/orders/456 Content-Type: application/json { "deleted": true }这种方案的优势是完全对应操作本质,不需要隐藏实现细节,也符合REST API的常规设计习惯,和TypeScript技术栈没有冲突,类型定义也可以直接复用现有资源的部分字段类型。
可选
DELETE方法
如果你希望对外屏蔽软删除的实现细节,对外暴露的能力就是「删除该资源」,也可以用DELETE方法,内部实现改为标记deleted: true即可。
注意要保证对外语义一致:调用DELETE返回成功后,普通的资源查询接口(比如GET /api/orders/456)应该返回404 Not Found,只有专门的回收站、历史数据查询类接口才能查询到已软删的资源,避免语义混乱。
不建议的选择
- 不要用
PUT:PUT的语义是整体替换资源,仅修改单个字段用PUT语义不匹配,还会增加不必要的参数传输 - 不要用
POST:POST多用于创建子资源或执行非标准自定义操作,软删除属于标准的资源状态变更,没有必要用POST实现
内容的提问来源于stack exchange,提问作者Vinutha S H
相关产品推荐
相关产品推荐

