Rate Limit Decorator
Protect your API from abuse by limiting request frequency.
Usage
The @ratelimit decorator enforces limits based on IP address, User ID, or globally.
routes/expensive.py
from jec_api.decorators import ratelimit
# 10 requests per minute per user ID
@ratelimit(limit=10, window=60, by="user")
async def expensive_query():
...Side Effects
- Returns
429 Too Many Requestswhen exceeded. - Adds headers:
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset.
Signature
def ratelimit(
limit: int = 100,
window: int = 60,
by: str = "ip",
message: str = None
)- limit: Max requests allowed in window.
- window: Time window in seconds.
- by: Keying strategy:
"ip"(client IP),"user"(auth user ID), or"global"(shared). - message: Custom error message for rate limit exceeded responses.