在FastAPI中實(shí)現(xiàn)API速率限制可以使用第三方工具fastapi-limiter
來(lái)實(shí)現(xiàn)。以下是實(shí)現(xiàn)方法:
fastapi-limiter
庫(kù):pip install fastapi-limiter
Limiter
中間件來(lái)實(shí)現(xiàn)速率限制:from fastapi import FastAPI
from fastapi_limiter import FastAPILimiter
from fastapi_limiter.depends import RateLimiter
app = FastAPI()
# 設(shè)置速率限制
limiter = FastAPILimiter(key_func=lambda _: "1", rate_limits={"10 per minute"})
@app.middleware("http")
async def limiter_middleware(request: Request, call_next):
return await limiter.middleware(request, call_next)
@app.get("/items/")
async def read_items():
return {"message": "Hello World"}
在上面的示例中,我們創(chuàng)建了一個(gè)Limiter
實(shí)例,并通過(guò)中間件將其應(yīng)用到FastAPI應(yīng)用中。我們?cè)O(shè)置了每分鐘最多可以訪問(wèn)10次API的速率限制。
通過(guò)使用RateLimiter
依賴可以在具體的路由函數(shù)中設(shè)置不同的速率限制,例如:
@app.get("/items/{item_id}")
async def read_item(item_id: int, rate_limiter=Depends(RateLimiter(key="ip", rate_limits="5 per minute"))):
return {"item_id": item_id}
以上就是在FastAPI中實(shí)現(xiàn)API速率限制的方法。通過(guò)使用fastapi-limiter
庫(kù),我們可以方便地對(duì)API請(qǐng)求進(jìn)行速率限制,保護(hù)服務(wù)器免受惡意請(qǐng)求的影響。