A request rate limiter for fastapi
Project description
fastapi-limiter
Introduction
FastAPI-Limiter is a rate limiting tool for fastapi routes.
Requirements
Install
Just install from pypi
> pip install fastapi-limiter
Quick Start
FastAPI-Limiter is simple to use, which just provide a dependency RateLimiter
, the following example allow 2
times request per 5
seconds in route /
.
import aioredis
import uvicorn
from fastapi import Depends, FastAPI
from fastapi_limiter import FastAPILimiter
from fastapi_limiter.depends import RateLimiter
app = FastAPI()
@app.on_event("startup")
async def startup():
redis = await aioredis.create_redis_pool("redis://localhost")
FastAPILimiter.init(redis)
@app.get("/", dependencies=[Depends(RateLimiter(times=2, seconds=5))])
async def index():
return {"msg": "Hello World"}
if __name__ == "__main__":
uvicorn.run("main:app", debug=True, reload=True)
Usage
There are some config in FastAPILimiter.init
.
redis
The redis
instance of aioredis
.
prefix
Prefix of redis key.
identifier
Identifier of route limit, default is ip
, you can override it such as userid
and so on.
async def default_identifier(request: Request):
forwarded = request.headers.get("X-Forwarded-For")
if forwarded:
return forwarded.split(",")[0]
return request.client.host
callback
Callback when access is forbidden, default is raise HTTPException
with 403
status code.
async def default_callback(request: Request):
raise HTTPException(HTTP_403_FORBIDDEN, "The request is frequent")
License
This project is licensed under the Apache-2.0 License.
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-limiter-0.1.1.tar.gz
(7.3 kB
view hashes)
Built Distribution
Close
Hashes for fastapi_limiter-0.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7526b14895b5fe59d1984d895149df5e8f90cbc1271c8be2bbf410c6b875198d |
|
MD5 | 638b79e8865e605d9c1907f7dd22bdbd |
|
BLAKE2b-256 | ec47961378fcb20f35b4ec9f1b80c6bd6d4c3920d3c7e4f33effbb25339bdec0 |