考虑以下情况:
这是幂等的吗?
答案 0 :(得分:2)
这是幂等的吗?
是。幂等的相关定义由RFC 7231
提供如果使用该方法对服务器的多个相同请求的预期效果与单个此类请求的效果相同,则请求方法被视为“幂等”。
但是,您描述的情况是数据争用 - Charlie收到的表示取决于服务器应用从Alice和Bob收到的PUT请求的顺序。
避免丢失写入的通常答案是使用针对特定版本资源的请求进行更新;这类似于在您的请求中使用compare and swap
语义 - 丢失数据竞争的写入被丢弃在地板上
例如
x = 7
x.swap(7, 8) # Request from Alice changes x == 7 to x == 8
x.swap(8, 9) # Request from Bob changes x == 8 to x == 9
x.swap(7, 8) # No-Op, this request is ignored, x == 9
在HTTP中,Conditional Requests的规范为您提供了一种获取简单谓词的方法,并将它们提升到元数据中,以便通用组件可以理解正在发生的语义。这是通过validators eTag完成的。
基本思想是:服务器在元数据中提供与资源的当前表示相关联的验证器的表示。当客户端想要在表示没有改变的情况下发出请求时,它在请求中包含相同的验证器。期望服务器使用服务器端资源的当前状态重新计算验证器,并且仅当两个验证器表示匹配时才应用更改。
如果源服务器拒绝请求,因为请求中缺少预期的precondition headers,则可以使用428 Precondition Required对客户端错误的性质进行分类。
答案 1 :(得分:0)
是的,这是幂等的。如果这对你来说是错误的行为,我们应该知道背后的商业背景。