识别幂等操作冲突的最佳 Http 代码是什么

Mel*_*ius 5 rest http-status-codes

我开发了 res 服务,每次调用都使用唯一的 id 参数,但是当多次使用相同的 id 时,它应该检索相同的响应,并且第一次检索到状态代码指定错误,我正在寻找最好的状态代码,一些帖子使用“ 409 Conflict”和一些“ 406 Not Acceptable”,该使用哪个?

楊立群*_*楊立群 7

409 更好,因为 406 主要用于表示不可接受的标头。

406 Not Acceptable 根据请求中发送的 Accept 头,请求的资源只能生成不可接受的内容。

409(冲突)表示您的请求重复。

409 Conflict 表示由于请求冲突而无法处理请求,例如多个同时更新之间的编辑冲突。


Raj*_*jan 7

我想提出不同的意见。“为什么我们应该总是返回 409 并打扰客户处理这些情况?为什么客户应该担心项目是作为当前请求的一部分还是过去尝试之一创建的?”

我觉得对于像“在集合上发布以创建资源实例”这样的简单场景,如果服务器返回 201,即使在幂等响应的情况下,客户端也可以得到简化。

但是,我们还应该确保这种简化不会在某些情况下造成混乱,例如:资源是通过客户端的 POST 请求使用初始版本 V1 创建的。该资源随后会更新并移至版本 V2。现在,由于某种原因,初始客户端使用相同的幂等性令牌重试 POST 请求。我相信后一个应该返回为 409,因为这是一个冲突。

POST 预计会使用请求中存在的数据创建资源的初始版本。由于这是重复的请求,我们宁愿获取现有的资源实例并返回给客户端。该资源状态可能不具有创建请求中指定的所有字段,因此会发生冲突。