Al interactuar con páginas web y APIs, los servidores devuelven códigos de estado para informar si la petición se ha podido procesar con éxito o no.
Uno de estos códigos es el error 429 o Too Many Requests, y en este artículo te explicamos qué és, cuándo aparece y posibles maneras de evitarlo.
Además, en el caso de que estés trabajando con una API, te daremos un recurso muy útil para testear el código HTTP 429 desde tus scripts.
¿Qué es el error HTTP 429?
Este error pertenece a los códigos de estado HTTP de la familia 4xx, que indican que problema se ha producido en el lado del cliente.
En concreto, el error 429 se genera cuando el servidor determina que se han hecho demasiadas peticiones en un determinado período de tiempo. A este concepto también se le conoce como rate limiting.
¿Qué causa el error HTTP 429?
Si estás recibiendo el error 429 como respuesta a una petición API, es posible que hayas enviado un volumen excesivo de llamadas en un breve espacio de tiempo.
También puede ser que tu IP o el token que estás usando para conectar con la API tenga un límite de peticiones por minuto, hora o día.
Esta restricción que imponen los servidores puede ser por varios motivos:
- Como seguridad para evitar que un usuario o un bot realice un ataque de denegación de servicio (DoS) o de fuerza bruta. Es decir, es una medida preventiva para que los clientes no abusen de los recursos del servidor.
- Como limitación de uso en una API de pago, cuando se ha alcanzado el límite de peticiones en el plan contratado en un período de tiempo.
- Como limitación de uso en una API gratuita, para evitar que los usuarios no sobrecarguen el servidor.
¿Cómo arreglar el error HTTP 429?
La única manera de solucionar el error 429 es esperar. El servidor te devolverá el código de estado 429 hasta que el período de tiempo que ha establecido para el rate limiting haya pasado.
En algunos casos la API te devolverá en la cabecera Retry-After
el tiempo que debes esperar, en segundos, antes de volver a hacer una petición. Por ejemplo:
HTTP/1.1 429 Too Many Requests
Content-Type: application/json; charset=utf-8
Retry-After: 3600
Por último, si te es posible contactar con el propietario de la API, puedes preguntarle si es posible aumentar el límite de peticiones o cambiar el plan para que te permita realizar más llamadas.
¿Cómo evitar el error HTTP 429?
Para evitar el error 429, lo más importante es conocer los límites de peticiones que tiene la API y en qué período de tiempo se aplican.
En base a esta información, programa tu aplicación para evitar sobrepasarlos, por ejemplo mediante un backoff o exponential backoff. Es decir, reintenta las peticiones en un intervalo de tiempo cada vez mayor, para no saturar el servidor.
¿Cómo probar el error HTTP 429?
Si estás trabajando con una API y necesitas reproducir un código de estado HTTP específico durante tus pruebas, puedes hacerlo a través de httpstatus.is. Es un servicio muy sencillo diseñado para ayudarte a comprobar cómo tu código gestiona diferentes respuestas de HTTP.
Para probar el código 429: Too Many Requests, simplemente haz una petición a httpstatus.is/429.
El servidor te devolverá una respuesta en formato JSON similar a esta:
HTTP/1.1 429 Too Many Requests
Content-Length: 62
Content-Type: application/json; charset=utf-8
x-powered-by: www.helloapi.co
{
"code": 429,
"description": "Too Many Requests",
"official": true
}
Referencias
- Official specification: 429 Too Many Requests.
- httpstatus.is on GitHub.