レート制限
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プロバイダー
リクエスト方法
- アカウントマネージャーに連絡してください 以下の情報をお伝えください:
- API key識別子(最初の8文字)
- より高い制限が必要な特定のendpoint
- 予想されるピーク時のリクエスト量(1分あたりのリクエスト数)
- ユースケースの説明とタイミング(例:「10,000人の受験者が5分間で認定試験を開始」)
- トラフィックパターンを提供してください: 通常時およびピーク時の使用状況を示す過去のデータまたは予測を共有してください
- 事前に計画してください: 適切なプロビジョニングを確保するため、大規模イベントの少なくとも2週間前に制限の引き上げをリクエストしてください
エンタープライズ制限
エンタープライズのお客様は、要件に基づいてより高い制限にアクセスできます:
| ティア | 受験者の起動 |
|---|---|
| スタンダード | 2,500/分 |
| エンタープライズ | カスタム |
エンタープライズ価格については[email protected]にお問い合わせください。
ベストプラクティス
- 生成されたURLをキャッシュする — URLは
expire時間まで有効です - 重複リクエストを避ける — 同じユーザーと試験に対してURLを再生成しないでください
- URLを事前に生成する — 予定された試験の場合、受験者URLは最大5時間前、レビュアー/ライブURLは最大1時間前に生成してください(
expireの最大値) - 一括操作を分散させる — バーストではなく、リクエストを時間をかけて分散させてください
- サーキットブレーカーを実装する — 429レスポンスを受け取った後はリクエストを一時停止してください
- Webhooksを使用する — 結果をポーリングする代わりに、非同期更新のためにwebhooksを購読してください