FastAPI ile Güçlü API Geliştirme Rehberi

FastAPI ile Güçlü API Geliştirmenin Püf Noktaları

Günümüzde modern web uygulamaları ve mikroservis mimarileri için hızlı, güvenilir ve ölçeklenebilir API’ler geliştirmek kritik öneme sahiptir. İşte tam bu noktada FastAPI devreye giriyor. FastAPI, Python tabanlı, yüksek performanslı bir web framework’üdür ve API geliştirmeyi kolaylaştırmak için tasarlanmıştır. Bu makalede, FastAPI ile güçlü API’ler geliştirmenin püf noktalarını detaylı bir şekilde inceleyeceğiz.

İçindekiler

  1. FastAPI’ye Giriş
  2. FastAPI’nin Avantajları
  3. Kurulum ve Temel Kullanım
  4. Veri Doğrulama ve Serileştirme
  5. Asenkron Programlama
  6. Bağımlılık Yönetimi
  7. Güvenlik Önlemleri
  8. Test Etme
  9. Dokümantasyon
  10. Performans Optimizasyonu
  11. Örnek Proje
  12. Sonuç

1. FastAPI’ye Giriş

FastAPI, Guido van Rossum’un Python’u baz alarak geliştirilmiş, modern ve yüksek performanslı bir web framework’üdür. Temel amacı, API geliştirme sürecini hızlandırmak ve kolaylaştırmaktır. Özellikle veri serileştirme, doğrulama ve dokümantasyon gibi konularda sağladığı kolaylıklar sayesinde geliştiricilerin iş yükünü önemli ölçüde azaltır. FastAPI, açık kaynaklı ve MIT lisansı ile dağıtılmaktadır.

2. FastAPI’nin Avantajları

  • Hız ve Performans: ASGI (Asynchronous Server Gateway Interface) desteği sayesinde yüksek performans sunar.
  • Veri Doğrulama: Pydantic ile entegre olarak güçlü veri doğrulama özellikleri sağlar.
  • Otomatik Dokümantasyon: OpenAPI ve Swagger UI ile otomatik API dokümantasyonu oluşturur.
  • Tip İpuçları (Type Hints): Python’un tip ipuçlarını kullanarak kodun okunabilirliğini ve güvenilirliğini artırır.
  • Bağımlılık Yönetimi: Basit ve etkili bağımlılık yönetimi sistemi sunar.
  • Kolay Öğrenme: Basit ve anlaşılır sözdizimi sayesinde kolayca öğrenilebilir.

3. Kurulum ve Temel Kullanım

FastAPI’yi kullanmaya başlamak için öncelikle Python’un kurulu olduğundan emin olun. Ardından aşağıdaki komutları kullanarak FastAPI ve Uvicorn’u (bir ASGI sunucusu) kurabilirsiniz:

pip install fastapi uvicorn

Temel bir FastAPI uygulaması şu şekilde oluşturulabilir:


from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

Bu uygulamayı çalıştırmak için aşağıdaki komutu kullanın:

uvicorn main:app --reload

Burada main, Python dosyanızın adıdır ve app ise FastAPI uygulamasının adıdır. --reload parametresi, kodunuzda değişiklik yaptığınızda sunucunun otomatik olarak yeniden başlatılmasını sağlar.

4. Veri Doğrulama ve Serileştirme

FastAPI, Pydantic kütüphanesi ile entegre olarak veri doğrulama ve serileştirme işlemlerini kolaylaştırır. Pydantic, veri tiplerini tanımlamanıza ve verilerin doğru formatta olduğundan emin olmanıza olanak tanı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

Bu örnekte, Item adında bir Pydantic modeli tanımladık. Bu model, name, description, price ve tax alanlarına sahiptir. FastAPI, gelen verileri otomatik olarak bu modele göre doğrular ve serileştirir.

5. Asenkron Programlama

FastAPI, asenkron programlama desteği sayesinde yüksek performanslı uygulamalar geliştirmenize olanak tanır. Asenkron fonksiyonlar, bir işlem tamamlanana kadar diğer işlemlerin devam etmesini sağlar, böylece uygulamanızın tepki süresi kısalır.


from fastapi import FastAPI
import asyncio

app = FastAPI()

async def some_long_operation():
    await asyncio.sleep(5)
    return {"message": "Operation completed"}

@app.get("/long-operation/")
async def long_operation_route():
    result = await some_long_operation()
    return result

Bu örnekte, some_long_operation adında bir asenkron fonksiyon tanımladık. Bu fonksiyon, 5 saniye bekledikten sonra bir mesaj döndürür. FastAPI, bu fonksiyonu asenkron olarak çalıştırır ve diğer işlemlerin devam etmesini sağlar.

6. Bağımlılık Yönetimi

FastAPI, bağımlılık yönetimi için güçlü bir sistem sunar. Bağımlılıklar, fonksiyonlara parametre olarak enjekte edilir ve FastAPI, bu bağımlılıkları otomatik olarak çözer.


from fastapi import FastAPI, Depends

app = FastAPI()

def get_db():
    db = {"items": []}
    try:
        yield db
    finally:
        pass

@app.get("/items/")
async def read_items(db: dict = Depends(get_db)):
    return db["items"]

