web-dev-qa-db-ja.com

ライセンス制限に達したためのHTTPステータスコードとは

ユーザーのライセンスに達したときにAPIが返す必要のある理想的なHTTPステータスコードを知りたいのですが。

当初は402(支払いが必要)と考えていましたが、これは私のシナリオではありません。私の場合は、ユーザーが10個のプラグインを追加する制限がある場合、11番目のプラグインを追加しようとすると、制限に達したというエラーが表示されます。

このための適切なHTTPステータスコードを教えてください。

前もって感謝します

14
Phantom007

クォータ超過のHTTPステータスコードはありませんが、応答ペイロードに適切な説明を追加すると、この状況に適したHTTPステータスコードがいくつかあります。

リクエストの割り当てを超えたが、支払い時にさらに多くのリクエストを実行できる場合は、402ステータスコードを検討することができます(ドキュメントには将来の使用のために予約されていると記載されていますが、理由フレーズはかなり明確で定義されていますその目的):

6.5.2。402支払いが必要です

402(支払いが必要)ステータスコードは、将来の使用のために予約されています。

403を使用して、リクエストの割り当てを超えたときにリクエストが禁止されていることを示すことができます。リクエストペイロードの適切な説明はいつでも歓迎です。

6.5.3。403 Forbidden

403(禁止)ステータスコードは、サーバーが要求を理解したが、承認を拒否したことを示します。リクエストが禁止されている理由を公開したいサーバーは、その理由を(もしあれば)応答ペイロードに記述できます。 [..]

1時間あたり1日あたりのリクエスト数に制限を適用している場合、429ステータスコードがニーズに適している可能性があります(ただし、このステータスコードは、サーバーで受信されたリクエストが多すぎることを示すためにサーバーによって使用されます短時間、つまりクライアントがスロットルしている):

4。429リクエストが多すぎます

429ステータスコードは、ユーザーが一定の時間内に送信したリクエストが多すぎることを示します(「レート制限」)。

応答の表現には、条件を説明する詳細を含める必要があり(SHOULD)、新しいリクエストを行う前に待機する時間を示す Retry-After ヘッダーを含めることができます(MAY)。

例えば:

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>

この仕様では、Originサーバーがユーザーを識別する方法や、リクエストをカウントする方法は定義されていません。たとえば、リクエストレートを制限しているオリジンサーバーは、リソースごと、サーバー全体、または一連のサーバー間でのリクエスト数に基づいて制限できます。同様に、認証資格情報またはステートフルCookieによってユーザーを識別する場合もあります。

429ステータスコードを含む応答は、キャッシュに保存してはなりません(MUST NOT)。

HTTPステータスコードは拡張可能です 。上記のステータスコードがニーズに合わない場合は、独自のステータスを作成できます。これはクライアントエラーであるため、新しいステータスコードは 4xx の範囲内である必要があります。

19
cassiomolin

この場合、422 Unprocessable Entityが機能するはずです。リクエスト自体は、構文的に整形式です。ユーザーが制限に達したため、問題は現在の状態にあります。エラー応答は、この現状維持の解決方法に役立つはずです。 https://httpstatuses.com/422

私の2番目の賭けは409競合ですが、バージョン管理と衝突する変更に関連付けられています。 https://httpstatuses.com/409

4
Szabolcs Heilig