【问题标题】:What is the HTTP status code for License limit reached达到许可限制的 HTTP 状态代码是什么
【发布时间】:2017-01-06 09:04:06
【问题描述】:

我想知道在达到用户许可时 API 应该返回的理想 HTTP 状态代码是什么?

最初我认为它是 402(需要付款),但这不是我的方案。我的情况是,如果我的用户有添加 10 个插件的限制,如果她尝试添加第 11 个插件,他们应该会收到一个错误,说明他们的限制已达到。

请帮助我提供相应的 HTTP 状态代码。

提前致谢

【问题讨论】:

  • 403 - Forbidden 可能是匹配项,因为您禁止用户提出更多请求。
  • 我不是专家,但我个人认为对于所有类似情况,您应该使用相同的 HTTP 代码 403,并使用 JSON/XML 输出来指定确切原因
  • 只是想知道您选择了哪个状态码。

标签: http http-status-codes


【解决方案1】:

422 Unprocessable Entity 在这种情况下应该可以工作。请求本身在语法上形成良好。问题出在当前条件下,因为用户达到了限制。错误响应应该有助于解决这种现状。 https://httpstatuses.com/422

我的第二个赌注是 409 冲突,但与版本控制和冲突更改有关。 https://httpstatuses.com/409

【讨论】:

    【解决方案2】:

    quota exceeded 没有 HTTP 状态代码,但是如果您在响应负载中添加了良好的描述,则有一些 HTTP 状态代码适合这种情况。

    如果请求的配额已超过,但在付款时可以执行更多请求,您可以考虑402 状态代码(尽管文档说它是为将来使用而保留的,但其原因短语很清楚,并且很好地定义了它的目的):

    6.5.2. 402 Payment Required

    402(需要付款)状态代码保留供将来使用。

    您可以使用403 表示超过请求配额时禁止请求。始终欢迎在请求负载中提供良好的描述:

    6.5.3. 403 Forbidden

    403(Forbidden)状态码表示服务器理解 请求但拒绝授权。一个服务器希望 公开请求被禁止的原因可以描述 响应负载中的原因(如果有)。 [..]

    如果您对每小时/每天的请求数施加限制,429 状态码可能适合您的需要(但是服务器使用此状态码表示在很短的时间,即客户端正在节流):

    4. 429 Too Many Requests

    429 状态码表示用户发送过多 在给定时间内请求(“速率限制”)。

    响应表示应该包括解释 条件,并且可以包含一个Retry-After 标头,指示多长时间 在发出新请求之前等待。

    例如:

    HTTP/1.1 429 Too Many Requests
    Content-Type: text/html
    Retry-After: 3600
    
    <html>
       <head>
          <title>Too Many Requests</title>
       </head>
       <body>
          <h1>Too Many Requests</h1>
          <p>I only allow 50 requests per hour to this Web site per
             logged in user.  Try again soon.</p>
       </body>
    </html>
    

    请注意,本规范没有定义源服务器如何 标识用户,也不知道它如何计算请求。例如,一个 限制请求率的源服务器可以根据 跨整个服务器的每个资源的请求计数, 甚至在一组服务器中。同样,它可能会识别用户 通过其身份验证凭据或有状态的 cookie。

    状态码为429 的响应不得存储在缓存中。

    HTTP status codes are extensible。如果上述状态代码不符合您的需求,您可以创建自己的状态。由于是客户端错误,新的状态码应该在4xx 范围内。

    【讨论】:

    • 这是正确的,也符合this chart
    • 我看不到文章上的图表。我们可以获取更新的来源吗?
    【解决方案3】:

    我认为这是一个“业务逻辑错误”和422 Unprocessable Entity,可以更好。

    超文本传输​​协议 (HTTP) 422 Unprocessable Entity 响应状态码表示服务器理解请求实体的内容类型,请求实体的语法正确,但无法处理包含的指令。

    See documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 2017-06-27
      • 2018-02-24
      • 2021-10-23
      • 1970-01-01
      • 2019-05-01
      • 1970-01-01
      相关资源
      最近更新 更多