受信 REST API のレート制限

  • リリースバージョン: Xanadu
  • 更新日 2024年08月01日
  • 所要時間:4分
  • 過剰な受信 REST API 要求を防ぐために、1 時間あたりに処理される受信 REST API 要求の数を制限するルールを設定します。特定のユーザー、特定のロールを持つユーザー、またはすべてのユーザーの要求を制限するルールを作成できます。

    注:
    要求がインスタンスに達したときに、各ノードはユーザーごとのレート制限数を維持します。30 秒ごとに、カウントがデータベースにコミットされます。その結果、レート制限ルールが最大 30 秒間有効にならない場合があります。

    レート制限の優先度

    受信 REST API 要求が同じリソースの複数のレート制限ルールに一致する場合、レート制限の優先度は次のように強制されます。
    • [単一ユーザー] 用に設定されたルールは、[すべてのユーザー] 用のルールおよび [ロールを持つユーザー] 用のルールより優先されます。
    • [ロールを持つユーザー] 用に設定されたルールは、[すべてのユーザー] 用のルールより優先されます。
    この例では、同じ REST API リソース GET /now/v2/table/incident に 4 つのレート制限ルールがあります。
    レート制限ルール
    これらのレート制限ルールは、次の順序で適用されます。
    1. [ユーザーによるインシデントの制限 (Limit Incidents by User)] は、1 時間あたり最大 10 件の要求を送信できる ITIL ユーザーに適用されます。
    2. [import admin ロールによるインシデントの制限 (Limit Incidents by import admin Role)] は、import_admin ロールを持つ各ユーザーに適用されます。import_admin ロールを持つ各ユーザーは、1 時間あたり最大 3 件の要求を送信できます。
    3. [itil ロールによるインシデントの制限 (Limit Incidents by itil Role)] は、itil ロールを持つ各ユーザーに適用されます。itil ロールを持つ各ユーザーは、1 時間あたり最大 5 件の要求を送信できます。
    4. [インシデントの制限 (Limit Incidents)] はすべてのユーザーに適用されます。各ユーザーは、1 時間あたり最大 2 件の要求を送信できます。

    ITIL ユーザーが要求 GET /now/v2/table/incident を行うと、その要求は、[インシデントの制限 (Limit Incidents)][itil ロールによるインシデントの制限 (Limit Incidents by itil Role)][ユーザーによるインシデントの制限 (Limit Incidents by User)] の 3 つのルールの基準に一致します。[ユーザーによるインシデントの制限 (Limit Incidents by User)] ルールは他のルールよりも優先されるため、このルールのみが適用されます。結果として、ITIL ユーザーは 1 時間あたり最大 10 件の要求を送信できます。

    ユーザーが REST API リソースの複数のレート制限ルールの基準に一致する 2 つ以上のロールを持っている場合、要求を許可する数が最も少ないルールが、リソースに対するユーザーの要求に適用されます。上の図の例のルールで、ユーザー Abel Tuter が import_admin ロールと itil ロールの両方を持っているとします。Abel Tuter が送信する要求は、[admin ロールによるインシデントの制限 (Limit Incidents by admin Role)] ルールと[itil ロールによるインシデントの制限 (Limit Incidents by itil Role)] ルールの両方の基準を満たします。最も少ない数の要求を許可するため、[admin ロールによるインシデントの制限 (Limit Incidents by admin Role)] ルールのみが適用されます。結果として、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 が表示されます。

      レート制限応答ヘッダー

    レート制限を超えたために要求が拒否された場合、システムはレート制限に関する応答ヘッダーに加えて、Retry After 応答ヘッダーを返します。Retry After 応答ヘッダーには、何秒経過した後にレート制限の超過を回避するために要求を再試行できるかという秒数が表示されます。次のエラー応答が返されます。
    {
        "error": {
            "message": "Rate limit exceeded",
            "detail": "Rate limit of 10 requests per hour for Table API exceeded"
        },
        "status": "failure"
    }

    拒否された要求のステータスは、[429 要求が多すぎます (429 Too Many Requests)]です。

    REST 応答ステータス [429 要求が多すぎます (429 Too Many Requests)]