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

标签 rest http

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

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

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

我在使用状态代码 426 和 412 之间犹豫不决。 426 状态代码的标题似乎是我想要的用例,但描述让我有点担心。 412 如果我将我的版本控制从授权 token 中移开并将其放在它自己的 header 中,这似乎是合适的。

这是我的第一个 REST API,它运行良好,我只是想将它转换为遵循最佳实践。所以我有点困惑。

TLDR;

  • 我应该将我的版本控制移到 Headers 中并使用 Status 412
  • 我应该使用状态码 426
  • 这里是否缺少我应该用来请求客户端更新的代码。

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

最佳答案

让我们快速浏览一下您提出的解决方案:状态代码 412 现在由 RFC 7232, section 4.2 授权.如果 section 3 中描述了一个或多个先决条件,它将在条件请求的上下文中使用所述 RFC 阻止给定请求完成。

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

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

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

这有点牵强,因为此代码表示存在授权问题。但是,它本身并不与身份验证相关联,因此您在这里应该没问题。

就我个人而言,我会选择 400。您可能还想看看 RFC 7807用于传输 API 错误的标准化方法。

关于rest - 客户端的 HTTP 状态代码已过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42225444/

相关文章:

ruby-on-rails - 如何处理或防止 Ruby on Rails 中的 "Only post requests are allowed"错误?

Java HttpGet,服务中打开文件过多错误

java - Rest Api Hit Browser 和 Postman 的区别

Python 如何编辑/更新 GitHub 要点?

java - 为什么 Retrofit 从我的 URL 请求中省略了某些字符?

http - Angular2 不发送 HTTP GET

spring-boot - spring boot REST Api 中的一对多关系

angular - 无法在 Ionic Angular 应用程序中从 HttpClient 读取 HttpResponse 中的自定义 header

python - 用于过滤 REST API 多行数据的正则表达式模式

javascript - sails.js 模糊错误信息。使用 xmlHttpRequest()