Limites de velocidad
Entiende los limites de velocidad de la API de FreeFileTools y como manejarlos en tu aplicacion.
Limites del plan gratuito
| Limite | Valor |
|---|---|
| Solicitudes por hora | 50 |
| Tamano maximo de archivo por solicitud | 25 MB |
| Ventana de limite de velocidad | Rolling 1 hour |
El limite de velocidad se aplica por API key. Cada clave tiene su propio contador independiente que se reinicia en una base horaria continua.
Cuando se exceden los limites de velocidad
Cuando excedes el limite de velocidad, la API devuelve una respuesta 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
}El campo retryAfter indica el numero de segundos a esperar antes de realizar otra solicitud.
Encabezados de respuesta de limite de velocidad
Cada respuesta de la API incluye encabezados para ayudarte a rastrear tu uso del limite de velocidad:
| Encabezado | Descripcion |
|---|---|
X-RateLimit-Limit | Numero maximo de solicitudes permitidas por hora (50) |
X-RateLimit-Remaining | Numero de solicitudes restantes en la ventana actual |
Retry-After | Segundos a esperar antes de reintentar (solo en respuestas 429) |
Ejemplo de encabezados de respuesta
HTTP/1.1 200 OK
Content-Type: image/jpeg
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 42Consejos para mantenerse dentro de los limites
Verifica las solicitudes restantes
Monitorea el encabezado X-RateLimit-Remaining para saber cuantas solicitudes te quedan.
Implementa retroceso exponencial
Cuando recibas una respuesta 429, espera y reintenta con retrasos crecientes en lugar de bombardear la API.
Almacena en cache los resultados
Si estas procesando los mismos archivos repetidamente, almacena los resultados en cache localmente para evitar llamadas innecesarias a la API.
Agrupa sabiamente
Para procesamiento por lotes, distribuye tus solicitudes a lo largo del tiempo en lugar de enviarlas todas a la vez.
Ejemplo: Manejo de limites de velocidad 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");
}