Limity pozadavku
Pochopte limity pozadavku pro FreeFileTools API a jak je zvladat ve sve aplikaci.
Limity bezplatne urovne
| Limit | Hodnota |
|---|---|
| Pozadavky za hodinu | 50 |
| Max velikost souboru na pozadavek | 25 MB |
| Okno limitu pozadavku | Rolling 1 hour |
Limit pozadavku se uplatnuje na API Key. Kazdy klic ma svuj vlastni nezavisly citac, ktery se resetuje na klouzave hodinove bazi.
Kdy jsou limity pozadavku prekroceny
Kdyz prekrocite limit pozadavku, API vrati odpoved 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 udava pocet sekund, po kterych muzete provest dalsi pozadavek.
Hlavicky odpovedi limitu pozadavku
Kazda odpoved API obsahuje hlavicky, ktere vam pomohou sledovat vyuziti limitu pozadavku:
| Hlavicka | Popis |
|---|---|
X-RateLimit-Limit | Maximalni pocet povolenych pozadavku za hodinu (50) |
X-RateLimit-Remaining | Pocet zbyvajicich pozadavku v aktualnim okne |
Retry-After | Sekundy cekani pred dalsim pokusem (pouze u odpovedi 429) |
Priklad hlavicek odpovedi
HTTP/1.1 200 OK
Content-Type: image/jpeg
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 42Tipy pro dodrzovani limitu
Kontrolujte zbyvajici pozadavky
Sledujte hlavicku X-RateLimit-Remaining, abyste vedeli, kolik pozadavku vam zbyva.
Implementujte exponencialni ustup
Kdyz obdrzite odpoved 429, pockejte a zkuste to znovu s rostoucimi prodlevami, misto aby jste API zaplavovali.
Ukladejte vysledky do cache
Pokud zpracovavate stejne soubory opakovane, ukladejte vysledky lokalne do cache, abyste se vyhnuli zbytecnym API pozadavkum.
Davkujte chytre
Pro davkove zpracovani rozlozte sve pozadavky v case, misto aby jste je vsechny odeslali najednou.
Priklad: Zpracovani limitu pozadavku v JavaScriptu
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");
}