我想知道当用户的许可证达到时,API应该返回的理想HTTP状态码是什么?
最初我认为它的402(付款要求),但这不是我的方案。我的情况是,如果我的用户有添加10个插件的限制,如果她试图添加第11个插件,他们应该得到一个错误,他们的限制已达到。
请告诉我相应的HTTP状态码。
Thanks in advance
对于配额超过没有HTTP状态码,但是如果您在响应有效负载中添加良好的描述,则有一些HTTP状态码将适合这种情况。
如果已经超过了请求的配额,但是在付款后可以执行更多的请求,您可以考虑402
状态码(尽管文档说它保留供将来使用,但其原因短语非常清楚,并且很好地定义了它的目的):
6.5.2。402付款要求
402
(Payment Required)状态码保留以备将来使用。
当超过请求配额时,可以使用403
表示禁止该请求。在请求有效负载中有一个好的描述总是受欢迎的:
6.5.3。403年禁止
403
(Forbidden)状态码表示服务器理解请求,但拒绝授权。希望的服务器公开要求被禁止的原因可以说明这一点响应有效负载中的原因(如果有的话)。[. .]
如果您正在对每小时/天的请求数量进行限制,那么429
状态码可能适合您的需求(然而,服务器使用此状态码表示在短时间内接收了太多请求,即客户端正在进行节流):
4。429请求过多
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状态码是可扩展的。如果上述状态码不能满足您的需求,您可以创建自己的状态码。由于是客户端错误,新的状态码应该在4xx
范围内。
422不可处理实体应该在这种情况下工作。请求本身在语法上是格式良好的。问题是在目前的条件下,因为用户达到了极限。错误响应应该有助于解决这种现状。https://httpstatuses.com/422
我的第二个赌注是409冲突,但与版本控制和冲突更改有关。https://httpstatuses.com/409
我认为这是一个"业务逻辑错误"和422不可处理实体,可以更好。
超文本传输协议(HTTP) 422 Unprocessable Entity响应状态码表示服务器理解请求实体的内容类型,并且请求实体的语法是正确的,但是它无法处理包含的指令。
看到文档