RESTサービスの仕様をまとめています。その一部には、サービス全体およびリソースのグループ、または個別のリソースに対してユーザーを調整する機能が組み込まれています。同様に、タイムアウトこれらは、リソース/グループ/サービスごとに構成可能です。
私はただHTTP 1.1仕様を調べて、リクエストが制限に達したためにリクエストが実行されないことをクライアントに伝える方法を決定しようとしています。
最初は、クライアントコード403 - Forbidden
が仕様であると考えましたが、これは次のとおりです。
承認は役に立たず、リクエストは繰り返されるべきではありません
気になりました。
503 - Service Unavailable
ヘッダーを使用して再試行時間を通知できるため、実際にはRetry-After
の方が適しています。
将来的には、eコマースを介してより多くのリクエストの「購入」をサポートすることを検討する可能性があります(その場合、クライアントコード402 - Payment Required
が確定されていればいいです)。 503応答も。
私はどちらを使うべきだと思いますか?または私が考慮していない別のものはありますか?
ユーザーが一定時間内に送信したリクエストが多すぎます。レート制限スキームでの使用を目的としています。このコードは RFC 6585追加のHTTPステータスコードで受け入れられました。
The 429 status code indicates that the user has sent too many requests in a given amount of time ("rate limiting"). The response representations SHOULD include details explaining the condition, and MAY include a Retry-After header indicating how long to wait before making a new request... Note that this specification does not define how the Origin server identifies the user, nor how it counts requests. For example, an Origin server that is limiting request rates can do so based upon counts of requests on a per-resource basis, across the entire server, or even among a set of servers. Likewise, it might identify the user by its authentication credentials, or a stateful cookie. Responses with the 429 status code MUST NOT be stored by a cache...
ある程度、コードで好きなことを自由に行うことができますが、503
を使用すること、または402
を使用する場合は、誰もあなたが物事を壊す。
編集:純粋主義者は、503から始めて、支払いが可能になったら切り替えるべきだと言うかもしれません。
コメントでこれに優れた追加:
4xxはクライアントが特定のアクションを実行することで修正できるエラーを示し、5xxはクライアントが解決できないサーバー上の問題を示します。したがって、あなたのケースでは、(i)サーバーが正しく動作していること、および(ii)クライアントが速度を落とすか、クレジットを追加購入することでエラーを「修正」できるため、4xxがより適切です。正確な解像度は、429応答の本文で示すことができます。 – 7時間前マイクチェンバレン