Limity żądań
Poznaj limity żądań FreeFileTools API i sposoby ich obsługi w aplikacji.
Limity darmowego planu
| Limit | Wartość |
|---|---|
| Żądania na godzinę | 50 |
| Maksymalny rozmiar pliku na żądanie | 25 MB |
| Okno limitu żądań | Rolling 1 hour |
Limit żądań jest stosowany per API Key. Każdy klucz ma własny niezależny licznik, który jest resetowany na zasadzie kroczącej co godzinę.
Po przekroczeniu limitu żądań
Po przekroczeniu limitu żądań API zwraca odpowiedź 429 Too Many Requests:
{
"error": "Rate limit exceeded",
"message": "You have exceeded the rate limit of 50 requests per hour. Please try again later.",
"retryAfter": 1742
}Pole retryAfter wskazuje liczbę sekund do odczekania przed wysłaniem kolejnego żądania.
Nagłówki odpowiedzi limitu żądań
Każda odpowiedź API zawiera nagłówki pomagające śledzić wykorzystanie limitu żądań:
| Nagłówek | Opis |
|---|---|
X-RateLimit-Limit | Maksymalna liczba żądań dozwolona na godzinę (50) |
X-RateLimit-Remaining | Liczba pozostałych żądań w bieżącym oknie |
Retry-After | Sekundy do odczekania przed ponowną próbą (tylko przy odpowiedziach 429) |
Przykład nagłówków odpowiedzi
HTTP/1.1 200 OK
Content-Type: image/jpeg
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 42Wskazówki, jak utrzymać się w limitach
Sprawdzaj pozostałe żądania
Monitoruj nagłówek X-RateLimit-Remaining, aby wiedzieć, ile żądań Ci pozostało.
Zaimplementuj wykładnicze wycofywanie
Po otrzymaniu odpowiedzi 429, czekaj i ponawiaj próby z rosnącymi opóźnieniami, zamiast bombardować API.
Cachuj wyniki
Jeśli wielokrotnie przetwarzasz te same pliki, cachuj wyniki lokalnie, aby uniknąć niepotrzebnych wywołań API.
Mądrze grupuj żądania
Przy przetwarzaniu wsadowym rozkładaj żądania w czasie, zamiast wysyłać je wszystkie na raz.
Przykład: Obsługa limitów żądań w 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");
}