恢复软删除的操作应归为PUT(更新)还是POST(存储)请求?
问题解答
你的理解是对的,这个操作更适合用PUT方法的接口,原因如下:
先明确RESTful方法的核心区别:
- POST的语义是创建新资源,属于非幂等操作——重复提交要么创建多条重复资源,要么因为唯一性约束报错,结果不一致。
- PUT的语义是对指定资源进行更新或创建,属于幂等操作——无论提交多少次,最终只会得到一个符合预期状态的指定资源,结果一致。
看你的代码逻辑:
User::withTrashed()->updateOrCreate(['user_id' => 1], ['value' => 1, 'update_at' => now()])->restore();这段代码的行为是:
- 如果
user_id=1的记录不存在,就创建它; - 如果记录存在(哪怕是软删除状态),就更新
value和update_at,然后恢复为正常状态。
重复提交的话,最终只会存在一条user_id=1的活跃记录,value始终为1,完全符合PUT的幂等特性。
- 如果
而原本的POST接口(用create),如果重复提交,要么因为user_id唯一性约束报错,要么创建多条记录,不符合幂等性,和你现在的代码逻辑完全不匹配。
所以把这个操作对应到PUT方法的接口是合理的。
内容的提问来源于stack exchange,提问作者fjduqrllhdnolvgrcc
相关产品推荐
相关产品推荐

