レート制限
SecureCodingHubは、すべてのAPIキーに対して1分あたりおよび1時間あたりの上限を強制します。制限は通常運用時には目に見えないように設計されており、暴走スクリプトがプラットフォームをスパムする前に停止します。
デフォルト制限
| ウィンドウ | 制限 | ヘッダー |
|---|---|---|
| 1分あたり | 60リクエスト | X-RateLimit-Window: per_minute |
| 1時間あたり | 1,000リクエスト | X-RateLimit-Window: per_hour |
両方のウィンドウはすべてのリクエストで評価されます。狭いウィンドウ (60/分) は短時間のバーストを制御し、時間ウィンドウは持続的な負荷を制御します。いずれかのウィンドウを超過した場合、リクエストは429 Too Many Requestsで拒否されます — どのウィンドウが作動したかを調べる必要はなく、Retry-Afterヘッダーに従ってください。
拒否時のレスポンス
HTTP/1.1 429 Too Many Requests
Retry-After: 60
X-RateLimit-Window: per_minute
X-RateLimit-Limit: 60
{ "error": "rate_limited" }Retry-Afterは常に秒の整数カウントです — 次のリクエストが成功するまでの最小の安全な遅延です。X-RateLimit-Limitは作動したウィンドウの上限を反映します。
スライディングウィンドウと固定ウィンドウ
1分あたりのウィンドウは暦上の分 (UTC) に固定されています。13:42:59でのリクエストと13:43:01でのリクエストは別々のバケットに入ります。1時間あたりのウィンドウは、過去60分間の真のスライディング集約です。これは、通常使用時に分上限を繰り返し超えていない限り、時間上限に達することはないことを意味します。
推奨されるクライアント動作
429の場合、少なくともRetry-After秒スリープし、1回再試行してください。- ジッタを使用してください: 多くのワーカーが同時に制限に達した場合のサンダリングハードを避けるために
retryAfter + random(0, 5)秒。 - バッチサイズを制御できる場合は、キーあたり毎分50リクエスト以下で実行してください — 上限の安全圏内に収まります。
- 大量ジョブ (データエクスポート、大量ユーザープロビジョニング) では、1つのキーを共有するのではなく、ワーカーごとに1つのキーを発行してください。
429をアラート対象のエラーとして扱わないでください。指数関数的バックオフ後の繰り返しの失敗のみアラートしてください。
再試行パターン
ジッタ付きでRetry-Afterを尊重する最小のNode例:
async function call(path) {
for (let attempt = 0; attempt < 4; attempt++) {
const res = await fetch(`https://api.limeplate.com${path}`, {
headers: { Authorization: `Bearer ${process.env.SCH_API_KEY}` },
});
if (res.status !== 429) return res;
const wait = parseInt(res.headers.get('Retry-After') || '60', 10);
const jitter = Math.floor(Math.random() * 5);
await new Promise(r => setTimeout(r, (wait + jitter) * 1000));
}
throw new Error('exhausted retries on 429');
}より高いクォータのリクエスト
ほとんどの統合はデフォルト制限内で快適に動作します。ワークロードが本当に高い上限を必要とする場合 — 例えば、10,000ユーザーの進捗を取得する夜間Lookerリフレッシュ — APIキー名、統合の目的、想定するピーク時のリクエスト/分を添えてsupport@securecodinghub.comまでお問い合わせください。トークンをローテーションすることなく、キーあたりの制限を引き上げることができます。
レート制限されないもの
SecureCodingHubから受け入れるインバウンドWebhook配信は、当社側ではレート制限されません。エンドポイントに送信するアウトバウンドWebhook配信は、Webhookで文書化された別の再試行スケジュールに従います。