DocsLimite de utilizare

Limite de rata

Intelege limitele de rata pentru FreeFileTools API si cum sa le gestionezi in aplicatia ta.

Limitele planului gratuit

LimitaValoare
Cereri pe ora50
Dimensiunea maxima a fisierului per cerere25 MB
Fereastra de limita a rateiRolling 1 hour

Limita de rata se aplica per API Key. Fiecare cheie primeste propriul contor independent care se reseteaza pe baza orei curente.

Cand limitele de rata sunt depasite

Cand depasesti limita de rata, API-ul returneaza un raspuns 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
}

Campul retryAfter indica numarul de secunde de asteptat inainte de a face o alta cerere.

Antete de raspuns pentru limita de rata

Fiecare raspuns API include antete pentru a te ajuta sa urmaresti utilizarea limitei de rata:

AntetDescriere
X-RateLimit-LimitNumarul maxim de cereri permise pe ora (50)
X-RateLimit-RemainingNumarul de cereri ramase in fereastra curenta
Retry-AfterSecunde de asteptat inainte de a reincerca (doar la raspunsurile 429)

Exemplu de antete de raspuns

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

Sfaturi pentru a ramane in limite

1.

Verifica cererile ramase

Monitorizeaza antetul X-RateLimit-Remaining pentru a sti cate cereri mai ai.

2.

Implementeaza backoff exponential

Cand primesti un raspuns 429, asteapta si reincearca cu intarzieri crescatoare in loc sa bombardezi API-ul.

3.

Pune rezultatele in cache

Daca procesezi aceleasi fisiere in mod repetat, pune rezultatele in cache local pentru a evita apeluri API inutile.

4.

Grupeaza inteligent

Pentru procesarea in lot, distribuie cererile tale in timp in loc sa le trimiti pe toate deodata.

Exemplu: Gestionarea limitelor de rata in 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");
}