Rest 剩余删除幂等性

Rest 剩余删除幂等性,rest,idempotent,Rest,Idempotent,给定一个将删除整数索引处资源的删除请求,在该索引处重新创建资源的可能性是否会打破严格幂等性 e、 g.向/api/resource/123发出删除请求,删除123处的资源。然后发出一个post请求,该请求创建一个新的资源,该资源可以通过GET请求检索到相同的url 在我看来,要使原始DELETE具有适当的幂等性,API永远不应该使用以前使用的id创建新的、不同的资源,但我找不到明确的引用。事实上,这与方法的幂等性行为无关。 这就是命名资源的问题。因为如果资源不存在,删除操作将与删除资源后的操作完

给定一个将删除整数索引处资源的删除请求,在该索引处重新创建资源的可能性是否会打破严格幂等性

e、 g.向/api/resource/123发出删除请求,删除123处的资源。然后发出一个post请求,该请求创建一个新的资源,该资源可以通过GET请求检索到相同的url


在我看来,要使原始DELETE具有适当的幂等性,API永远不应该使用以前使用的id创建新的、不同的资源,但我找不到明确的引用。

事实上,这与方法的幂等性行为无关。 这就是命名资源的问题。因为如果资源不存在,删除操作将与删除资源后的操作完全相同。 是,第二个请求将删除同名的新资源。 但如果您遇到此问题,只需创建一个唯一的资源名称(例如UUID) 您还可以尝试使用数据库索引。即使删除了键为“123”的条目,数据库也不会再次创建它

给定一个将删除整数索引处资源的删除请求,在该索引处重新创建资源的可能性是否会打破严格幂等性

没有

如果使用请求方法的多个相同请求对服务器的预期效果与单个此类请求的效果相同,则该请求方法被视为“幂等”

区分幂等方法是因为如果在客户端能够读取服务器响应之前发生通信故障,请求可以自动重复。例如,如果客户端发送PUT请求,并且在收到任何响应之前基础连接已关闭,则客户端可以建立新连接并重试幂等请求。它知道重复请求将具有相同的预期效果,即使原始请求成功,尽管响应可能不同

注意:一般客户端可以重试请求;客户机不需要知道关于您的特定实现的任何信息

在我看来,要使原始的DELETE正确地是幂等的,API永远不应该使用以前使用的id创建一个新的、不同的资源,但是我找不到一个明确的引用

事实并非如此。考虑一个静态网站。作为网站所有者,你能删除
foobar.html
?你当然可以。你能稍后再做吗?当然如果这是真的,那么远程编辑也应该如此


如果对网站的远程编辑是正确的,那么对任何其他RESTAPI也是正确的。统一接口的要点是,用户不需要知道他们是在与文件系统、文档存储、数据库还是某些复杂的服务进行通信。API的工作是充当集成层,这样底层实现的作用就像web一样。

您可能回答了与我所问的不同的问题。问题在第一行,它与幂等性有关。然后我给出了一个例子,并试图(显然是含糊不清地)解释。正如您所说,正如创建/删除“foobar.html”应该是可能的一样,询问者示例中的“123”实际上是一个实现细节,如果它是由客户机提供的字符串而不是服务器分配的整数,那么这个问题大部分是没有意义的。