我想知道在达到用户许可证时API应返回的理想HTTP状态代码是什么?
最初我在考虑它的402(需要付款),但这不是我的情况。我的情况是,如果我的用户有限制添加10个插件,如果她试图添加第11个插件,他们应该得到他们的限制已达到的错误。
请帮助我使用相应的HTTP状态代码。
提前致谢
答案 0 :(得分:10)
配额超出没有HTTP状态代码,但是如果您在响应有效负载中添加了良好的描述,则有一些HTTP状态代码适合这种情况。
如果超出了请求的配额,但是在付款时可以执行更多请求,您可以考虑402
状态代码(即使文档说它保留供将来使用,其原因短语很漂亮明确并明确其目的):
402
(需要付款)状态代码保留供将来使用。
您可以使用403
表示在超出请求限额时禁止请求。始终欢迎请求有效负载中的良好描述:
403
(禁止)状态代码表示服务器已理解 请求但拒绝授权。希望的服务器 公开为什么禁止请求可以描述 响应有效负载中的原因(如果有)。 [..]
如果您对每小时/每天的请求数量施加限制,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 status codes are extensible。如果上述状态代码不符合您的需求,您可以创建自己的状态。由于这是客户端错误,因此新的状态代码应该在4xx
范围内。
答案 1 :(得分:1)
422不可处理的实体应该适用于这种情况。请求本身在形式上很好地形成。问题出在当前条件下,因为用户达到了极限。错误响应应该有助于如何解决这种现状。 https://httpstatuses.com/422
我的第二个赌注是 409 Conflict ,但与版本控制和碰撞更改有关。 https://httpstatuses.com/409
答案 2 :(得分:1)
我认为这是一个“ 业务逻辑错误”和 422无法处理的实体,可能会更好。
超文本传输协议(HTTP)422不可处理实体响应状态代码指示服务器理解请求实体的内容类型,并且请求实体的语法正确,但是无法处理所包含的指令。 / p>
答案 3 :(得分:-2)
我认为您应该使用自己的代码,甚至返回带有描述的200,这与您自己的应用程序的特定业务需求有关。尝试强制一个不完全适合您的业务逻辑的状态是一个坏主意,最终最终用户将向您发送此代码并使用非自定义代码可能会导致您不知道的错误,例如,代码429可能是一个完全不同的错误,而不是最大
中10个插件中的一个