¿Qué es Rate Limiting & Throttling de API?

Actualizado: septiembre de 2026

Rate limiting es un control que limita cuántas solicitudes puede hacer un cliente por ventana de tiempo; throttling desacelera el exceso en vez de rechazarlo. Suma el tercer hermano — la cuota, una asignación por período de facturación — y tienes el vocabulario completo que la mayoría de las explicaciones difumina en una sola palabra. Juntos son lo que mantiene a las APIs justas, solventes y en línea.

Puntos clave

PreguntaRespuesta
Rate limitTope duro por ventana corta — el exceso recibe 429
ThrottleEl exceso se desacelera o se encola, no se rechaza
CuotaLa asignación de largo plazo — por día/mes, por plan
La voz del servidor429 + Retry-After + headers de rate limit
Los modales del clienteRespeta el Retry-After; backoff exponencial con jitter

Qué significan la respuesta 429 y los headers de rate limit

HTTP/1.1 429 Too Many Requests        ← RFC 6585
Retry-After: 30                       ← espera este tiempo (segundos o una fecha)
X-RateLimit-Limit: 1000               ← tu presupuesto en esta ventana
X-RateLimit-Remaining: 0              ← lo que queda
X-RateLimit-Reset: 1767024000         ← cuándo se recarga
RateLimit: "default";r=0;t=30         ← la forma estándar emergente del IETF

La mitad del contrato que le toca al cliente — el código que todo consumidor de SDK termina necesitando:

// JavaScript / Node.js — Back4app JS SDK
// The client half of rate limiting: back off, with jitter, then retry
async function withBackoff(fn, attempt = 0) {
  try {
    return await fn();
  } catch (e) {
    if (e.code !== 155 || attempt >= 4) throw e;   // 155: request limit hit
    const wait = 2 ** attempt * 500 + Math.random() * 200;
    await new Promise((r) => setTimeout(r, wait)); // exponential + jitter
    return withBackoff(fn, attempt + 1);
  }
}
const results = await withBackoff(() => query.find());

Token bucket vs. leaky bucket vs. ventana fija vs. ventana deslizante

AlgoritmoBurstsPrecisiónMemoriaVeredicto
Token bucketPermitidos, hasta el tamaño del bucketBuenaMínimaEl estándar para APIs — humanos en bursts, promedio sostenido
Leaky bucketSuavizados en un goteo constanteBuenaPequeñaShaping de tráfico — salida constante, latencia añadida
Ventana fijaBurst de frontera: 2× el límite en los bordesDébilMínimaSimple, y notoriamente burlable
Ventana deslizanteControladosLa mejorModestaEl compromiso de escala en el que aterriza la mayoría de las plataformas
Rate limiting con token bucketLos tokens recargan un bucket a una tasa constante; cada solicitud gasta un token, lo que permite bursts hasta el tamaño del bucket mientras se impone el promedio sostenido, y las solicitudes que llegan con el bucket vacío reciben un 429.

token disponible

bucket vacío

Recarga:
10 tokens/s

Bucket
capacidad 100

Solicitud

Permitida

429 + Retry-After

Los tokens recargan un bucket a una tasa constante; cada solicitud gasta un token, lo que permite bursts hasta el tamaño del bucket mientras se impone el promedio sostenido, y las solicitudes que llegan con el bucket vacío reciben un 429.

Una nota al pie distribuida que los diagramas omiten: con muchos servidores de API, el bucket debe vivir en algún lugar compartido — típicamente un store en memoria haciendo incrementos atómicos — y eliges entre precisión estricta (cada chequeo consulta el store) y velocidad (contadores locales, sincronización laxa). La mayoría de las plataformas acepta límites ligeramente laxos como el precio de la latencia; las cuotas contractuales reciben el tratamiento estricto.

Alcance: ¿a quién exactamente se limita?

Por IP frena avalanchas anónimas y fugas de absorción de DDoS, pero un NAT de oficina convierte a cientos de usuarios en una sola dirección. Por clave mapea límites a aplicaciones y planes de precios — el alcance que carga con el trabajo pesado. Por usuario evita que una cuenta monopolice la clave de una app compartida. Por endpoint pone un precio honesto a las operaciones caras — los endpoints de búsqueda y de export merecen presupuestos más ajustados que los health checks. Los sistemas de producción los combinan en capas; la pregunta compuesta siempre es “¿qué presupuesto gastó esta solicitud?”

Casos de uso comunes

  • Protección de APIs públicas — el caso canónico: presupuestos justos por clave, publicados en headers, aplicados en el borde.
  • Aplicación de tiers — planes gratuitos vs. de pago que difieren precisamente en cuota y margen de burst.
  • Defensa contra abuso y scraping — límites estrictos para anónimos, generosos para autenticados.
  • Control de costos en rutas caras — llamadas a LLM, exports, búsquedas: presupuestos por endpoint que reflejan el costo real.
  • Autodefensa del lado del cliente — backoff y coalescencia de solicitudes frente a los límites de otros, que tus integraciones deben respetar para no ser bloqueadas.

¿Rechazar o hacer throttling? Matriz de decisión

Rate limit (rechazar) cuando…Throttle (desacelerar/encolar) cuando…
Los clientes pueden reintentar con inteligenciaEl trabajo debe ocurrir tarde o temprano
Proteges capacidad interactivaSuavizas carga de batch y de segundo plano
El contrato es solicitudes por ventanaEl contrato es equidad en el servicio
El feedback rápido vale más que el éxito tardíoEl éxito tardío vale más que un error
El tráfico es anónimo o no confiableLos productores son tuyos, internos

Y la metarregla: elijas lo que elijas, publícalo — los límites en la documentación y en los headers convierten un muro frustrante en un contrato de ingeniería contra el cual los clientes pueden construir.

