rate_limit & limit¶
fastlimit.rate_limit ¶
rate_limit(default: str | RateLimitRule | None = None, *, ip: str | None = None, user: str | None = None, cost: int = 1, name: str | None = None) -> Any
Create a FastAPI dependency that enforces a rate limit.
The resolved rule is evaluated at request time — the limiter is looked up from app.state.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
default | str | RateLimitRule | None | a rate string ( | None |
ip | str | None | Rate string for the IP bucket. e.g. | None |
user | str | None | Rate string for the authenticated-user bucket. e.g. | None |
cost | int | Request cost. Useful for expensive endpoints. Default | 1 |
name | str | None | Optional stable name for Redis key prefix. | None |
Returns:
| Type | Description |
|---|---|
Any | A |
Examples::
# IP-only shorthand
dependencies=[rate_limit("10/min")]
# Explicit IP
dependencies=[rate_limit(ip="10/min")]
# Dual bucket
dependencies=[rate_limit(ip="10/min", user="50/min")]
# Pre-built rule
dependencies=[rate_limit(Rules.LOGIN)]
# Inline on a router
router = APIRouter(dependencies=[rate_limit("200/min")])
Raises:
| Type | Description |
|---|---|
FastLimitNotInitialized | At request time if |
RateLimitExceeded | At request time if the limit is exceeded. |
fastlimit.limit ¶
limit(default: str | RateLimitRule | None = None, *, ip: str | None = None, user: str | None = None, cost: int = 1, name: str | None = None) -> Callable[[Any], Any]
Decorator that adds a rate limit to a FastAPI route.
Identical arguments to fastlimit.depends.rate_limit. The route function does not need Request in its signature.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
default | str | RateLimitRule | None | IP-only rate string. | None |
ip | str | None | Rate string for IP bucket. | None |
user | str | None | Rate string for user bucket. | None |
cost | int | Request cost per call. | 1 |
name | str | None | Stable Redis key name. | None |
Returns:
| Type | Description |
|---|---|
Callable[[Any], Any] | A decorator that injects the rate limit as a hidden FastAPI dependency. |
Examples::
from fastlimit import limit
@router.get("/photos")
@limit("20/min")
async def list_photos(): ...
@router.post("/upload")
@limit(ip="5/min", user="30/min")
async def upload(): ...
# Stacking: each @limit adds an independent bucket
@router.get("/feed")
@limit("200/min")
@limit(user="1000/min")
async def feed(): ...