首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >REST删除幂等

REST删除幂等
EN

Stack Overflow用户
提问于 2017-08-31 12:06:25
回答 2查看 765关注 0票数 1

如果删除请求将删除整型索引处的资源,那么在该索引处重新创建资源的可能性是否会破坏严格的幂等性?

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-31 14:47:38

如果删除请求将删除整型索引处的资源,那么在该索引处重新创建资源的可能性是否会破坏严格的幂等性?

不是的。

RFC 7231

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

注意:通用客户端可以重试请求;客户端不需要知道有关特定实现的任何信息。

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

情况完全不是这样的。考虑一下静态网站。你,网站所有者,能删除foobar.html吗?你当然可以。你能稍后再做吗?当然了。如果是这样的话,那么远程编辑也应该是正确的。

如果对web站点的远程编辑是正确的,那么对于任何其他REST也应该是如此。统一接口的要点是,使用者不需要知道他们是否在与文件系统、文档存储、数据库或某种复杂的服务进行对话。API的工作是充当集成层,这样底层实现就像web一样工作。

票数 2
EN

Stack Overflow用户

发布于 2017-08-31 12:17:36

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45981082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档