FastAPI中怎么實(shí)現(xiàn)API速率限制

小億
216
2024-05-10 16:42:57

在FastAPI中實(shí)現(xiàn)API速率限制可以使用第三方工具fastapi-limiter來(lái)實(shí)現(xiàn)。以下是實(shí)現(xiàn)方法:

  1. 首先安裝fastapi-limiter庫(kù):
pip install fastapi-limiter
  1. 然后在FastAPI應(yīng)用中使用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)求的影響。

0