FastAPI Rate Limiting Nasıl Uygulanır?

0 Yanıt 2 Görüntülenme
Puanlayanlar
Katılımcılar
Konuyu Açan #1
FastAPI Rate Limiting Nasıl Uygulanır?

FastAPI, modern ve yüksek performanslı API geliştirme çerçevesi olmasının yanı sıra, güvenlik ve erişim kontrolü konularında da çeşitli çözümler sunar. Bunlardan biri de rate limiting (oran sınırlaması) uygulamaktır. Bu özellik, özellikle API'ye aşırı istek gönderen kullanıcıların veya botların önüne geçmek ve sistem kaynaklarını korumak amacıyla kullanılır. Peki, FastAPI'de rate limiting nasıl uygulanır?

İlk olarak, FastAPI'nin kendisi doğrudan bu özelliği desteklemediği için üçüncü taraf kütüphanelerden yararlanmak gerekir. En popüler seçeneklerden biri RateLimitMiddleware kütüphanesidir. Bu kütüphane, Flask'daki werkzeug tabanlı rate limiting mantığını FastAPI'ye uyarlamaya olanak tanır.

Kurulum aşaması şu şekildedir:
[list]
  • Öncelikle slowapi kütüphanesini yüklemek gerekir:
    KOD
    1pip install slowapi

  • Daha sonra, FastAPI uygulamanıza aşağıdaki gibi entegre edebilirsiniz:

    KOD
    1234567891011121314151617181920212223242526[python]from fastapi import FastAPI, Request
    from slowapi import Limiter, _rate_limit_exceeded_handler
    from slowapi.middleware import SlowAPIMiddleware
    from starlette.responses import JSONResponse
    
    app = FastAPI()
    
    [b]Limiter nesnesi ile limitleri belirliyoruz[/b]
    limiter = Limiter(key_func=lambda request: request.client.host)
    
    [b]Middleware ekliyoruz[/b]
    app.add_middleware(SlowAPIMiddleware)
    app.state.limiter = limiter
    app.add_exception_handler(429, _rate_limit_exceeded_handler)
    
    @app.get("/kullanicilar")
    @limiter.limit("10/minute")  # Dakikada 10 istek limiti
    async def kullanicilar():
        return {"mesaj": "Kullanıcı listesi"}
    
    @app.get("/toplam")
    @limiter.limit("5/hour")  # Saatte 5 istek limiti
    async def toplam():
        return {"mesaj": "Genel toplam"}
    
    [/python]


    Burada, limiter.limit ile belirli endpointler için istek sınırı koyuyoruz. Ayrıca, key_func parametresi ile limitin kullanıcıya veya IP'ye göre yapılmasını sağlayabilirsiniz. Bu, API'yi aşırı kullanımdan koruma açısından kritik bir detaydır.

    Alternatif olarak, Redis gibi merkezi bir cache sistemi kullanmak ve rate limitleri ona göre ayarlamak da mümkündür. Bu, özellikle dağıtık yapılar veya yüksek trafikli uygulamalar için daha uygundur.

    Son olarak, hız sınırını aşan kullanıcılara uygun yanıtlar vermek ve bu limitleri takip etmek, API güvenliği ve performansı açısından önemli. FastAPI'de bu tür uygulamaları doğru yapılandırmak, API'nizin istikrarını artırabilir ve kötüye kullanımı engelleyebilir.
  • Yanıt vermek için giriş yapmış olmalısınız.

    Bu konuyu görüntüleyen kullanıcılar (Toplam: 2, Üyeler: 2, Misafirler: 0)
    Toplam: 2 (üyeler: 2, misafirler: 0)
    0 alıntı seçildi