Markdownで表示

レート制限

Proctorio APIは、すべてのクライアントに対するサービスの信頼性を確保するためにレート制限を適用しています。制限は、一般的な使用パターンに基づいてendpointごとに異なります。

デフォルトの制限

レート制限はAPI keyごと、リージョンごとに適用されます。制限を超えた場合、APIはHTTP 429 Too Many Requestsで応答します。

スコープ制限
デフォルトレート1分あたり60リクエスト
バースト1秒あたり10リクエスト

Endpoint固有の制限

一部のendpointには、実際の使用パターンに対応するために、より高い制限が設定されています。

受験者の起動 (/v2/candidate/launch)

受験者起動endpointは、大量の試験開始をサポートします。大規模なテストイベント(例:認定試験、大学期末試験)では、数千の同時起動が必要になることがよくあります。

スコープ制限
デフォルト1分あたり2,500リクエスト
バースト1秒あたり500リクエスト

これにより、2,500人以上の受験者が同じ1分間に試験を開始するシナリオに対応できます。

その他のendpoint

その他のすべてのendpointはデフォルトの制限(60/分、10/秒バースト)を使用します。

レート制限ヘッダー

レート制限が適用された場合、APIはHTTP 429 Too Many Requestsで応答し、以下を含みます:

ヘッダー説明
Retry-Afterリトライまでの待機秒数

レート制限への対処

429レスポンスを受け取った場合、指数バックオフを実装してください:

import time
import requests

def call_api_with_retry(url, headers, payload, max_retries=3):
    for attempt in range(max_retries):
        response = requests.post(url, headers=headers, json=payload)
        if response.status_code == 429:
            retry_after = int(response.headers.get("Retry-After", 2 ** attempt))
            time.sleep(retry_after)
            continue
        return response
    raise Exception("Rate limit exceeded after retries")

より高い制限のリクエスト

より高い制限をリクエストすべきタイミング

  • 大規模なテストイベント: 5,000人以上の同時受験者がいる認定試験、標準化テスト、または大学期末試験
  • マルチテナントプラットフォーム: 単一の統合を通じて複数の教育機関にサービスを提供するLMSプロバイダー

リクエスト方法

  1. アカウントマネージャーに連絡してください 以下の情報をお伝えください:
    • API key識別子(最初の8文字)
    • より高い制限が必要な特定のendpoint
    • 予想されるピーク時のリクエスト量(1分あたりのリクエスト数)
    • ユースケースの説明とタイミング(例:「10,000人の受験者が5分間で認定試験を開始」)
  2. トラフィックパターンを提供してください: 通常時およびピーク時の使用状況を示す過去のデータまたは予測を共有してください
  3. 事前に計画してください: 適切なプロビジョニングを確保するため、大規模イベントの少なくとも2週間前に制限の引き上げをリクエストしてください

エンタープライズ制限

エンタープライズのお客様は、要件に基づいてより高い制限にアクセスできます:

ティア受験者の起動
スタンダード2,500/分
エンタープライズカスタム

エンタープライズ価格については[email protected]にお問い合わせください。

ベストプラクティス

  • 生成されたURLをキャッシュする — URLはexpire時間まで有効です
  • 重複リクエストを避ける — 同じユーザーと試験に対してURLを再生成しないでください
  • URLを事前に生成する — 予定された試験の場合、受験者URLは最大5時間前、レビュアー/ライブURLは最大1時間前に生成してください(expireの最大値)
  • 一括操作を分散させる — バーストではなく、リクエストを時間をかけて分散させてください
  • サーキットブレーカーを実装する — 429レスポンスを受け取った後はリクエストを一時停止してください
  • Webhooksを使用する — 結果をポーリングする代わりに、非同期更新のためにwebhooksを購読してください