客户端的HTTP状态代码已过期

Hob*_*ist 7 rest http

我正在努力使REST API不再总是响应,如果出现问题,将在返回的JSON中STATUS: 200 OK包含一个error密钥,并在出现问题时尝试使用正确的状态代码。

到目前为止,我已经将服务器的大部分移动到了正确的状态代码 200, 201, 400, 401, 403, 404, 500, 501, and 503

目前,我正在尝试找出最有效的方法来拒绝过时的客户端对API调用的访问。目前,我正在发送使用授权令牌编码的客户端版本。

我被困在使用状态码之间426, and 412。426状态代码的标题似乎就像我想要的用例,但是描述让我有些担心。 412如果我将版本控制从授权令牌中移开,并将其放在自己的标头中,这似乎是合适的。

这是我的第一个REST API,并且效果很好,我只是想将其转换为遵循最佳实践。所以我有点困惑。

TLDR;

  • 我是否应该将版本控制移至标题并使用状态412
  • 我应该使用状态码426
  • 我在这里应该缺少用于请求客户端更新的代码吗?

注意:我的客户端不是Web浏览器。它是一种移动设备。

DaS*_*rer 8

让我们快速地快速完成您提出的解决方案:状态代码412现在受RFC 7232第4.2节的授权。如果在RFC的第3节中描述的一个或多个前提条件阻止给定请求的完成,则将在条件请求的上下文中使用它。

代码426受RFC 7231第6.5.15节的约束。此代码使客户端知道用于访问资源的[http]协议版本太旧而无法完成请求。这两个代码均不适用于此处。

此图表的帮助下,我认为这里有两个代码就足够了:

  • 代码400 / 错误请求

    400有点含糊(故意这样),表示请求存在一般性问题。

  • 代码403 / 禁止

    这有点冗长,因为此代码指示授权问题。但是,它并不是固有地与身份验证相关联的,因此您应该在这里很好。

就个人而言,我将使用400。您可能还想看看RFC 7807,以了解如何传输API错误的标准化方法。