Límites de uso
Maneja límites de tasa y concurrencia sin duplicar operaciones.
Ecomiq no aplica una cuota única a todas las operaciones. El límite depende de la API y de la política asociada al endpoint.
Qué puede producir 429
| Tipo de límite | Qué controla |
|---|---|
| Global | El volumen general de peticiones de un cliente o dirección. |
| Por endpoint | Flujos sensibles como autenticación, escrituras, analítica o callbacks. |
| Concurrencia | Cuántas operaciones costosas pueden ejecutarse al mismo tiempo. |
Una respuesta 429 Too Many Requests puede venir de cualquiera de estas capas.
No deduzcas una cifra universal desde un solo endpoint o entorno.
Cuando la respuesta incluya Retry-After, úsalo como espera mínima. Si no
existe, aplica espera exponencial con variación aleatoria.
Reintento seguro
async function retryAfter429(
request: () => Promise<Response>,
canReplay: boolean,
) {
for (let attempt = 0; attempt < 4; attempt += 1) {
const response = await request();
if (response.status !== 429 || !canReplay) return response;
const retryAfter = response.headers.get("retry-after");
const fallback = Math.min(30_000, 500 * 2 ** attempt);
let delay = fallback + Math.random() * 250;
if (retryAfter !== null) {
const seconds = Number(retryAfter);
if (Number.isFinite(seconds)) {
delay = seconds * 1000;
}
}
await new Promise((resolve) => setTimeout(resolve, delay));
}
throw new Error("Rate limit persisted after 4 attempts");
}canReplay debe venir del contrato de la operación. Actívalo solo para una
lectura, una operación idempotente o una escritura protegida por una clave de
idempotencia.
Limita también el número total de intentos. Si varios workers comparten credenciales, coordina la espera para que no vuelvan a enviar la misma ráfaga.
Importaciones
Una importación aceptada se procesa de forma asíncrona. Conserva su identificador y consulta el endpoint de estado; no vuelvas a enviar el archivo para comprobar el avance.
El envío o la validación de una importación sí puede devolver 429, incluido un
límite de concurrencia. Espera y vuelve a intentarlo solo si confirmaste que la
operación no fue aceptada.
Reduce la presión
- Usa el mayor tamaño de página que permita ese endpoint.
- Limita la concurrencia de tu cliente; una cola local suele ser suficiente.
- Cachea datos que cambian poco, como categorías o zonas.
- Usa webhooks cuando exista el evento que necesitas.
- Evita sondeos con intervalos fijos; aumenta el intervalo cuando no hay cambios.
Los valores por defecto y los encabezados publicados pueden variar entre APIs. Diseña el cliente alrededor de la respuesta real, no de una cuota supuestamente común.