Rate Limiting¶
Rate limiting protects your API from abuse, DoS attacks, and excessive usage.
Basic Configuration¶
# settings.py
from djangoapi_guard import SecurityConfig
GUARD_SECURITY_CONFIG = SecurityConfig(
rate_limit=100, # Maximum number of requests allowed
rate_limit_window=60, # Time window in seconds
)
How It Works¶
DjangoAPI Guard implements a sliding window rate limiting algorithm:
- Each client request is tracked using a timestamp
- Only requests within the current time window are counted
- When count exceeds
rate_limit, the request is rejected with 429 status
In-Memory vs. Redis Rate Limiting¶
In-Memory (default when Redis disabled):
Redis-Based (for distributed environments):
GUARD_SECURITY_CONFIG = SecurityConfig(
rate_limit=100,
rate_limit_window=60,
redis_url="redis://localhost:6379/0",
redis_prefix="myapp:"
)
Custom Response Messages¶
GUARD_SECURITY_CONFIG = SecurityConfig(
rate_limit=100,
rate_limit_window=60,
custom_error_responses={
429: "Rate limit exceeded. Please try again later."
}
)
Best Practices¶
- Set reasonable limits: Consider your API's typical usage patterns
- Use Redis in production: For reliability in distributed environments
- Implement graduated limits: Consider different limits for different API endpoints
- Monitor usage patterns: Keep an eye on rate limit hits to adjust as needed