FastAPI ile API Geliştirme Rehberi

FastAPI ile API Geliştirme: Temel Seviyeden İleri Seviyeye

Bu makale, FastAPI kullanarak API geliştirme sürecini kapsamlı bir şekilde ele almaktadır. Temel kavramlardan başlayarak ileri seviye tekniklere kadar uzanan bu rehber, FastAPI ile güçlü ve ölçeklenebilir API’lar oluşturmanıza yardımcı olacaktır.

İçindekiler

  1. FastAPI Nedir?
  2. FastAPI’nin Avantajları
  3. Kurulum ve Ortam Hazırlığı
  4. İlk API Endpoint’i Oluşturma
  5. Veri Doğrulama ve Serileştirme (Pydantic)
  6. Request Body Kullanımı
  7. Query Parametreleri
  8. Path Parametreleri
  9. Dependency Injection
  10. Güvenlik ve Kimlik Doğrulama
  11. Middleware Kullanımı
  12. Hata Yönetimi
  13. Asenkron Programlama
  14. Dokümantasyon ve Otomatik Belgeleme
  15. Test Yazımı
  16. Deployment (Yayımlama)
  17. İleri Seviye Konular
  18. Sonuç

FastAPI Nedir?

FastAPI, modern, hızlı (yüksek performanslı), web API’leri oluşturmak için kullanılan bir Python web framework’üdür. Python 3.7+ tabanlıdır ve standart Python tipi ipuçlarını kullanır. Hız ve kolaylık ön planda tutularak tasarlanmıştır. FastAPI, otomatik veri doğrulama, serileştirme ve dokümantasyon gibi özellikleri sunar.

FastAPI’nin Avantajları

  • Hızlı: Yüksek performanslı, NodeJS ve Go ile rekabet edebilir.
  • Kolay: Öğrenmesi ve kullanması kolaydır.
  • Az Kod: Boilerplate kod miktarını azaltır.
  • Sağlam: Üretim için hazır kod sağlar.
  • Standartlara Uygun: OpenAPI ve JSON Schema tabanlıdır.
  • Otomatik Dokümantasyon: Swagger UI ve ReDoc ile otomatik API dokümantasyonu sunar.
  • Veri Doğrulama: Pydantic ile güçlü veri doğrulama yetenekleri sunar.

Kurulum ve Ortam Hazırlığı

FastAPI’yi kullanmaya başlamadan önce Python 3.7 veya üzeri bir sürüme sahip olduğunuzdan emin olun. Daha sonra aşağıdaki komutları kullanarak FastAPI ve Uvicorn’u (asenkron sunucu) yükleyebilirsiniz:

pip install fastapi uvicorn

Uvicorn, FastAPI uygulamalarını çalıştırmak için kullanılan bir ASGI sunucusudur.

İlk API Endpoint’i Oluşturma

Aşağıdaki örnek kod, basit bir FastAPI uygulamasının nasıl oluşturulacağını ve ilk API endpoint’inin nasıl tanımlanacağını göstermektedir:


from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"message": "Merhaba Dünya!"}

Bu kodu bir `main.py` dosyasına kaydedin ve aşağıdaki komutu kullanarak uygulamayı çalıştırın:

uvicorn main:app --reload

`–reload` parametresi, kodunuzda yapılan değişiklikleri otomatik olarak algılayarak sunucuyu yeniden başlatır.

Veri Doğrulama ve Serileştirme (Pydantic)

FastAPI, Pydantic kütüphanesi ile entegre olarak veri doğrulama ve serileştirme işlemlerini kolaylaştırır. Pydantic, Python veri sınıflarını kullanarak veri tiplerini tanımlamanıza ve verileri doğrulamanıza olanak tanır.

Örneğin, aşağıdaki gibi bir Pydantic modeli tanımlayabilirsiniz:


from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: str | None = None
    price: float
    tax: float | None = None

Bu modeli API endpoint’lerinde kullanarak gelen verileri doğrulayabilir ve serileştirebilirsiniz.

Request Body Kullanımı

Request body, istemcinin sunucuya gönderdiği verileri içerir. FastAPI, Pydantic modellerini kullanarak request body’lerini kolayca işleyebilir.

Örneğin, aşağıdaki API endpoint’i, bir `Item` modelini request body olarak alır:


from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    description: str | None = None
    price: float
    tax: float | None = None


@app.post("/items/")
async def create_item(item: Item):
    return item

Query Parametreleri

Query parametreleri, URL’nin sonuna eklenen parametrelerdir. FastAPI, `Query` sınıfını kullanarak query parametrelerini tanımlamanıza olanak tanır.

Örneğin, aşağıdaki API endpoint’i, bir `q` query parametresini alır:


from fastapi import FastAPI, Query

app = FastAPI()

@app.get("/items/")
async def read_items(q: str | None = Query(default=None, max_length=50)):
    results = {"items": [{"name": "Foo"}, {"name": "Bar"}]}
    if q:
        results.update({"q": q})
    return results

