Limitación y regulación de solicitudes
Implemente la limitación y regulación de solicitudes para proteger su API frente a abusos y garantizar un uso equitativo entre los clientes.
Limitación y regulación de solicitudes es una lección gratuita de NestJS Enterprise Backend APIs en CoddyKit. Esta es la lección 1 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de NestJS Enterprise Backend APIs, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de NestJS Enterprise Backend APIs incluye 3 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
What is Rate Limiting?
Imagine a popular API. Without limits, a single user or malicious bot could flood it with requests, slowing it down for everyone or even crashing it.
Rate limiting is a technique to control the number of requests a client can make to a server within a specific time window. It's like a bouncer at a club, ensuring fair entry for all.
Protecting Your API
Rate limiting is vital for several reasons:
- Prevent Abuse: Stops bots and malicious users from overwhelming your API.
- Ensure Fair Usage: Guarantees that all users get a reasonable share of API resources.
- DDoS Protection: A basic layer of defense against distributed denial-of-service attacks.
- Cost Management: For cloud-based services, too many requests can lead to higher bills.
Rate Limiting in Action
Let's see a simple example of how a rate limiter might work behind the scenes. This script tracks requests from different "IP addresses" and allows only a certain number within a time window.
const requestCounts = new Map<string, { count: number; resetTime: number }>();
const LIMIT = 3; // Max 3 requests
const WINDOW_MS = 5000; // per 5 seconds
function checkRateLimit(ip: string): boolean {
const now = Date.now();
let entry = requestCounts.get(ip);
if (!entry || now > entry.resetTime) {
entry = { count: 1, resetTime: now + WINDOW_MS };
requestCounts.set(ip, entry);
return true; // Request allowed
}
if (entry.count < LIMIT) {
entry.count++;
requestCounts.set(ip, entry);
return true; // Request allowed
}
return false; // Request denied
}
// Simulate requests for IP "192.168.1.1"
console.log("Req 1 (IP A):", checkRateLimit("192.168.1.1"));
console.log("Req 2 (IP A):", checkRateLimit("192.168.1.1"));
console.log("Req 3 (IP A):", checkRateLimit("192.168.1.1"));
console.log("Req 4 (IP A):", checkRateLimit("192.168.1.1")); // Denied
console.log("Req 1 (IP B):", checkRateLimit("192.168.1.2"));What is Throttling?
While often used interchangeably, throttling has a subtle difference. Rate limiting is a hard cap: once you hit the limit, you're blocked.
Throttling, however, aims to smooth out the request rate, often by delaying requests or allowing a slower, sustained rate rather than blocking entirely. It's more about resource management and preventing a system from becoming overloaded.
Introducing NestJS Throttler
NestJS provides a robust solution for both rate limiting and throttling through the @nestjs/throttler package. It's built on top of the express-rate-limit or fastify-rate-limit packages, offering a declarative way to protect your endpoints.
The module uses a guard to intercept requests and apply rules before they reach your controller logic.
Global Throttling Configuration
First, install the package. Then, integrate ThrottlerModule into your root module (AppModule) and apply the ThrottlerGuard globally.
// 1. Install package
// npm install @nestjs/throttler
// 2. src/app.module.ts
import { Module } from '@nestjs/common';
import { ThrottlerModule, ThrottlerGuard } from '@nestjs/throttler';
import { APP_GUARD } from '@nestjs/core'; // For global guard
@Module({
imports: [
ThrottlerModule.forRoot([{
ttl: 60000, // Time to live (1 minute)
limit: 10 // Max 10 requests
}]),
],
providers: [
{
provide: APP_GUARD,
useClass: ThrottlerGuard,
},
],
})
export class AppModule {}Overriding Limits per Route
Sometimes, you need different limits for specific endpoints. For example, a login route might have a stricter limit than a public data endpoint. You can override the global settings using the @Throttle() decorator.
// src/app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { Throttle } from '@nestjs/throttler';
@Controller('posts')
export class PostsController {
@Get()
findAll(): string {
return 'This is a public list of posts.';
}
@Throttle({ default: { limit: 3, ttl: 60000 } }) // 3 req/min
@Get('protected')
findProtected(): string {
return 'This is a protected list of posts.';
}
@Throttle({ default: { limit: 1, ttl: 5000 } }) // 1 req/5s
@Get('critical')
findCritical(): string {
return 'Accessing critical data.';
}
}Skipping Throttling
There might be routes you want to completely exempt from any throttling rules, such as health check endpoints or webhook receivers that expect high traffic. Use the @SkipThrottle() decorator for this.
// src/status.controller.ts
import { Controller, Get } from '@nestjs/common';
import { SkipThrottle } from '@nestjs/throttler';
@Controller('status')
export class StatusController {
@SkipThrottle() // This route will ignore all throttling
@Get('health')
getHealth(): string {
return 'API is healthy!';
}
@Get('metrics')
getMetrics(): string {
return 'Application metrics data.'; // This route is throttled
}
}Beyond IP Address
By default, the NestJS Throttler module identifies clients by their IP address. However, for authenticated users, you might want to apply limits based on their user ID, rather than their IP.
This requires extending the ThrottlerGuard and overriding the getRequestResponse method to extract a different key (e.g., from a JWT token). This ensures that a single user cannot bypass limits by changing IPs.
Understanding Throttling
You've learned about rate limiting and throttling. Let's test your understanding!
Summary of Protection
Great job! In this lesson, you learned about the importance of rate limiting and throttling to protect your NestJS APIs. You explored how to set up the @nestjs/throttler module, configure global limits, apply route-specific rules, and even skip throttling for certain endpoints.
Implementing these techniques is a crucial step in building robust and secure backend services. Keep exploring how to fine-tune these limits and integrate them with other security measures!
Preguntas frecuentes
¿La lección «Limitación y regulación de solicitudes» es gratis?
Sí — el texto completo de «Limitación y regulación de solicitudes» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de NestJS Enterprise Backend APIs, actualiza a CoddyKit PRO. El curso de NestJS Enterprise Backend APIs incluye 3 lecciones en total.
¿Qué aprenderé en «Limitación y regulación de solicitudes»?
Implemente la limitación y regulación de solicitudes para proteger su API frente a abusos y garantizar un uso equitativo entre los clientes. Practicas NestJS Enterprise Backend APIs con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar NestJS Enterprise Backend APIs?
No se requiere experiencia previa. NestJS Enterprise Backend APIs en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 3.
¿Cuánto tiempo toma la lección «Limitación y regulación de solicitudes»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de NestJS Enterprise Backend APIs?
Sí. Cada lección de NestJS Enterprise Backend APIs incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Limitación y regulación de solicitudes
- Registro de eventos con Winston/Pino
- Monitorización con Prometheus