Geliştirdiğimiz projelerde mobil uygulamaların, web arayüzlerinin veya gömülü sistemlerin birbiriyle haberleşmesi için güçlü bir köprüye ihtiyaç duyarız. Bu köprünün adı: REST API.
Python ekosisteminde Flask ve Django uzun yıllardır popüler olsa da, günümüzde hız, otomatik tip denetimi ve kendiliğinden oluşan Swagger dokümantasyonu sayesinde FastAPI standart haline geldi.
Bu rehberde, sıfırdan çalışan bir REST API kuracağız; CRUD mantığını ve asenkron veri akışını inceleyeceğiz.
1. Kurulum ve Ortam Hazırlığı
Öncelikle izole bir geliştirme ortamı kurup gerekli kütüphaneleri yüklüyoruz.
Sanal ortam oluşturma ve çalıştırma adımları:
python -m venv venv
source venv/bin/activate
Gerekli paketlerin yüklenmesi:
pip install fastapi uvicorn
- FastAPI: API mimarisini ve yönlendirmeleri (routing) yönetecek ana kütüphane.
- Uvicorn: Asenkron Python kodlarımızı çalıştıracak hafif ve son derece hızlı ASGI sunucusu.
2. İlk Endpoint: "Hello World"
Proje dizininde main.py adında bir dosya oluşturup en temel GET isteğini tanımlayalım:
from fastapi import FastAPI
app = FastAPI(
title="Örnek Maker API",
description="Python FastAPI ile oluşturulmuş hafif ve hızlı bir API",
version="1.0.0"
)
@app.get("/")
async def root():
return {
"status": "success",
"message": "API başarıyla çalışıyor!"
}
Sunucuyu başlatmak için terminalden şu komutu verin:
uvicorn main:app --reload
Tarayıcınızdan http://127.0.0.1:8000 adresine gittiğinizde JSON çıktısını göreceksiniz. --reload bayrağı sayesinde kodda değişiklik yaptıkça sunucu otomatik olarak yeniden başlar.
3. Pydantic ile Veri Modelleme ve POST İsteği
Bir API sadece veri döndürmez, dışarıdan güvenli veri de kabul eder. FastAPI, veri doğrulaması için Pydantic kütüphanesini kullanır.
Örnek olarak bir cihazdan sensör veya proje verisi alan bir POST endpoint'i ekleyelim:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field
from typing import List
app = FastAPI()
db_projects = []
class Project(BaseModel):
id: int
title: str = Field(..., min_length=3, max_length=50)
category: str
is_active: bool = True
@app.post("/projects/", status_code=201)
async def create_project(project: Project):
for item in db_projects:
if item.id == project.id:
raise HTTPException(status_code=400, detail="Bu ID zaten kayıtlı!")
db_projects.append(project)
return {"message": "Proje başarıyla eklendi", "data": project}
@app.get("/projects/", response_model=List[Project])
async def get_projects():
return db_projects
Burada Pydantic:
- Gelen JSON verisindeki tipleri denetler.
- Hatalı veya eksik parametre gönderildiğinde otomatik olarak açıklayıcı bir 422 hatası döndürür.
4. Sihirli Özellik: Otomatik Dokümantasyon
FastAPI'ın en büyük konforu, ekstra hiçbir ayar yapmadan etkileşimli API dokümantasyonu üretmesidir.
Sunucunuz çalışırken tarayıcınızdan şu adrese gidin:
http://127.0.0.1:8000/docs
Karşınıza Swagger UI paneli çıkacak. Buradan Postman kullanmaya gerek kalmadan tüm endpoint'leri doğrudan test edebilirsiniz.
Alternatif dokümantasyon paneli:
http://127.0.0.1:8000/redoc
Sonuç
FastAPI; temiz kod mimarisi, asenkron yapısı ve tip güvenliği ile modern Python projelerinin vazgeçilmezidir. Birkaç satır kodla hem performanslı bir API elde edebilir hem de otomatik dokümantasyon sayesinde diğer istemcilerle entegrasyonu hızlandırabilirsiniz.
İlerleyen yazılarda veritabanı bağlantısını ve JWT tabanlı kimlik doğrulamayı inceleyeceğiz.
Kodlamaya devam!
Mehmet Amed Ürey
LinkedIn: https://share.google/tdTewAeweqj46mrIL
Hashnode: https://hashnode.com/@mehmetamedurey
Top comments (0)