即使在阅读了许多文档、书籍、规范之后, 我也不能 100% 确定在我的情况下我应该使用 http 状态代码 403 还是 409。
有人认为 403 应该只用于授权问题,但是看到twitter 的 api使用 403 来违反更新限制,我认为 403 的实际使用不仅仅是授权问题。也许它可以用来告诉请求违反了服务器端约束。
而且,从规范来看,当我们可以预期客户端可以解决问题时,似乎使用了 409。
我很欣赏一些现实世界中何时使用 403 和何时使用 409 的示例,以及关于在我的案例中使用哪些代码的意见,我将在下面的摘要中列出(以免违反 NDA )。
编辑后:这个例子很长,但简单地说,它是关于当约束验证失败时返回什么代码。当约束验证失败时,你总是返回 400 吗?我应该返回 400 而不是 403 或 409?
有一个客户端告诉服务 A 哪个书架包含特定的书。在向数据库记录哪本书在哪个书架上时,服务 A 能够告诉客户客户正试图将书放在错误的书架上。服务 A 可以通过询问另一个服务 B 来判断这一点,该服务 B 在决定一本书应该去哪里时基本上有一些逻辑。
在这种情况下,服务 A 应该使用什么 http 代码?
(请求与服务 B 的决定冲突 - 409? - 但客户端无法解决此问题,因为当服务 B 做出决定时,它是永久性的。并且书 id 和书架 id 都在路径参数中(即,它们是此端点中的唯一参数),因此客户端无法真正进行任何更改来解决相同请求的问题)
此外,客户端能够告诉服务 A 不应再使用书架(因为它已满或出于任何原因)。当客户端告诉服务 A 书架 C 不再使用时,然后客户端告诉服务 A 它想在书架 C 上放另一本书,服务 A 应该告诉客户端它不能这样做。在这种情况下,服务 A 应该使用什么 http 代码?(该请求会与说书架 C 未使用的数据库状态冲突 - 409?但客户端无法解决此问题,因为当书架未使用时,它在服务 A 中是永久的,并且从不使用再次——不是409?)
提前感谢您的时间和投入!