Path Parametreleri

Path parametreleri, URL’nin içinde yer alan parametrelerdir. FastAPI, path parametrelerini kolayca tanımlamanıza olanak tanır.

Örneğin, aşağıdaki API endpoint’i, bir `item_id` path parametresini alır:


from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

Dependency Injection

Dependency injection, bağımlılıkları bir sınıfa veya fonksiyona dışarıdan enjekte etme tekniğidir. FastAPI, dependency injection’ı destekler ve bu sayede daha modüler ve test edilebilir kod yazmanıza olanak tanır.

Örneğin, aşağıdaki kod, bir bağımlılığı bir API endpoint’ine enjekte etmektedir:


from fastapi import FastAPI, Depends

app = FastAPI()

async def get_db():
    db = FakeDatabase()
    try:
        yield db
    finally:
        db.close()

@app.get("/items/")
async def read_items(db: FakeDatabase = Depends(get_db)):
    items = db.get_items()
    return items

Güvenlik ve Kimlik Doğrulama

FastAPI, çeşitli güvenlik ve kimlik doğrulama mekanizmalarını destekler. Örneğin, API anahtarları, OAuth2 ve JWT (JSON Web Tokens) gibi yöntemleri kullanarak API’lerinizi koruyabilirsiniz.

Detaylı bilgi için FastAPI’nin resmi dokümantasyonuna başvurabilirsiniz.

Middleware Kullanımı

Middleware, isteklerin ve yanıtların işlenmesi sürecine müdahale eden fonksiyonlardır. FastAPI, middleware’ler aracılığıyla istekleri ve yanıtları özelleştirmenize olanak tanır.

Örneğin, aşağıdaki kod, her isteğin ne kadar sürdüğünü loglayan bir middleware örneğidir:


from fastapi import FastAPI, Request
import time

app = FastAPI()

@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
    start_time = time.time()
    response = await call_next(request)
    process_time = time.time() - start_time
    response.headers["X-Process-Time"] = str(process_time)
    return response

Hata Yönetimi

FastAPI, hata yönetimini kolaylaştırmak için `HTTPException` sınıfını sunar. Bu sınıfı kullanarak özel hata mesajları ve HTTP durum kodları döndürebilirsiniz.

Örneğin, aşağıdaki kod, bir öğenin bulunamadığı durumda bir 404 hatası döndürmektedir:


from fastapi import FastAPI, HTTPException

app = FastAPI()

items = {"foo": {"name": "Foo"}}

@app.get("/items/{item_id}")
async def read_item(item_id: str):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    return items[item_id]

Asenkron Programlama

FastAPI, asenkron programlamayı destekler. `async` ve `await` anahtar kelimelerini kullanarak asenkron fonksiyonlar tanımlayabilir ve non-blocking işlemler gerçekleştirebilirsiniz. Bu, API’nizin performansını artırmanıza yardımcı olur.

Dokümantasyon ve Otomatik Belgeleme

FastAPI, OpenAPI ve JSON Schema standartlarına uygun olarak otomatik API dokümantasyonu oluşturur. Swagger UI ve ReDoc arayüzleri sayesinde API’nizi kolayca keşfedebilir ve test edebilirsiniz.

Uygulamanızı çalıştırdıktan sonra `/docs` ve `/redoc` adreslerini ziyaret ederek otomatik dokümantasyon arayüzlerine erişebilirsiniz.

Test Yazımı

FastAPI uygulamalarını test etmek için `pytest` gibi test framework’lerini kullanabilirsiniz. FastAPI, test yazımını kolaylaştırmak için `TestClient` sınıfını sunar.

Detaylı bilgi için FastAPI’nin resmi dokümantasyonuna başvurabilirsiniz.

Deployment (Yayımlama)

FastAPI uygulamalarını çeşitli platformlara (örneğin, Heroku, AWS, Google Cloud) yayımlayabilirsiniz. Uvicorn ve Gunicorn gibi sunucularla birlikte Docker kullanarak da uygulamanızı yayımlayabilirsiniz.

İleri Seviye Konular

FastAPI ile ilgili daha ileri seviye konular şunlardır:

  • WebSockets
  • GraphQL
  • Background Tasks
  • CORS (Cross-Origin Resource Sharing)
  • Custom Exception Handlers

Sonuç

Bu makalede, FastAPI kullanarak API geliştirme sürecinin temel adımlarını ve ileri seviye tekniklerini ele aldık. FastAPI’nin avantajları, kurulumu, temel endpoint’lerin oluşturulması, veri doğrulama, güvenlik, dokümantasyon ve test yazımı gibi konuları detaylı bir şekilde inceledik. FastAPI, hızlı, kolay ve güçlü API’lar oluşturmak için ideal bir framework’tür.

Leave A Comment

Your email address will not be published. Required fields are marked *