Limitaciones y trade-offs

  • Los límites son instrumentos toscos. Una solicitud no es una unidad de costo — una lectura barata y un export monstruoso gastan “1” cada uno. La limitación sensible al costo (puntos por operación) es el refinamiento, al precio de la complejidad.
  • La precisión distribuida cuesta latencia. Los contadores globales estrictos se serializan sobre un store compartido; los locales laxos admiten de más en los márgenes. Elige por garantía, no por moda.
  • Los 429 castigan al loop de reintentos inocente. Los clientes sin jitter se sincronizan en thundering herds; el diseño de tu limiter debe asumir al peor cliente, porque lo va a encontrar.
  • El throttling esconde la sobrecarga. Las solicitudes encoladas suavizan las gráficas mientras acumulan backlog invisible; las colas necesitan topes y políticas de descarte, o se convierten en retrasos de outage.
  • Los límites son decisiones de producto vestidas de ops. Presupuestos, tiers y márgenes de burst moldean la experiencia de usuario y los ingresos — defínelos con la página de precios abierta, no solo con el dashboard.

Rate limiting en Back4app

Back4app es una plataforma open-source de Backend as a Service (BaaS) que combina base de datos gestionada, APIs REST y GraphQL generadas automáticamente, autenticación, almacenamiento de archivos y funciones serverless con Cloud Code. La protección es un valor por defecto de la plataforma, no un proyecto tuyo: los límites de solicitudes se aplican en el borde por app y por plan, las operaciones caras pueden quedar detrás de funciones Cloud Code con sus propios chequeos, y los clientes reciben una semántica 429 limpia — que el patrón de backoff del lado del SDK, en las pestañas de código de arriba, convierte en comportamiento resiliente en vez de pantallas rotas. Tú ajustas políticas; no construyes el limiter.

Preguntas frecuentes

¿Qué es el rate limiting de API?

Es un control que limita cuántas solicitudes puede hacer un cliente dentro de una ventana de tiempo — digamos, mil por hora por clave. Las solicitudes que superan el tope se rechazan, clásicamente con HTTP 429 Too Many Requests. Protege el servicio contra sobrecarga y abuso, evita que un cliente pesado degrade la experiencia de los demás y hace posible planificar la capacidad.

¿Cuál es la diferencia entre rate limiting, throttling y cuota?

Tres herramientas que suelen difuminarse en una sola palabra. El rate limiting rechaza el exceso de solicitudes de inmediato. El throttling las desacelera o las encola en su lugar — la solicitud termina completándose, solo que más tarde. La cuota es la asignación de largo plazo: solicitudes por día o por mes, atada a un plan o a una factura. Las ventanas cortas protegen la infraestructura; las cuotas definen el acuerdo comercial; el throttling suaviza los bordes.

¿Qué significa el error 429 y cómo lo soluciono?

Superaste las solicitudes permitidas en la ventana actual. La solución es disciplina del lado del cliente: lee el header Retry-After si está presente y espera ese tiempo; si no, reintenta con backoff exponencial más jitter. La solución equivocada — reintentos ciegos e inmediatos — empeora la situación para ti y para todos los demás, que es exactamente lo que el backoff existe para evitar.

¿Cómo funciona el algoritmo token bucket?

Un bucket guarda tokens que se recargan a una tasa constante; cada solicitud gasta uno. Un bucket lleno deja pasar un burst — el tamaño del bucket es el margen de burst — mientras la tasa de recarga impone el promedio sostenido. Esa forma amigable con los bursts es la razón de que el token bucket sea el algoritmo por defecto para APIs orientadas a usuarios.

¿Por qué es problemático un rate limiter de ventana fija?

Por el burst de frontera: con un límite de 100 por minuto, un cliente puede enviar 100 solicitudes a las 11:59:59 y 100 más a las 12:00:01 — 200 en dos segundos, todo dentro de la regla. Los algoritmos de ventana deslizante ponderan la ventana anterior para cerrar la brecha, a cambio de un poco más de contabilidad. Es la razón clásica por la que "solicitudes por minuto" necesita una definición de minuto.

¿Cuáles son los headers de rate limit?

Primero la convención: X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset le dicen al cliente su presupuesto, lo que queda y cuándo se renueva — popularizados por los grandes proveedores de API. La estandarización está llegando vía los headers RateLimit y RateLimit-Policy del IETF. De un modo u otro, publicar los límites en headers es lo que convierte el rate limiting de un muro en un contrato.

¿Qué es el backoff exponencial con jitter?

El reintento educado: espera 1 s, luego 2 s, 4 s, 8 s tras fallos sucesivos — y suma una porción aleatoria (jitter) a cada espera. El jitter importa más de lo que parece: sin él, todos los clientes que fallaron juntos reintentan juntos, martillando al servicio en recuperación en oleadas sincronizadas. La aleatoriedad rompe el thundering herd.

¿Los límites deberían ser por IP, por clave de API o por usuario?

En capas, porque cada alcance falla por sí solo: por IP frena las avalanchas anónimas, pero castiga a las oficinas detrás de una sola dirección; por clave mapea límites a aplicaciones y planes; por usuario evita que una cuenta monopolice una app compartida; por endpoint protege específicamente las operaciones caras. Los sistemas de producción suelen combinar al menos límites por clave y por endpoint.

Términos relacionados

Compara con

Lecturas recomendadas

¿Listo para construir tu backend?

Empieza tu proyecto en Back4app en minutos — base de datos, autenticación, APIs y Cloud Code incluidos. Sin tarjeta de crédito.

Escrito y revisado por Back4app Engineering, Back4app Engineering · Publicado el 2026-09-03