Limitación de Tasa en TypeScript: guía completa sobre bibliotecas e implementación
\n\nLa limitación de tasa (rate limiting) es un mecanismo de control de tráfico que previene la sobrecarga del servidor, protege contra ataques DDoS y garantiza una distribución uniforme de los recursos. En TypeScript, gracias al tipado estricto y la compatibilidad con asincronía, la implementación de la limitación de tasa se vuelve especialmente conveniente. En este artículo, analizaremos bibliotecas populares, estrategias y ejemplos de código para TypeScript.
\n\n¿Por qué es necesaria la Limitación de Tasa?
\n- \n
- Protección de API — limitar el número de solicitudes de un solo cliente (por IP, token o ID). \n
- Prevención de abusos — bloquear bots o scripts que generan una carga excesiva. \n
- Distribución de recursos — uso justo del backend entre los usuarios. \n
- Cumplimiento de límites de servicios externos — control de solicitudes a APIs de terceros (por ejemplo, OpenAI o GitHub). \n
Bibliotecas populares para Limitación de Tasa en TypeScript
\n\n1. express-rate-limit
\nLa biblioteca más popular para Express.js. Funciona como middleware, compatible con TypeScript de forma nativa. Permite establecer un límite por tiempo y manejadores personalizados para excederlo.
\nInstalación:
\nnpm install express-rate-limit\nnpm install -D @types/express-rate-limit\nEjemplo de uso:
\nimport express from 'express';\nimport rateLimit from 'express-rate-limit';\n\nconst app = express();\n\nconst limiter = rateLimit({\n windowMs: 15 * 60 * 1000, // 15 minutos\n max: 100, // máximo 100 solicitudes por ventana\n message: 'Demasiadas solicitudes, intente más tarde.',\n standardHeaders: true,\n legacyHeaders: false,\n});\n\napp.use('/api', limiter); // Aplicar a /api/*\n\napp.get('/api/data', (req, res) => {\n res.json({ message: 'Respuesta exitosa' });\n});\n\napp.listen(3000);\nCaracterísticas:
\n- \n
- Soporte integrado para TypeScript (tipos para
RequestyResponse). \n - Configuración flexible: se puede definir una clave (por IP, userId, token). \n
- Almacenamiento de estado en memoria (por defecto) o mediante Redis. \n
2. bottleneck
\nBiblioteca para limitación de tasa del lado del cliente — ideal cuando se necesita controlar las solicitudes salientes (por ejemplo, a una API externa). Funciona basándose en colas y retrasos.
\nInstalación:
\nnpm install bottleneck\nEjemplo con TypeScript:
\nimport Bottleneck from 'bottleneck';\n\nconst limiter = new Bottleneck({\n minTime: 200, // mínimo 200 ms entre solicitudes\n maxConcurrent: 5, // máximo 5 solicitudes concurrentes\n reservoir: 100, // límite total por período\n reservoirRefreshAmount: 100,\n reservoirRefreshInterval: 60 * 1000, // cada 60 segundos\n});\n\nasync function fetchData(id: number): Promise<string> {\n const response = await fetch(`https://api.example.com/data/${id}`);\n return response.text();\n}\n\n// Envolver la función con limitación\nconst limitedFetch = limiter.wrap(fetchData);\n\n// Uso\nasync function main() {\n const results = await Promise.all([\n limitedFetch(1),\n limitedFetch(2),\n limitedFetch(3),\n ]);\n console.log(results);\n}\nVentajas:
\n- \n
- Compatible con tipos para la función envuelta. \n
- Estrategias flexibles:
minTime,maxConcurrent,reservoir. \n - Funciona tanto en Node.js como en el navegador. \n
3. p-limit
\nBiblioteca ligera para limitar operaciones asíncronas paralelas. Útil cuando se necesita controlar la cantidad de promesas ejecutándose simultáneamente.
\nInstalación:
\nnpm install p- También en la biblioteca
Monitoreo de aplicaciones Kotlin: biblioteca Ktor Metrics y Micrometer
Geolocalización y mapas en PHP: bibliotecas, API y ejemplos de código
MPAndroidChart en Kotlin: guía completa con ejemplos
Geolocalización y mapas en Swift para iOS/macOS: guía completa