Hastighetsgranser
Forsta hastighetsgranserna for FreeFileTools API och hur du hanterar dem i din applikation.
Gratisniva-granser
| Grans | Varde |
|---|---|
| Forfragninar per timme | 50 |
| Max filstorlek per forfragen | 25 MB |
| Hastighetsgransfonster | Rolling 1 hour |
Hastighetsgransern tillampas per API Key. Varje nyckel far sin egen oberoende raknare som aterstalls pa rullande timbasis.
Nar hastighetsgranser overskrids
Nar du overskrider hastighetgransen returnerar API:et ett 429 Too Many Requests-svar:
{
"error": "Rate limit exceeded",
"message": "You have exceeded the rate limit of 50 requests per hour. Please try again later.",
"retryAfter": 1742
}Faltet retryAfter anger antalet sekunder att vanta innan du gor en ny forfragen.
Svarsrubriker for hastighetsgrans
Varje API-svar inkluderar rubriker for att hjalpa dig spara din hastighetsgransanvandning:
| Rubrik | Beskrivning |
|---|---|
X-RateLimit-Limit | Maximalt antal tillatna forfragninar per timme (50) |
X-RateLimit-Remaining | Antal aterstaende forfragninar i aktuellt fonster |
Retry-After | Sekunder att vanta innan nytt forsok (endast vid 429-svar) |
Exempel pa svarsrubriker
HTTP/1.1 200 OK
Content-Type: image/jpeg
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 42Tips for att halla sig inom granserna
Kontrollera aterstaende forfragninar
Overvaka X-RateLimit-Remaining-huvudet for att veta hur manga forfragninar du har kvar.
Implementera exponentiell avvakning
Nar du far ett 429-svar, vanta och forsok igen med okande fordrojningar istallet for att bombardera API:et.
Cacha resultat
Om du bearbetar samma filer upprepade ganger, cacha resultaten lokalt for att undvika onodiga API-anrop.
Batcha klokt
For batchbearbetning, fordela dina forfragninar over tid istallet for att skicka alla pa en gang.
Exempel: Hantera hastighetsgranser i 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");
}