首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTTP补丁是幂等还是非幂等?

HTTP补丁是幂等还是非幂等?
EN

Stack Overflow用户
提问于 2015-03-21 18:44:14
回答 3查看 3.7K关注 0票数 4

我读过很多HTTP是非幂等的地方。有人能解释一下为什么它不是幂等的吗?因为根据定义-幂等方法可以也可能不会改变资源状态,但是重复的请求在第一个请求之后不会有进一步的副作用。重复的修补程序请求如何更改资源状态?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-21 22:17:52

对此有些困惑。补丁方法不是要求的是幂等的,这就是重点。客户端不能假设他们的补丁请求将是幂等的,因为他们可以使用PUT和GET。

如果某个特定的实现是幂等的或者不是幂等的,通常取决于所使用的修补算法(如果有的话)。例如,没有使用diff格式来验证当前值的糟糕的实现不会是幂等的。

票数 6
EN

Stack Overflow用户

发布于 2021-03-16 20:49:52

是的,有很多的讨论和困惑如何放置和补丁不同。清楚的是:

  • 请求必须包含给定资源的整体表示
  • 是幂等的(客户端可以保证100%)

补丁

  • 请求只包含子集(仅包含要更新的属性)
  • 不需要是幂等的(通常是幂等的,但它不是规则,因此客户端不能100%肯定这一点)

从这些规则中,我们可以推断出我们需要在后端实现的一些规则,例如:

a)

  • GET: users/1;响应体{username: 'john', email: 'old@email.com'}
  • PUT: users/1;请求体{username: 'john'}

从API (缺少email)发送验证错误或电子邮件将被删除。

我真的希望API应该返回验证错误。因此,要删除某些值,客户端应该调用(请求中提到的显式email: null ):

  • PUT: users/1;请求体{username: 'john', email: null}

b)

  • 修补程序:用户/1;请求体{username: 'john'}

服务器上没有变化。若要删除值,客户端应发送:

  • 修补程序:用户/1;请求体{email: null}

上述两个例子都是幂等的。

在另一个讨论中,如果修补程序在后端的集合中执行类似于"add“的操作:Use of PUT vs PATCH methods in REST API real life scenarios,则该修补程序是非幂等的。

票数 2
EN

Stack Overflow用户

发布于 2021-12-26 10:43:43

补丁不一定是幂等的,尽管它可以。将此与PUT进行对比;PUT总是幂等的。“幂等”一词意味着任何数量的重复、相同的请求都将使资源处于同一状态。例如,如果自动递增计数器字段是资源的一个组成部分,那么PUT就会自然地覆盖它(因为它覆盖了所有内容),但是对于补丁来说并不一定如此。

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

https://stackoverflow.com/questions/29186613

复制
相关文章

相似问题

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