Ratenlimits
Verstehen Sie die Ratenlimits der FreeFileTools API und wie Sie diese in Ihrer Anwendung handhaben.
Limits des kostenlosen Plans
| Limit | Wert |
|---|---|
| Anfragen pro Stunde | 50 |
| Maximale Dateigroesse pro Anfrage | 25 MB |
| Ratenlimit-Fenster | Rolling 1 hour |
Das Ratenlimit wird pro API Key angewendet. Jeder Schluessel hat seinen eigenen unabhaengigen Zaehler, der auf rollierender stuendlicher Basis zurueckgesetzt wird.
Wenn Ratenlimits ueberschritten werden
Wenn Sie das Ratenlimit ueberschreiten, gibt die API eine 429 Too Many Requests-Antwort zurueck:
{
"error": "Rate limit exceeded",
"message": "You have exceeded the rate limit of 50 requests per hour. Please try again later.",
"retryAfter": 1742
}Das Feld retryAfter gibt die Anzahl der Sekunden an, die vor einer weiteren Anfrage gewartet werden soll.
Ratenlimit-Antwort-Header
Jede API-Antwort enthaelt Header, die Ihnen helfen, Ihre Ratenlimit-Nutzung zu verfolgen:
| Header | Beschreibung |
|---|---|
X-RateLimit-Limit | Maximale Anzahl erlaubter Anfragen pro Stunde (50) |
X-RateLimit-Remaining | Anzahl verbleibender Anfragen im aktuellen Fenster |
Retry-After | Sekunden bis zum erneuten Versuch (nur bei 429-Antworten) |
Beispiel-Antwort-Header
HTTP/1.1 200 OK
Content-Type: image/jpeg
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 42Tipps zum Einhalten der Limits
Verbleibende Anfragen pruefen
Ueberwachen Sie den X-RateLimit-Remaining-Header, um zu wissen, wie viele Anfragen Ihnen noch bleiben.
Exponentielles Backoff implementieren
Wenn Sie eine 429-Antwort erhalten, warten Sie und versuchen Sie es mit zunehmenden Verzoegerungen erneut, anstatt die API zu bombardieren.
Ergebnisse zwischenspeichern
Wenn Sie dieselben Dateien wiederholt verarbeiten, speichern Sie die Ergebnisse lokal zwischen, um unnoetige API-Aufrufe zu vermeiden.
Kluges Batching
Verteilen Sie Ihre Anfragen bei Stapelverarbeitung ueber die Zeit, anstatt alle auf einmal zu senden.
Beispiel: Ratenlimits in JavaScript handhaben
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");
}