DEV Community

Jesus Gonzalez
Jesus Gonzalez

Posted on

Como limitar las peticiones a una API

Cuando se desarrolla una API es importante que en todo momento esté disponible para ser utilizada por los usuarios, pero la verdad es que cuando una API sale a producción siempre aparecen factores que alteran su estabilidad.

Uno de esos factores son los ataques DDoS, los cuales muchas veces son producidos por errores en aplicaciones que utilizan los servicios ofrecidos por la API o usuarios particulares, que realizan demasiadas solicitudes de información sobrecargando los recursos de los servidores (CPU, Discos Duros, Memoria).

Para estos casos es necesario agregarle algunas medidas de defensa a la API.
Una medida es aplicarle un limitante a las peticiones, el cual permite un número determinado de solicitudes que puedan realizar los usuarios a la API durante un rango específico de tiempo.

Esta limitante puede ser aplicada en varias formas a las solicitudes, dependiendo de lo que se desea lograr.

  • Usuario: Limitar la cantidad de solicitudes por token asignados a usuarios o por IP de dispositivos.
  • Geográficamente: Limitar solicitudes que provengan de regiones (países, estados, etc.) en particular.
  • Horario: Algunos servicios ofrecidos por la API solo pueden utilizarse por los usuarios en un horario específico.
  • Servidor: Disminuir las solicitudes de un servidor para otro servidor.

Existen varios algoritmos utilizados para implementar una limitante:

  1. Token Bucket
  2. Leaky Bucket
  3. Sliding Window

Para la implementación utilice la librería Tollbooth la cual usa el algoritmo Leaky Bucket para limitar las solicitudes.

Desarrolle un unico endpoint de una API devolverá un array de Usuarios en formato JSON. Ya teniendo la API funcional y testeada podemos pasar a la parte de integrar el limitante que permitirá como máximo 1 petición por segundo. Lo que quiere decir es que dentro de un tiempo de 1 segundo, solamente una petición podrá ser atendida por la API, las demás peticiones serán rechazadas y se devolverá una respuesta con el código HTTP 429 según la RFC 6585 lo define como “Too many Request” y un mensaje indicando el error que ocurrió.

Alt Text

Alt Text

Con el limitante podemos asegurar que la API nos entregara un flujo de datos sin sobrecargar el servidor y evitar costes adicionales por un aumento de consumo de recursos por proveedores de hosting que cobran por uso.
Para una mejor confiabilidad es recomendable también aplicar medidas de control en las aplicaciones del lado de los clientes.

Top comments (3)

Collapse
 
cescquintero profile image
Francisco Quintero 🇨🇴

Bacano esto 👍🏽

Collapse
 
oxavibes profile image
Stefano

"Al Peluche" :)

Collapse
 
gonzalezlrjesus profile image
Jesus Gonzalez

Gracias! Stefano