API Rate Limiter
Project Description
API Rate Limiter is a powerful guard for NestJS that restricts the number of requests a client can make within a specific time window. It utilizes Redis as an in-memory store for efficient and scalable request tracking.
Tech Stack
- NestJS: Backend framework for building efficient, reliable and scalable server-side applications
- Redis: High-performance in-memory data store for tracking request counts
Installation
npm install @api-guard/trafix
Usage
Configuration
Configure the TrafixModule in your app.module.ts
:
import { Module } from '@nestjs/common';
import { TrafixModule } from '@api-guard/trafix';
import { ConfigModule, ConfigService } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot(),
TrafixModule.forRootAsync({
redis: {
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (configService: ConfigService) => ({
type: 'single',
url: configService.get<string>('REDIS_URL'),
options: {
password: configService.get<string>('REDIS_PASSWORD'),
},
}),
},
config: {
maxRequests: 10,
windowMs: 60000, // 60 seconds
message: 'Too many requests, please try again later.',
statusCode: 429,
ipHeader: 'x-real-ip', // Header to extract IP address
responseHeaders: ['X-RateLimit-Limit', 'X-RateLimit-Remaining'],
},
}),
],
})
export class AppModule {}
Configuration Options
redis
: Redis connection configurationurl
: Redis server URLoptions.password
: Redis server password (if required)
config
: Rate limiting configurationmaxRequests
: Maximum number of requests allowed in the time windowwindowMs
: Time window in millisecondsmessage
: Custom error message for rate limit exceeded (optional)statusCode
: HTTP status code for rate limit exceeded (optional)ipHeader
: Custom header to extract client IP address (optional)responseHeaders
: Custom headers to include in the response (optional)
Applying the Guard
Use the TrafixGuard
in your controllers:
import { Controller, Get, UseGuards } from '@nestjs/common';
import { TrafixGuard } from '@api-guard/trafix';
@Controller('app')
export class AppController {
@UseGuards(TrafixGuard)
@Get('')
getData() {
// Your controller logic here
}
}
Features
- Implements rate limiting using Redis for efficient and scalable request tracking
- Supports the Sliding Window algorithm for accurate rate limiting
- Customizable configuration options for flexible integration
- Extensible architecture for future algorithm implementations
Contributing
We welcome contributions to improve API Rate Limiter! To contribute:
- Fork the repository
- Create a new branch (
git checkout -b feature/AmazingFeature
) - Commit your changes (
git commit -m 'Add some AmazingFeature'
) - Push to the branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Please ensure your code follows NestJS best practices and includes relevant tests.
License
This project is licensed under the MIT License - see the LICENSE file for details.
For more information and detailed documentation, please refer to our official documentation.