pexels_temp

FastAPI ile Hızlı ve Etkili Todo List API Geliştirme

FastAPI ile Hızlı ve Etkili Todo List API Geliştirme

Günümüzde API’ler, modern web ve mobil uygulamalarının temel yapı taşlarından biri haline geldi. Özellikle mikroservis mimarisi ve dağıtık sistemlerin yaygınlaşmasıyla birlikte, hızlı, güvenilir ve kolay geliştirilebilir API’lere olan ihtiyaç da arttı. İşte tam bu noktada, Python dünyasının parlayan yıldızı FastAPI devreye giriyor. Bu makalede, FastAPI kullanarak nasıl etkili bir Todo List API’si geliştirebileceğinizi adım adım inceleyeceğiz.

İçindekiler

  1. FastAPI Nedir?
  2. Neden FastAPI? Avantajları Nelerdir?
  3. Gereksinimler ve Kurulum
  4. Proje Yapısı
  5. Veri Modelleri Oluşturma (Pydantic)
  6. API Endpoint’lerini Tanımlama
  7. Veri Tabanı Entegrasyonu (SQLAlchemy)
  8. CRUD İşlemleri (Create, Read, Update, Delete)
  9. API’yi Test Etme
  10. Otomatik Dokümantasyon (Swagger UI ve ReDoc)
  11. Sonuç

FastAPI Nedir?

FastAPI, Python 3.7+ tabanlı, modern ve yüksek performanslı bir web framework’üdür. Philippe Fanaro tarafından geliştirilen FastAPI, geliştirme sürecini hızlandırmak, daha az kod yazmak ve daha güvenilir API’ler oluşturmak amacıyla tasarlanmıştır. Açık kaynaklıdır ve MIT lisansı altında yayınlanmaktadır.

Neden FastAPI? Avantajları Nelerdir?

  • Hızlı Geliştirme: Bağımlılık enjeksiyonu, otomatik veri validasyonu ve seri hale getirme gibi özellikler sayesinde geliştirme süresini önemli ölçüde kısaltır.
  • Yüksek Performans: Starlette ve Pydantic gibi güçlü kütüphaneler üzerine inşa edilmiştir, bu da yüksek performanslı API’ler oluşturmanızı sağlar.
  • Otomatik Veri Validasyonu: Pydantic ile entegre çalışarak, gelen verilerin otomatik olarak validasyonunu sağlar.
  • Otomatik Dokümantasyon: Swagger UI ve ReDoc entegrasyonu sayesinde, API’nizin otomatik olarak dokümante edilmesini sağlar. Bu, hem geliştiriciler hem de API’yi kullananlar için büyük kolaylık sağlar.
  • Tip İpuçları (Type Hints): Python’un tip ipuçlarını kullanarak, kodunuzun daha okunabilir ve bakımı kolay olmasını sağlar. Ayrıca, IDE’lerin daha iyi otomatik tamamlama ve hata kontrolü yapmasına olanak tanır.
  • Bağımlılık Enjeksiyonu: FastAPI’nin bağımlılık enjeksiyonu sistemi, kodunuzun daha modüler ve test edilebilir olmasını sağlar.

Gereksinimler ve Kurulum

FastAPI ile Todo List API’si geliştirmeye başlamadan önce, aşağıdaki gereksinimleri karşıladığınızdan emin olun:

  • Python 3.7 veya üzeri
  • pip (Python paket yöneticisi)

Gerekli paketleri yüklemek için aşağıdaki komutu kullanın:

pip install fastapi uvicorn SQLAlchemy databases python-dotenv

Bu komut, FastAPI, ASGI sunucusu olarak Uvicorn, veri tabanı işlemleri için SQLAlchemy, asenkron veri tabanı işlemleri için databases ve ortam değişkenleri için python-dotenv paketlerini yükleyecektir.

Proje Yapısı

Projenizi düzenli tutmak için aşağıdaki gibi bir proje yapısı oluşturabilirsiniz:


todo_api/
├── main.py
├── models.py
├── database.py
├── .env
└── README.md

  • main.py: API endpoint’lerinin tanımlandığı ana dosya.
  • models.py: Veri modellerinin (Pydantic modelleri) tanımlandığı dosya.
  • database.py: Veri tabanı bağlantısı ve işlemlerinin tanımlandığı dosya.
  • .env: Veri tabanı bağlantı bilgileri gibi hassas bilgilerin saklandığı dosya.
  • README.md: Proje hakkında genel bilgilerin ve kurulum talimatlarının bulunduğu dosya.

Veri Modelleri Oluşturma (Pydantic)

models.py dosyasında, Todo List öğelerini temsil edecek Pydantic modellerini tanımlayalım:


from pydantic import BaseModel
from typing import Optional

class Todo(BaseModel):
    id: Optional[int] = None
    title: str
    description: Optional[str] = None
    completed: bool = False

class TodoCreate(BaseModel):
    title: str
    description: Optional[str] = None

Bu modeller, Todo öğelerinin nasıl görüneceğini ve hangi alanları içereceğini tanımlar. Todo modeli, tüm alanları (id, title, description, completed) içerirken, TodoCreate modeli sadece oluşturma sırasında gerekli olan alanları (title, description) içerir.

API Endpoint’lerini Tanımlama

main.py dosyasında, API endpoint’lerini tanımlayalım. Bu endpoint’ler, Todo List öğelerini oluşturma, okuma, güncelleme ve silme işlemlerini gerçekleştirecektir.


