我正在创建的应用程序具有DELETE API,该API基本上将数据库记录的Active列设置为0。我通过查询参数传递ID,以标识需要停用的记录。
但是,最近,我从项目经理那里收到了另一个请求,其中应该存储启动删除操作的用户ID和应用程序ID。
有了这个,我应该只通过查询参数传递这两个附加信息,还是改为更改API来接受PUT请求更有意义?
答案 0 :(得分:4)
由于在这种情况下,userID
和applicationID
似乎是元数据(不是与资源删除严格相关的数据),因此您也可以在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