在HTTP DELETE方面查看幂等性的正确方法是什么?

Dan*_*nna 14 rest http idempotent

我最近花了很多时间阅读HTTP 1.1规范并将其与REST相关联.我发现HTTP DELETE方法在其"幂等性"和安全性方面有两种解释.以下是两个阵营:

  1. 如果删除具有HTTP DELETE的资源,并且它成功(200 OK),然后您尝试删除该资源N次,则应该为每个删除调用取回成功消息(200 OK) .这就是它的"幂等性".

  2. 如果删除具有HTTP DELETE的资源,并且成功(200 OK),然后再次尝试删除该资源,则应该返回错误消息(410 Gone),因为资源已被删除.

规范说DELETE是幂等的,当然,但它也说幂等事件的序列仍然会产生副作用.我真的觉得第二阵营是正确的,第一阵营是误导.我们引入了什么"安全",允许客户认为它们是删除以前删除的资源的原因?

在第一个阵营中有很多人,包括几个关于这个问题的作者,所以我想检查是否有一些令人信服的理由,而不是导致人们进入第一阵营的情绪.

Mic*_*urr 20

作为幂等并不意味着不允许请求产生副作用(这就是'安全'属性所描述的).这只是意味着多次发出相同的请求不会导致不同或额外的副作用.

在我看来,后续的DELETE请求应该返回一个错误 - 它仍然是幂等的,因为服务器的状态与只发出一个DELETE请求的状态相同.然后再次返回200 OK状态也应该没问题 - 我不认为幂等是要求为后续DELETE请求返回错误代码 - 只是返回错误状态似乎对我更有意义.

  • 我更多地使用@JeffMartin,我不知道客户端在删除项目之前是否已经删除项目之前已经删除的信息.这可能意味着它多次发送请求或者其他一些客户端首先将其删除.但是如果客户端确实做了不同的事情,那么这意味着状态从服务器CHANGED从第一个DELETE转移到第二个,这是重要的响应(函数的返回),因为服务器上的状态在第一个请求后显然会发生变化. (2认同)