レート制限
FreeFileTools APIのレート制限と、アプリケーションでの対処方法について理解しましょう。
無料枠の制限
| 制限 | 値 |
|---|---|
| 1時間あたりのリクエスト数 | 50 |
| リクエストあたりの最大ファイルサイズ | 25 MB |
| レート制限ウィンドウ | Rolling 1 hour |
レート制限はAPI Keyごとに適用されます。各キーにはそれぞれ独立したカウンターがあり、1時間のローリングベースでリセットされます。
レート制限を超過した場合
レート制限を超過すると、APIは429 Too Many Requestsレスポンスを返します:
json
{
"error": "Rate limit exceeded",
"message": "You have exceeded the rate limit of 50 requests per hour. Please try again later.",
"retryAfter": 1742
}retryAfterフィールドは、次のリクエストを送信するまでの待機秒数を示します。
レート制限レスポンスヘッダー
すべてのAPIレスポンスには、レート制限の使用状況を追跡するためのヘッダーが含まれています:
| ヘッダー | 説明 |
|---|---|
X-RateLimit-Limit | 1時間あたりの最大リクエスト数(50) |
X-RateLimit-Remaining | 現在のウィンドウで残っているリクエスト数 |
Retry-After | リトライまでの待機秒数(429レスポンス時のみ) |
レスポンスヘッダーの例
http
HTTP/1.1 200 OK
Content-Type: image/jpeg
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 42制限内に収めるためのヒント
1.
残りリクエスト数を確認する
X-RateLimit-Remainingヘッダーを監視して、残りのリクエスト数を把握してください。
2.
指数バックオフを実装する
429レスポンスを受信した場合、APIに連続してリクエストを送るのではなく、徐々に待機時間を増やしてリトライしてください。
3.
結果をキャッシュする
同じファイルを繰り返し処理する場合は、不要なAPIコールを避けるためにローカルに結果をキャッシュしてください。
4.
バッチ処理を賢く行う
バッチ処理の場合、一度にすべてを送信するのではなく、リクエストを時間的に分散させてください。
例:JavaScriptでのレート制限の処理
javascript
async function apiCall(url, options, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fetch(url, options);
if (response.status === 429) {
const retryAfter = parseInt(response.headers.get("Retry-After") || "60");
console.log(`Rate limited. Waiting ${retryAfter} seconds...`);
await new Promise((resolve) => setTimeout(resolve, retryAfter * 1000));
continue;
}
return response;
}
throw new Error("Max retries exceeded");
}