Skip to main content

High-performance async rate limiter for FastAPI with Redis or native in-memory backend

Project description

fastapi-easylimiter

Simple async rate-limiting middleware for FastAPI with Redis or in-memory caching.

Simple design

  • Async rate limiting
  • Redis or in-memory cache
  • Easy rules per URL paths.
  • Optional rate limit headers (X-RateLimit-Limit, X-RateLimit-Remaining, Retry-After)

Installation

pip install fastapi-easylimiter

Usage

from fastapi import FastAPI
from fastapi_easylimiter import AsyncRedisBackend, InMemoryBackend, RateLimiterMiddleware
import redis.asyncio as redis_async

app = FastAPI()

REDIS_URL = "redis://localhost:6379/0"

# Redis backend (recommended for multi-instance deployments)
redis_client = redis_async.from_url(REDIS_URL, decode_responses=True)
backend = AsyncRedisBackend(redis_client)

# Or for single-instance/local development:
# backend = InMemoryBackend()

rules = {
    "/api/users": {"limit": 1, "period": 2},
    "/api/": {"limit": 60, "period": 60}, # GLOBAL ONES GO LAST
}

app.add_middleware(
    RateLimiterMiddleware,
    rules=rules,
    backend=backend,
    backoff_threshold=3,
    max_backoff=60
)

Contributing

Contributions and forks are always welcome! Feel free to adapt, improve, or extend this middleware for your own needs. This was purely made out of personal necessity.

Support

Buy Me a Coffee

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastapi_easylimiter-0.1.7.tar.gz (4.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fastapi_easylimiter-0.1.7-py3-none-any.whl (5.5 kB view details)

Uploaded Python 3

File details

Details for the file fastapi_easylimiter-0.1.7.tar.gz.

File metadata

  • Download URL: fastapi_easylimiter-0.1.7.tar.gz
  • Upload date:
  • Size: 4.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for fastapi_easylimiter-0.1.7.tar.gz
Algorithm Hash digest
SHA256 43e4934197461a809e8948fd2f34533016fe54674d920f3d4144632bfc605e45
MD5 460631c36b9dc3ae0e7190eca741cdf0
BLAKE2b-256 80497ca6e8ce086b74241daa5e30fd0b7dedc00b29f38e55777e7eb7a2d5069d

See more details on using hashes here.

File details

Details for the file fastapi_easylimiter-0.1.7-py3-none-any.whl.

File metadata

File hashes

Hashes for fastapi_easylimiter-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 d04683c436865f07fced2ac0d871f5e1fb4e021b8a0d950cb34cb6c81ba73db8
MD5 e9277feed5d1be467f584f689f001635
BLAKE2b-256 8909c7aeb95a6326f7b1a9777f416c6761cf49c3c7d65f228450b21b3ffdbe5d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page