DocsLimity żądań

Limity żądań

Poznaj limity żądań FreeFileTools API i sposoby ich obsługi w aplikacji.

Limity darmowego planu

LimitWartość
Żądania na godzinę50
Maksymalny rozmiar pliku na żądanie25 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:

json
{
  "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łówekOpis
X-RateLimit-LimitMaksymalna liczba żądań dozwolona na godzinę (50)
X-RateLimit-RemainingLiczba pozostałych żądań w bieżącym oknie
Retry-AfterSekundy do odczekania przed ponowną próbą (tylko przy odpowiedziach 429)

Przykład nagłówków odpowiedzi

http
HTTP/1.1 200 OK
Content-Type: image/jpeg
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 42

Wskazówki, jak utrzymać się w limitach

1.

Sprawdzaj pozostałe żądania

Monitoruj nagłówek X-RateLimit-Remaining, aby wiedzieć, ile żądań Ci pozostało.

2.

Zaimplementuj wykładnicze wycofywanie

Po otrzymaniu odpowiedzi 429, czekaj i ponawiaj próby z rosnącymi opóźnieniami, zamiast bombardować API.

3.

Cachuj wyniki

Jeśli wielokrotnie przetwarzasz te same pliki, cachuj wyniki lokalnie, aby uniknąć niepotrzebnych wywołań API.

4.

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

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");
}