【发布时间】:2017-12-17 05:50:13
【问题描述】:
即使在阅读了许多文件、书籍之后,spec 我不能 100% 确定我应该使用 http 状态码 403 还是 409。
有些人认为 403 应该仅用于授权问题,但看到 twitter's api 使用 403 违反更新限制,我认为 403 的实际使用不仅仅是授权问题。也许它可以用来告诉请求违反了服务器端约束。
而且,根据规范,当我们可以预期客户端可以解决问题时,似乎会使用 409。
我会很欣赏一些现实世界中何时使用 403 和何时使用 409 的示例,以及在我的案例中使用哪种代码的意见,我将在下面的摘要中列出(以免违反保密协议)。
编辑后:这个例子很长,但简单地说,它是关于当约束验证失败时返回什么代码。当约束验证失败时,你总是返回 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?)
提前感谢您的时间和投入!
【问题讨论】:
标签: rest http-status-code-403 http-status-codes http-status-code-400 http-status-code-409