如果删除请求将删除整型索引处的资源,那么在该索引处重新创建资源的可能性是否会破坏严格的幂等性?
例如,向/api/ resource /123发出删除请求时,删除123处的资源。然后,发出post请求,该请求创建一个新资源,该资源可以通过GET请求检索到同一个url。
在我看来,要使原始的DELETE成为正确的幂等函数,API就不应该用以前使用的id创建一个新的、不同的资源,但是我找不到明确的引用。
发布于 2017-08-31 14:47:38
如果删除请求将删除整型索引处的资源,那么在该索引处重新创建资源的可能性是否会破坏严格的幂等性?
不是的。
如果多个相同请求对服务器的预期效果与单个请求的效果相同,则请求方法被认为是“幂等的”。 区分幂等方法是因为,如果在客户端能够读取服务器响应之前发生通信失败,则请求可以自动重复。例如,如果客户端发送PUT请求,并且在接收到任何响应之前基础连接被关闭,那么客户机可以建立一个新连接并重试幂等请求。它知道重复请求将具有相同的预期效果,即使原始请求成功,尽管响应可能不同。
注意:通用客户端可以重试请求;客户端不需要知道有关特定实现的任何信息。
在我看来,要使原始的DELETE成为正确的幂等函数,API就不应该用以前使用的id创建一个新的、不同的资源,但是我找不到明确的引用。
情况完全不是这样的。考虑一下静态网站。你,网站所有者,能删除foobar.html吗?你当然可以。你能稍后再做吗?当然了。如果是这样的话,那么远程编辑也应该是正确的。
如果对web站点的远程编辑是正确的,那么对于任何其他REST也应该是如此。统一接口的要点是,使用者不需要知道他们是否在与文件系统、文档存储、数据库或某种复杂的服务进行对话。API的工作是充当集成层,这样底层实现就像web一样工作。
发布于 2017-08-31 12:17:36
事实上,这与方法的幂等行为无关。这就是命名资源的问题。因为如果资源不存在,则删除将与资源被删除后的行为完全相同。是的,第二个请求将删除同名的新资源。但是,如果遇到此问题,只需创建一个唯一的资源名称。(例如,UUID)您也可以尝试使用数据库索引。即使删除了带有键"123“的条目,数据库也不会再次创建它。
https://stackoverflow.com/questions/45981082
复制相似问题