Implementa throttling en Django REST para mantener tu API estable y segura. Con límites de requests por tipo de usuario, reduces carga en la base de datos y mitigas intentos de DoS. Aquí verás cómo configurarlo, probarlo y adaptarlo sin complicaciones.
¿Qué es el throttling y por qué protege tu API?
El throttling o limitación de solicitudes impone cuántos requests puede hacer un usuario en un período. Así, controlas el tráfico por usuario anónimo o logueado y evitas saturación de recursos.
Limita por segundos, minutos, horas o día según la necesidad.
Diferencia entre usuario anónimo y usuario autenticado.
Evita picos: si un cliente o script hace demasiados requests, se detiene temporalmente.
En la práctica, se definió un límite de cinco por minuto para anónimos para probar el comportamiento. Al excederlo, el cliente recibe un aviso tipo “este request ya no es permitido” y en la terminal aparece “too many requests”. Esto previene que la base de datos consuma mucha CPU y que se abran más conexiones de las necesarias.
Además, el control se realiza por IP y sesión. Internamente, la clase anónima intenta crear una llave en caché cuando el usuario no está logueado; para usuarios autenticados, se usa el ID del usuario para generar la llave y contar cada request. Así se identifica de forma consistente a quién aplicar el límite.
¿Cómo configurar límites de solicitudes en settings de Django REST?
Primero, agrega las clases de throttling y define las tasas en el diccionario de configuración de Django REST. Para el ejemplo: anónimos con 5/minute y logueados con 100/minute. Nota: el periodo se escribe como “minute”.
Usa minute para minutos; también puedes usar second, hour o day.
Ajusta los valores según tipo de usuario y carga esperada.
Mantén las tasas en un solo lugar para revisarlas y auditarlas con facilidad.
¿Cómo probar, diagnosticar y personalizar el throttling?
Tras guardar la configuración, ejecuta el servidor de desarrollo con runserver. Luego, cierra sesión para probar la regla de anónimo: 5/minute. Realiza 5 consultas a un endpoint (por ejemplo, la lista de pacientes). En el quinto intento, verás el error que bloquea temporalmente nuevos requests. Pasados unos segundos, vuelve a permitir el acceso; si intentas de nuevo cinco veces, recibirás un mensaje indicando cuántos segundos debes esperar.
Observa además:
En la terminal aparecerá “too many requests”.
La clave de conteo para anónimos se genera en la cache con base en IP y sesión.
Para usuarios autenticados, se usa el ID para construir la llave y llevar el conteo.
Personalización útil:
Crea una clase propia si necesitas reglas especiales por rol o cliente.
Ejemplo típico: un usuario VIP o un servidor de confianza con un límite más alto, incluso “un millón por día”.
Define esa clase personalizada en la misma configuración para aplicar su tasa específica.
Buenas prácticas:
Empieza con límites estrictos y relájalos según métricas reales.
Monitorea errores y latencias para ajustar las tasas.
Protege endpoints críticos con límites más conservadores.
¿Tienes un caso con usuarios VIP o picos de tráfico puntuales? Cuéntame cómo ajustarías las tasas y qué métricas usarías para decidirlo.
Si llegaste hasta acá estás listo para crear una API con Django Rest. Si tienes dudas no dudes en dejarlas en el sistema de comentarios o contactarme directamente.
🟢 Qué es el Throttling
El throttling es una técnica utilizada en aplicaciones web, especialmente en APIs, para controlar la cantidad de solicitudes que un cliente puede hacer en un período de tiempo específico. Su objetivo principal es prevenir abusos, proteger recursos y garantizar un rendimiento óptimo.
De manera visual, un throttle consiste en bloquear la invocación de funciones hasta que se complete un tiempo determinado o una acción en específico. De esta manera reducimos el número de peticiones a la API. Lo que conlleva reducir costos y prevenir ataques.
Un concepto similar es Debounce. Pero te lo dejo de tarea.
Espero haberte ayudado. ¡Nunca pares de aprender! 🚀🚀
ty for resumen!
El "debouncing" es una técnica que se utiliza para evitar la ejecución excesiva de funciones en respuesta a eventos que se producen con frecuencia, como la actualización del estado en un componente.
Fundamental para evitar el ataque DoS y evitar lo que sucede en el primer capítulo de "Mr. Robot". Acá dejo una explicación un poco más elaborada:
¿Por qué es importante el Throttling?
El throttling se utiliza para evitar que un solo cliente (ya sea intencional o accidentalmente) consuma recursos de la API de manera excesiva o perjudique a otros usuarios. También es útil en escenarios donde se necesita aplicar políticas de uso, como limitar a un cliente a realizar solo un número determinado de solicitudes por minuto o día.
Tipos de Throttling en DRF
DRF ofrece varios tipos de throttling que puedes aplicar a nivel global o por vista:
AnonRateThrottle:
Limita la cantidad de solicitudes que pueden hacer los usuarios no autenticados.
UserRateThrottle:
Limita la cantidad de solicitudes que pueden hacer los usuarios autenticados.
ScopedRateThrottle:
Aplica una limitación de solicitudes a un conjunto de vistas específicas usando un nombre de "alcance" (scope). Es útil para diferentes partes de la API que requieren diferentes limitaciones de uso.
Custom Throttle:
Puedes crear tus propios throttles personalizados si necesitas lógica específica para gestionar la tasa de solicitudes.
Genial curso. He aprendido mucho en estas clases.
Les dejo el link de mi repo,
Les dejo aquí un simulador interactivo que explica las diferencias entre Throttle y Debounce, por si quieren ver las diferencias entre estos dos patrones de una manera más visual.
La entrada está en Español.
termine el curso del path de programacion con Python despiues ise fundamentos de sql y despues postgresql vine para este Path he ise django y DRF.. listo despues ire por el de unitest y Docker pero ya llego asta aqui voy a concentrarme un mes o dos a hacer uno o dos proyectos de para mi portafolio talvez un backend de redes sociales y uno de ecommer. volvere a estos cursos a repasar algo cuando me atore en alguno de esos Proyectos
JarolGabriel/medical-App
Gracias profe, ha sido un curso excelente!
Esta muy bueno, tenia mucha curiosidad sobre como convertir una app de django en una api, si tuvieran que comparar django rest framework con fastapi, ¿cual elegirían? siento que fastapi es mas cómodo para hacer las apis, pero django también es cómodo para la parte frontend.