2016-08-30 4 views
1

ユーザのライセンスに達したときにAPIが返すべき理想的なHTTPステータスコードは何ですか?ライセンス限度のHTTPステータスコードはどのくらいですか

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

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

+0

403 - 禁止されている可能性があります。 – rahimv

+0

私は専門家ではありませんが、個人的には、すべての同様のシナリオで同じHTTPコード403を使用し、JSON/XML出力を使用して正確な理由を指定する必要があります。 –

+0

あなたが選択したステータスコードを知りたいだけです。 –

答えて

0

422処理不能エンティティ

おかげで、このケースで動作するはずです。その要求自体は、適切に形成されています。ユーザーが制限に達したため、問題は現在の状況です。エラー応答は、この現状を解決する方法に役立つはずです。 https://httpstatuses.com/422

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

2

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

リクエストのクォータが超過していても支払いが行われる可能性がある場合は、402ステータスコードを考慮することができます(ドキュメンテーションは将来の使用のために予約されていますが、その理由フレーズはかなり明確で、よくその目的):

6.5.2. 402 Payment Required

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

403を使用して、要求のクォータを超過したときに要求が禁止されていることを示すことができます。要求ペイロードにおいて良好な説明は常に歓迎されている:

6.5.3. 403 Forbidden

403(禁止)ステータスコードは、サーバが 要求を理解していることを示し、それを許可することを拒否する。 への送信を希望するサーバーは、理由が禁止されている理由をpublicにして、応答ペイロード(該当する場合)に の理由を記述することができます。 [..]

あなたは時間/日あたりの要求の数に制限を適用する場合、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> 

(注)この仕様はオリジンサーバ は、ユーザを特定する方法を定義していないこと、またそれが要求をカウントする方法。たとえば、要求速度を制限する オリジンサーバーでは、 個の要求をリソースごとに、サーバー全体にわたって、 、またはサーバーのセット間でさえ、カウントすることができます。同様に、認証資格情報またはステートフルクッキーによってユーザ を識別することもあります。

429ステータスコードのレスポンスをキャッシュに保存してはいけません(MUST NOT)。

HTTP status codes are extensible。上記のステータスコードがあなたのニーズに合っていない場合は、独自のステータスを作成することができます。クライアントエラーであるため、新しいステータスコードは4xxの範囲にある必要があります。

+1

これは正しく、[この図](http://racksburg.com/choosing-an-http-status-code/)に沿っています。 – DaSourcerer

-1

あなた自身のコードを使用するか、説明付きの200を返す必要があると思います。これは、自分のアプリケーションの特定のビジネス要件に関するものです。あなたのビジネスロジックに完全に適合しない1つのステータスを強制しようとするのは悪い考えです。最終的には最終的にこのコードを送信し、カスタマイズされていないものを使用すると、あなたが認識していないエラーにつながる可能性があります。例コード429は、最大10個のプラグインのうちの1つのプラグインとは完全に異なるエラーになる可能性があります。

+0

'200'ステータスコードは_clientエラー_があるので、この状況には適していません。 '4xx'の範囲からのステータスコードは_right choice_です。この[回答](http://stackoverflow.com/a/9382163/1426227)を見てください、それは洞察力があるかもしれません。 [HTTPステータスコードは拡張可能です](https://tools.ietf.org/html/rfc7231#section-6)、この状況に対して新しいステータスコードを作成することはできません。しかし、新しいステータスコード*は '4xx'の範囲になければなりません。 –

関連する問題