Limites de debit
Comprenez les limites de debit de l'API FreeFileTools et comment les gerer dans votre application.
Limites du plan gratuit
| Limite | Valeur |
|---|---|
| Requetes par heure | 50 |
| Taille maximale de fichier par requete | 25 MB |
| Fenetre de limite de debit | Rolling 1 hour |
La limite de debit est appliquee par API key. Chaque cle dispose de son propre compteur independant qui se reinitialise sur une base horaire glissante.
Lorsque les limites de debit sont depassees
Lorsque vous depassez la limite de debit, l'API renvoie une reponse 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
}Le champ retryAfter indique le nombre de secondes a attendre avant d'effectuer une autre requete.
En-tetes de reponse de limite de debit
Chaque reponse API inclut des en-tetes pour vous aider a suivre votre utilisation de la limite de debit :
| En-tete | Description |
|---|---|
X-RateLimit-Limit | Nombre maximal de requetes autorisees par heure (50) |
X-RateLimit-Remaining | Nombre de requetes restantes dans la fenetre actuelle |
Retry-After | Secondes a attendre avant de reessayer (uniquement sur les reponses 429) |
Exemple d'en-tetes de reponse
HTTP/1.1 200 OK
Content-Type: image/jpeg
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 42Conseils pour rester dans les limites
Verifiez les requetes restantes
Surveillez l'en-tete X-RateLimit-Remaining pour savoir combien de requetes il vous reste.
Implementez un backoff exponentiel
Lorsque vous recevez une reponse 429, attendez et reessayez avec des delais croissants au lieu de bombarder l'API.
Mettez les resultats en cache
Si vous traitez les memes fichiers a plusieurs reprises, mettez les resultats en cache localement pour eviter les appels API inutiles.
Regroupez intelligemment
Pour le traitement par lots, espacez vos requetes dans le temps au lieu de les envoyer toutes en meme temps.
Exemple : Gestion des limites de debit en 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");
}