当我必须向HTTP请求发送有效载荷时,应该使用PUT而不是DELETE吗?

时间:2019-11-13 18:47:20

标签: c# http asp.net-core-webapi

我正在创建的应用程序具有DELETE API,该API基本上将数据库记录的Active列设置为0。我通过查询参数传递ID,以标识需要停用的记录。

但是,最近,我从项目经理那里收到了另一个请求,其中应该存储启动删除操作的用户ID和应用程序ID。

有了这个,我应该只通过查询参数传递这两个附加信息,还是改为更改API来接受PUT请求更有意义?

3 个答案:

答案 0 :(得分:4)

由于在这种情况下,userIDapplicationID似乎是元数据(不是与资源删除严格相关的数据),因此您也可以在HTTP标头中传递该信息。

DELETE /resource/{resourceId}
X-UserId: userId
X-AppId: appId

{empty body}

答案 1 :(得分:3)

Boxstub_sql.exe是幂等的。也就是说,如果我执行相同的操作100次(例如,猴子跳了回车键),那么它应该只将项目的状态更改1次,第一次,其余操作实际上应该是No-Ops

PUT在语义上如何做到这一点是通过将所有状态包括在请求本身中,从而有效地替换资源在服务器上的表示。

我真正的问题是,为什么要关心它是PUT还是DELETE?语义上,如果您的请求满足了PUT的需求,则可能是PUT;和there's no prohibition against having a request body with a DELETE request

如果是我,除非我想为其他目的保持强大的REST语义,否则我可能只使用PUT请求,因为POST表示此操作会对将来的调用者产生副作用,而且我认为没有理由专门处理请求,因为在这种情况下,它似乎没有买任何东西。

答案 2 :(得分:0)

Patch非常适合此请求,因为您希望部分更新资源。 了解有关补丁here

的更多信息