from fastapi import FastAPI, HTTPException, Depends
from typing import List
from models import Todo, TodoCreate
from database import get_db, engine
import models
from sqlalchemy.orm import Session

models.Base.metadata.create_all(bind=engine)

app = FastAPI()

@app.get("/todos", response_model=List[Todo])
async def read_todos(db: Session = Depends(get_db)):
    todos = db.query(models.Todos).all()
    return todos

@app.post("/todos", response_model=Todo)
async def create_todo(todo: TodoCreate, db: Session = Depends(get_db)):
    db_todo = models.Todos(**todo.dict())
    db.add(db_todo)
    db.commit()
    db.refresh(db_todo)
    return db_todo

@app.get("/todos/{todo_id}", response_model=Todo)
async def read_todo(todo_id: int, db: Session = Depends(get_db)):
    todo = db.query(models.Todos).filter(models.Todos.id == todo_id).first()
    if todo is None:
        raise HTTPException(status_code=404, detail="Todo not found")
    return todo

@app.put("/todos/{todo_id}", response_model=Todo)
async def update_todo(todo_id: int, todo: TodoCreate, db: Session = Depends(get_db)):
    db_todo = db.query(models.Todos).filter(models.Todos.id == todo_id).first()
    if db_todo is None:
        raise HTTPException(status_code=404, detail="Todo not found")
    for key, value in todo.dict().items():
        setattr(db_todo, key, value)
    db.commit()
    db.refresh(db_todo)
    return db_todo

@app.delete("/todos/{todo_id}", response_model=Todo)
async def delete_todo(todo_id: int, db: Session = Depends(get_db)):
    todo = db.query(models.Todos).filter(models.Todos.id == todo_id).first()
    if todo is None:
        raise HTTPException(status_code=404, detail="Todo not found")
    db.delete(todo)
    db.commit()
    return todo

Bu kod, aşağıdaki API endpoint’lerini tanımlar:

  • GET /todos: Tüm Todo List öğelerini listeler.
  • POST /todos: Yeni bir Todo List öğesi oluşturur.
  • GET /todos/{todo_id}: Belirli bir Todo List öğesini getirir.
  • PUT /todos/{todo_id}: Belirli bir Todo List öğesini günceller.
  • DELETE /todos/{todo_id}: Belirli bir Todo List öğesini siler.

Veri Tabanı Entegrasyonu (SQLAlchemy)

Veri tabanı bağlantısını ve modelini tanımlamak için database.py dosyasını oluşturalım:


from sqlalchemy import create_engine, Column, Integer, String, Boolean
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from dotenv import load_dotenv
import os

load_dotenv()

DATABASE_URL = os.getenv("DATABASE_URL")

engine = create_engine(DATABASE_URL)

SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()

class Todos(Base):
    __tablename__ = "todos"

    id = Column(Integer, primary_key=True, index=True)
    title = Column(String)
    description = Column(String, nullable=True)
    completed = Column(Boolean, default=False)

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

Bu kod, SQLAlchemy kullanarak bir SQLite veri tabanı bağlantısı oluşturur ve Todo List öğelerini temsil eden bir model tanımlar.

.env dosyasına aşağıdaki satırı ekleyin (örnek olarak SQLite kullanıyoruz. PostgreSQL, MySQL gibi farklı veri tabanları kullanmak isterseniz bağlantı adresini buna göre değiştirmelisiniz.):

DATABASE_URL=sqlite:///./todo.db

CRUD İşlemleri (Create, Read, Update, Delete)

Yukarıda main.py dosyasında tanımladığımız API endpoint’leri, Todo List öğeleri üzerinde CRUD işlemlerini gerçekleştirmektedir. Bu işlemler, veri tabanına kaydedilen Todo List öğelerini oluşturma, okuma, güncelleme ve silme işlemlerini kapsar.

API’yi Test Etme

API’yi test etmek için, Uvicorn sunucusunu kullanarak uygulamayı çalıştırın:

uvicorn main:app --reload

Bu komut, uygulamayı yerel sunucuda (genellikle http://127.0.0.1:8000) başlatır. Ardından, bir API istemci (örneğin, Postman veya cURL) kullanarak API endpoint’lerini test edebilirsiniz.

Otomatik Dokümantasyon (Swagger UI ve ReDoc)

FastAPI, otomatik dokümantasyon özelliği sayesinde, API’nizin Swagger UI ve ReDoc arayüzleri üzerinden otomatik olarak dokümante edilmesini sağlar. Bu arayüzlere aşağıdaki adreslerden erişebilirsiniz:

  • Swagger UI: http://127.0.0.1:8000/docs
  • ReDoc: http://127.0.0.1:8000/redoc

Bu arayüzler, API endpoint’lerinizi, parametrelerini ve yanıtlarını kolayca görüntülemenizi ve test etmenizi sağlar.

Sonuç

Bu makalede, FastAPI kullanarak nasıl hızlı ve etkili bir Todo List API’si geliştirebileceğinizi adım adım inceledik. FastAPI’nin sunduğu avantajlar sayesinde, daha az kod yazarak, daha güvenilir ve yüksek performanslı API’ler oluşturabilirsiniz. Otomatik dokümantasyon özelliği sayesinde, API’nizin dokümantasyonunu kolayca oluşturabilir ve API’yi kullanan geliştiricilerin işini kolaylaştırabilirsiniz. FastAPI, modern web ve mobil uygulama geliştirme süreçlerinde API geliştirme için mükemmel bir seçenektir.

Leave A Comment

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