Docsレート制限

レート制限

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-Limit1時間あたりの最大リクエスト数(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");
}