Modern web uygulamalarının kalbinde hızlı, ölçeklenebilir ve güvenilir API’ler yer alır. Python ekosisteminin en popüler framework’lerinden biri olan FastAPI, hem geliştirici deneyimini ön planda tutması hem de inanılmaz performansıyla kısa sürede standart haline geldi. Peki, FastAPI’yi bu kadar güçlü kılan nedir ve sıfırdan bir API nasıl inşa edilir?
Ne Yaptık? Bir Envanter Yönetim Sistemi
Bu projede, temel bir Envanter Yönetim API’si (Inventory Management API) oluşturduk. Uygulama, ürünlerin listelenmesi, belirli bir ürünün ID üzerinden getirilmesi ve yeni ürünlerin sisteme eklenmesi gibi temel REST fonksiyonlarını yerine getiriyor.
Ancak burada asıl odak noktamız sadece bir “envanter listesi” yapmak değil; FastAPI’nin sunduğu modern mimariyi deneyimlemekti. Geleneksel senkron (synchronous) yapılardan farklı olarak, FastAPI ASGI (Asynchronous Server Gateway Interface) tabanlıdır. Bu sayede async ve await anahtar kelimeleriyle, sunucumuz bir isteğin tamamlanmasını beklerken diğer isteklere yanıt verebilir. Bu, özellikle yüksek trafikli uygulamalarda performansı dramatik şekilde artırır.
Kodun Anatomisi
Projeyi incelerken karşımıza çıkan üç ana sütun var: Uygulama örneği, veri doğrulama şemaları ve yönlendirme (routing) mekanizması.
1. FastAPI Uygulama Örneği
app = FastAPI() satırı ile uygulamanın kalbini oluşturuyoruz. Burada verdiğimiz title ve description gibi parametreler sadece süs değil; FastAPI bunları kullanarak otomatik olarak etkileşimli bir dokümantasyon sayfası (Swagger UI) üretir.
2. Pydantic ile Tip Güvenliği ve Doğrulama
FastAPI’nin en büyük sırlarından biri Pydantic kütüphanesini kullanmasıdır. ItemSchema sınıfı ile gelen verinin formatını önceden belirliyoruz:
sku: En az 3 karakter olmalı.price: Mutlaka 0’dan büyük (gt=0.0) bir sayı olmalı.
Eğer kullanıcı hatalı bir veri gönderirse, FastAPI daha fonksiyonumuz çalışmadan otomatik olarak bir 422 Unprocessable Entity hatası döndürür. Bu, manuel hata kontrolü zahmetini ortadan kaldırır.
3. Asenkron Yönlendirmeler
@app.get ve @app.post dekoratörleri ile URL yollarını tanımlıyoruz. async def kullanarak fonksiyonlarımızı asenkron hale getiriyoruz.
İşte projenin kilit noktalarını içeren sadeleştirilmiş kod bloğu:
from fastapi import FastAPI, HTTPException, status
from pydantic import BaseModel, Field
app = FastAPI(title="Envanter API")
# Veri Doğrulama Şeması
class ItemSchema(BaseModel):
sku: str = Field(..., min_length=3)
name: str = Field(..., min_length=1)
price: float = Field(..., gt=0.0)
# Bellek içi basit veritabanı
DB = {1: {"id": 1, "sku": "KEY-01", "name": "Klavye", "price": 500.0}}
@app.get("/items/{item_id}")
async def get_item(item_id: int):
if item_id not in DB:
raise HTTPException(status_code=404, detail="Ürün bulunamadı")
return DB[item_id]
@app.post("/items", status_code=status.HTTP_201_CREATED)
async def create_item(payload: ItemSchema):
new_id = max(DB.keys()) + 1
item = {"id": new_id, **payload.dict()}
DB[new_id] = item
return item
Nasıl Çalıştırılır?
FastAPI’yi çalıştırmak için sadece framework’ün kendisi yetmez; onu ayağa kaldıracak bir ASGI sunucusuna (örneğin Uvicorn) ihtiyaç vardır.
- Bağımlılıkları Kurun:
pip install fastapi uvicorn pydantic - Sunucuyu Başlatın:
python main.py(Not: Eğermain.pyiçindeuvicorn.runbloğu yoksa, terminaldenuvicorn main:app --reloadkomutunu kullanabilirsiniz.) - Sihre Tanıklık Edin:
Tarayıcınızdanhttp://127.0.0.1:8000/docsadresine gidin. FastAPI’nin sizin için hazırladığı interaktif Swagger UI dokümantasyonunu göreceksiniz. Buradan hiçbir kod yazmadan API uç noktalarını test edebilirsiniz.
Ne Öğrendik?
Bu proje ile modern Python web geliştirmenin temel taşlarını inceledik:
- Asenkron Programlama:
async/awaitile non-blocking (bloklamayan) yapılar kurmayı. - Otomatik Doğrulama: Pydantic ile veri tipini ve kısıtlamalarını belirlemeyi.
- Hızlı Dokümantasyon: OpenAPI standartları sayesinde anında test edilebilir belgeler oluşturmayı.
- HTTP Durum Kodları:
201 Createdveya404 Not Foundgibi standartlara uygun yanıtlar dönmeyi.
Kaynaklar ve Sonraki Adımlar
FastAPI dünyası çok derin. Daha fazlasını öğrenmek için resmi dokümantasyona göz atabilir veya veritabanı entegrasyonu (SQLAlchemy, MongoDB) üzerine çalışmaya başlayabilirsiniz.
Ahmet Aksoy
Not: Bu yazıda incelediğimiz kodu ve benzer projelerin kaynak kodlarını https://github.com/ahmetax/practical-python-examples adresinde bulabilirsiniz.
fastapi, python, web geliştirme, rest api, pydantic, asenkron programlama, başlangıç seviyesi, yazılım, kod