如果POST成功但不会导致创建任何新内容,我们应该返回什么状态代码?

Sam*_*der 8 rest http http-status-codes

我们有一个端点,当您发布时创建新版本的资源并返回201以及新创建的资源的位置.它根据当前版本与发布版本的比较确定新版本号(使用类似规则集的semver).

如果您发布的版本与现有版本相同,则不会更新版本号.在这种情况下我们应该回报什么?

  • 即使我们没有在技术上创造任何东西,我们也可以返回201.
  • 我不想返回409,因为它不是真正的冲突,就像你发布具有相同id的东西.如果您在现有版本略有不同的情况下发布相同的内容,那么您很乐意获得201.
  • 我们可以返回200,但那时看起来很奇怪,并增加了用户必须处理的响应代码

201响应的幂等性是否重要?

有更好的建议吗?

小智 4

303 - 看看其他怎么样?看起来很合适。我提请您注意https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
规范中的这句话

此方法的存在主要是为了允许 POST 激活的脚本的输出将用户代理重定向到选定的资源。

这听起来像是你想对我做的事。这是剩下的部分。

10.3.4 303 查看其他

可以在不同的 URI 下找到对请求的响应,并且应该使用该资源上的 GET 方法来检索。此方法的存在主要是为了允许 POST 激活的脚本的输出将用户代理重定向到选定的资源。新的 URI 不是原始请求资源的替代引用。303 响应不得被缓存,但对第二个(重定向)请求的响应可能是可缓存的。

不同的 URI 应由响应中的位置字段给出。除非请求方法是 HEAD,否则响应实体应该包含一个简短的超文本注释,其中包含指向新 URI 的超链接。

  Note: Many pre-HTTP/1.1 user agents do not understand the 303
  status. When interoperability with such clients is a concern, the
  302 status code may be used instead, since most user agents react
  to a 302 response as described here for 303
Run Code Online (Sandbox Code Playgroud)