Resumen

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”.

# settings.py
REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_CLASSES': [
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle',
    ],
    'DEFAULT_THROTTLE_RATES': {
        'anon': '5/minute',
        'user': '100/minute',
    }
}

Claves prácticas: - 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.

      Throttling en Django Rest para evitar ataques DOS