在实践中区分HTTP状态代码403和409(或400)

问题描述 投票:4回答:1

即使在阅读了很多文档,书籍,spec后,我也无法100%确定是否应该在我的情况下使用http状态代码403或409。

有些人认为403应该仅用于授权问题,但是看到twitter's api使用403更新限制违规,我认为403实际使用比授权问题更广泛。也许它可以用来告诉请求违反了服务器端约束。

而且,从规范中可以看出409,当我们可以期望客户端可以解决问题时。

我会欣赏一些关于何时使用403以及何时使用409以及在我的案例中使用哪些代码的意见的各种现实例子,我将在下面的摘要中列出(以免违反NDA )。

编辑后:示例很冗长,但简单地说,它是关于约束验证失败时返回的代码。当约束验证失败时,您总是返回400吗?我应该返回400而不是403或409吗?


有一个客户端告诉服务A哪个架子包含一个特定的书。在向DB记录哪个书在哪个书架上时,服务A能够告诉客户端客户端正试图将书放在错误的书架上。服务A可以通过询问另一个服务B来判断这一点,该服务B在决定书应该去哪里时基本上有一些逻辑。

什么http代码应该服务A在这种情况下使用?

(该请求与服务B的决定 - 409相冲突? - 但客户端无法解决此问题,因为当服务B做出决定时它是永久性的。并且book id和bookshelf id都在path参数中(即,它们是此端点中的唯一参数)因此客户端无法进行任何更改以使用相同的请求解决问题)

此外,客户端能够告诉服务A不应再使用书架(因为它已满或因任何原因)。当客户端告诉服务A书架C不再使用时,然后客户端告诉服务A它想要将另一本书放在书架C上,服务A应告诉客户它不能这样做。什么http代码应该服务A在这种情况下使用? (该请求将与书架C未使用的数据库状态发生冲突 - 409?但是客户端无法解决此问题,因为当书架未使用时,它在服务A中是永久性的,并且它永远不会被使用再次 - 不是409?)

提前感谢您的时间和意见!

rest http-status-code-403 http-status-codes http-status-code-400 http-status-code-409
1个回答
2
投票

在提到的两个代码中,HTTP 403更为常见,并描述了有效(但未经授权)的请求

HTTP 409不是很常见。它描述了导致错误的冲突(如死锁或其他类型的问题)。当Mozilla gives good advicePUT动词描述这个最常出现的错误时,我认为500

对于更广泛的错误条件,我建议使用qazxswpoi错误代码

© www.soinside.com 2019 - 2024. All rights reserved.