对禁用资源的操作的预期 HTTP 状态代码

jef*_*dio 11 rest api-design http

给定以下操作的预期/正确 HTTP 状态代码是什么:

  • 请求语法正确(消除400
  • 用户已通过身份验证(消除401
  • 用户被授权执行操作(消除403
  • 位置/资源存在(消除404
  • 方法被实现(消除501
  • 没有服务器错误(消除5xx

资源当前被禁用,从而阻止操作以预期结果完成。用户可以更改资源的状态并重试相同的请求。有关资源为何无法执行所要求的操作的信息将包含在响应正文中。

我的想法是这409 Conflict将是最好的响应,因为用户可能会更改资源的状态并重新提交请求,但也许有更好的方法表明“您通常允许使用此方法,但资源当前处于状态这会阻止它按预期完成。”

The*_*Wes 6

这似乎是互联网上的共识,我在这里看不到更好的了。请参阅此处了解另一个类似的问题

409

此代码用于用户可能能够解决冲突并重新提交请求的情况。 来源

接下来是这个

在响应 PUT 请求时最有可能发生冲突。例如,如果正在使用版本控制,并且正在 PUT 的表示包含对资源的更改,这些更改与早期(第三方)请求所做的更改相冲突

这看起来更像是在客户端构建调用时实体在客户端下方移动,也许假设是客户端在进行调用之前请求允许的操作。如果您实现了这一点,我会说 409 对于您的 API 来说是完全有效的,因为您为客户端提供了仅发出有效请求的能力,除非其他人更改了实体。

显然,您应该保持一致,并记录响应代码及其用法。