受信 REST API レート制限
過剰な受信 REST API 要求を防ぐために、1 時間あたりに処理される受信 REST API 要求の数を制限するルールを設定します。特定のユーザー、特定のロールを持つユーザー、またはすべてのユーザーに対する要求を制限するルールを作成できます。
注:
要求がインスタンスに到達すると、各ノードでユーザーごとのレート制限カウントが維持されます。30 秒ごとに、カウントがデータベースにコミットされます。その結果、レート制限ルールは最大 30 秒間有効にならない可能性があります。
レート制限の優先度
受信 REST API 要求が同じリソースの複数のレート制限ルールに一致する場合、レート制限の優先順位は次のように適用されます。
- 単一ユーザー用に設定されたルールは、すべてのユーザーのルールとロールを持つユーザーのルールを上書きします。
- ユーザーに設定されたルールと、すべてのユーザーのロール上書きルールがあります。
この例では、同じ REST API リソースに対して 4 つのレート制限ルールがあります。
GET /now/v2/table/incident。これらのレート制限ルールは、次の順序で適用されます。
- [ユーザー別にインシデントを制限] は 、1 時間あたり最大 10 件の要求を送信できる ITIL ユーザーに適用されます。
- インポートアドミンロールでインシデントを制限 するロールは、import_adminロールを持つ各ユーザーに適用されます。import_admin ロールを持つ各ユーザーは、1 時間あたり最大 3 つの要求を送信できます。
- itil ロールでインシデントを制限するロール は、itil ロールを持つ各ユーザーに適用されます。itil ロールを持つ各ユーザーは、1 時間あたり最大 5 つの要求を送信できます。
- [インシデントを制限] は すべてのユーザーに適用されます。各ユーザーは、1 時間あたり最大 2 つの要求を送信できます。
ITIL ユーザーが要求 GET /now/v2/table/incident を行うと、その要求は [ インシデントを制限]、[ itil ロールでインシデントを制限]、および [ ユーザーでインシデントを制限] の 3 つのルールの基準に一致します。他のルールよりも優先されるため、[ ユーザー別にインシデントを制限 ] ルールのみが適用されます。その結果、ITIL ユーザーは 1 時間あたり最大 10 件の要求を送信できます。
ユーザーが REST API リソースの複数のレート制限ルールの基準に一致する 2 つ以上のロールを持っている場合、最小数の要求を許可するルールがリソースに対するユーザーの要求に適用されます。上の図のルール例では、ユーザー Abel Tuter が import_admin ロールと itil ロールの両方を持っていると仮定します。Abel Tuter が要求を送信すると、[ アドミンロールでインシデントを制限 ] ルールと [itil ロールでインシデントを制限 ] ルールの両方の基準を満たします。許可される要求の数が最も少ないため、[ アドミンロールでインシデントを制限 ] ルールのみが適用されます。その結果、Abel Tuter は 1 時間あたり最大 3 つの要求を送信できます。
REST API 応答ヘッダー
REST API エクスプローラーの使用 または HTTP クライアント (Postman など) を使用して、受信 REST API 要求を生成できます。要求がレート制限ルールに一致する場合、いくつかの HTTP 応答ヘッダーがレート制限に関する情報を提供します。
- X-RateLimit-Limit は 、1 時間あたりに許可される要求の数を表示します。
- X-RateLimit-Reset は、次のスケジュールされたリセットまでの Unix 時間を表示します。
- X-RateLimit-Rule は、適用されているレート制限ルールのsys_idを表示します。
要求がレート制限を超えたために拒否された場合、システムはレート制限に関する応答ヘッダーに加えて [ 後で再試行 ] 応答ヘッダーを返します。[ 後で再試行] 応答ヘッダーには、レート制限を超えないように要求を再試行できるまでの秒数が表示されます。次のエラー応答が返されます。
{
"error": {
"message": "Rate limit exceeded",
"detail": "Rate limit of 10 requests per hour for Table API exceeded"
},
"status": "failure"
}拒否された要求のステータスは「429 要求が多すぎます」です。