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 Requests when 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.