Bu örnekte, get_db adında bir bağımlılık fonksiyonu tanımladık. Bu fonksiyon, bir veritabanı bağlantısı oluşturur ve bu bağlantıyı döndürür. FastAPI, read_items fonksiyonuna bu bağımlılığı otomatik olarak enjekte eder.

7. Güvenlik Önlemleri

FastAPI ile API geliştirirken güvenlik önlemleri almak önemlidir. İşte bazı temel güvenlik önlemleri:

  • Kimlik Doğrulama (Authentication): Kullanıcıların kimliklerini doğrulamak için OAuth2 veya JWT gibi yöntemler kullanın.
  • Yetkilendirme (Authorization): Kullanıcıların hangi kaynaklara erişebileceğini belirlemek için rol tabanlı erişim kontrolü (RBAC) kullanın.
  • Veri Doğrulama: Gelen verileri doğrulamak için Pydantic veya benzeri kütüphaneler kullanın.
  • Girdi Temizleme (Input Sanitization): Kullanıcı girdilerini temizleyerek SQL enjeksiyonu veya XSS gibi saldırıları önleyin.
  • HTTPS Kullanımı: Verilerin güvenli bir şekilde iletilmesini sağlamak için HTTPS kullanın.

8. Test Etme

FastAPI uygulamalarını test etmek için pytest ve httpx gibi kütüphaneler kullanabilirsiniz. Testler, uygulamanızın doğru çalıştığından emin olmanıza ve hataları erken aşamada tespit etmenize yardımcı olur.


from fastapi.testclient import TestClient
from .main import app

client = TestClient(app)

def test_read_main():
    response = client.get("/")
    assert response.status_code == 200
    assert response.json() == {"Hello": "World"}

Bu örnekte, TestClient kullanarak FastAPI uygulamasını test ediyoruz. test_read_main fonksiyonu, kök endpoint’e bir GET isteği gönderir ve yanıtın doğru olup olmadığını kontrol eder.

9. Dokümantasyon

FastAPI, OpenAPI ve Swagger UI ile otomatik API dokümantasyonu oluşturur. Bu sayede, API’nizi kullanan geliştiriciler için güncel ve anlaşılır bir dokümantasyon sunabilirsiniz.

API dokümantasyonuna erişmek için uygulamanızı çalıştırdıktan sonra /docs veya /redoc endpoint’lerini ziyaret edebilirsiniz.

10. Performans Optimizasyonu

FastAPI uygulamalarının performansını artırmak için aşağıdaki yöntemleri kullanabilirsiniz:

  • Asenkron Programlama: Asenkron fonksiyonlar kullanarak uygulamanızın tepki süresini kısaltın.
  • Veritabanı Optimizasyonu: Veritabanı sorgularını optimize edin ve indeksler kullanın.
  • Önbellekleme (Caching): Sık erişilen verileri önbelleğe alarak veritabanı yükünü azaltın.
  • Gzip Sıkıştırması: Yanıtları sıkıştırarak ağ trafiğini azaltın.
  • Uvicorn ve Gunicorn Kullanımı: Uvicorn ve Gunicorn gibi yüksek performanslı sunucular kullanarak uygulamanızın performansını artırın.

11. Örnek Proje

Aşağıda, FastAPI ile basit bir TODO listesi API’si örneği bulunmaktadır:


from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List

app = FastAPI()

class Todo(BaseModel):
    id: int
    title: str
    completed: bool = False

todos: List[Todo] = []

@app.get("/todos/", response_model=List[Todo])
async def list_todos():
    return todos

@app.post("/todos/", response_model=Todo)
async def create_todo(todo: Todo):
    todos.append(todo)
    return todo

@app.get("/todos/{todo_id}", response_model=Todo)
async def read_todo(todo_id: int):
    for todo in todos:
        if todo.id == todo_id:
            return todo
    raise HTTPException(status_code=404, detail="Todo not found")

@app.put("/todos/{todo_id}", response_model=Todo)
async def update_todo(todo_id: int, updated_todo: Todo):
    for i, todo in enumerate(todos):
        if todo.id == todo_id:
            todos[i] = updated_todo
            return updated_todo
    raise HTTPException(status_code=404, detail="Todo not found")

@app.delete("/todos/{todo_id}", response_model=dict)
async def delete_todo(todo_id: int):
    for i, todo in enumerate(todos):
        if todo.id == todo_id:
            del todos[i]
            return {"message": "Todo deleted"}
    raise HTTPException(status_code=404, detail="Todo not found")

Bu örnek, temel CRUD (Create, Read, Update, Delete) işlemlerini içeren bir TODO listesi API’sini göstermektedir.

12. Sonuç

FastAPI, modern ve yüksek performanslı API’ler geliştirmenize olanak tanıyan güçlü bir framework’tür. Veri doğrulama, otomatik dokümantasyon, asenkron programlama ve bağımlılık yönetimi gibi özellikleriyle geliştirme sürecini kolaylaştırır ve hızlandırır. Bu makalede, FastAPI ile güçlü API’ler geliştirmenin püf noktalarını detaylı bir şekilde inceledik. Artık siz de FastAPI’yi kullanarak harika API’ler geliştirebilirsiniz.

Leave A Comment

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