FastAPI Rehberi: Modern ve Hızlı API Geliştirme Başlangıcı
Yazar: Burak Balkı | Kategori: Mobile Development | Okuma Süresi: 9 dk
FastAPI başlangıç rehberi ile modern, asenkron ve yüksek performanslı Python API'ları geliştirmeyi öğrenin. Kurulumdan güvenliğe kadar tüm temel adımlar.
FastAPI, modern Python 3.8+ özellikleri üzerine inşa edilmiş, yüksek performanslı ve öğrenmesi kolay bir web framework'üdür. Özellikle mobil uygulama arka uçları (backend) ve mikro hizmet mimarileri için tasarlanan bu yapı, geliştirici verimliliğini en üst düzeye çıkarırken hata oranını minimize eder.
## FastAPI Nedir ve Neden Tercih Edilmelidir?
**FastAPI**, Python ekosistemindeki en hızlı web framework'lerinden biri olarak kabul edilir. Performansı, Starlette (web parçaları için) ve Pydantic (veri parçaları için) kütüphanelerine dayanır. Mobil geliştirme süreçlerinde API hızı ve veri tutarlılığı kritik önem taşır. FastAPI, otomatik olarak oluşturulan **OpenAPI** ve **JSON Schema** belgeleri sayesinde frontend ve mobil ekipleriyle olan iletişimi mükemmelleştirir.
| Özellik | Açıklama |
| :--- | :--- |
| **Hız** | NodeJS ve Go ile yarışacak düzeyde yüksek performans. |
| **Hızlı Kodlama** | Özellik geliştirme hızını %200 ila %300 oranında artırır. |
| **Daha Az Hata** | İnsan kaynaklı hataları %40 oranında azaltır. |
| **Sezgisel** | Harika editör desteği ve otomatik tamamlama. |
| **Standartlara Uygun** | OpenAPI ve JSON Schema ile tam uyumluluk. |
## Temel Kavramlar: ASGI, Starlette ve Pydantic
FastAPI'yi anlamak için temel aldığı teknolojileri bilmek gerekir. **ASGI (Asynchronous Server Gateway Interface)**, Python web sunucuları ve uygulamaları arasında asenkron bir standart sağlar. **Starlette**, FastAPI'nin web yeteneklerini (routing, server-side events) sağlayan hafif bir ASGI framework'üdür. **Pydantic** ise Python tip ipuçlarını (type hints) kullanarak veri doğrulama ve serileştirme işlemlerini yönetir.
## FastAPI Kurulumu ve Geliştirme Ortamının Hazırlanması
FastAPI kurulumu oldukça basittir. Ancak bir üretim sunucusu için bir ASGI sunucusuna (genellikle **Uvicorn**) ihtiyacınız vardır.
```bash
pip install fastapi
pip install "uvicorn[standard]"
```
Kurulum tamamlandıktan sonra, projeniz için bir `main.py` dosyası oluşturarak ilk adımınızı atabilirsiniz.
## İlk Uygulamanın Oluşturulması: Merhaba FastAPI
En temel FastAPI uygulaması sadece birkaç satır koddan oluşur. Bu sadelik, karmaşık mobil backend yapılarının temelini oluşturur.
```python
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "FastAPI ile mobil backend dünyasına hoş geldiniz"}
```
Uygulamayı çalıştırmak için terminale şu komutu girin:
```bash
uvicorn main:app --reload
```
## Parametre Yönetimi: Path ve Query Parametreleri
API tasarlarken dinamik verilere ihtiyaç duyarız. FastAPI, path (yol) ve query (sorgu) parametrelerini Python tip belirteçleri ile yönetmeyi sağlar.
```python
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "query": q}
```
Bu kod bloğunda `item_id` bir tam sayı olarak zorunlu tutulurken, `q` parametresi opsiyonel bir metin olarak tanımlanmıştır. Tip uyuşmazlığı durumunda FastAPI otomatik olarak hata mesajı döner.
## Veri Doğrulama ve Pydantic Modelleri
Mobil uygulamalardan gelen POST isteklerinde verinin belirli bir şemaya uyması gerekir. **Pydantic**, bu doğrulama işlemini otomatikleştirir.
```python
from pydantic import BaseModel
from typing import Optional
class User(BaseModel):
username: str
email: str
full_name: Optional[str] = None
is_active: bool = True
@app.post("/users/")
async def create_user(user: User):
return user
```
## Dependency Injection (Bağımlılık Enjeksiyonu)
FastAPI, bağımlılık enjeksiyonu sistemini yerleşik olarak sunar. Bu, veritabanı bağlantıları veya güvenlik kontrolleri gibi tekrarlayan mantıkları yönetmek için mükemmeldir.
```python
from fastapi import Depends
async def common_parameters(q: Optional[str] = None, skip: int = 0, limit: int = 10):
return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)):
return commons
```
## Veritabanı Entegrasyonu ve CRUD İşlemleri
FastAPI herhangi bir ORM (Object Relational Mapper) ile çalışabilir. En popüler seçeneklerden biri olan SQLAlchemy entegrasyonu şu şekilde kurgulanır:
```python
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
# Veritabanı modeli ve CRUD fonksiyonları burada tanımlanır
```
## Mobil Uygulamalar İçin Güvenlik ve OAuth2
Bir mobil backend için güvenlik en kritik unsurdur. FastAPI, OAuth2 ve JWT (JSON Web Tokens) desteği ile güvenli kimlik doğrulama akışları oluşturmayı kolaylaştırır.
```python
from fastapi.security import OAuth2PasswordBearer
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
@app.get("/users/me")
async def read_users_me(token: str = Depends(oauth2_scheme)):
return {"token": token}
```
## Hata Yönetimi ve Özel İstisnalar
Kullanıcıya anlamlı hata mesajları dönmek, mobil uygulama tarafındaki hata yönetimini kolaylaştırır.
```python
from fastapi import HTTPException
@app.get("/items/{item_id}")
async def get_item(item_id: int):
if item_id == 0:
raise HTTPException(status_code=404, detail="Ürün bulunamadı")
return {"item_id": item_id}
```
## Arka Plan Görevleri (Background Tasks)
E-posta gönderme veya bildirim tetikleme gibi uzun süren işlemleri API yanıtını geciktirmeden arka planda yürütebilirsiniz.
```python
from fastapi import BackgroundTasks
def send_email(email: str, message: str):
print(f"{email} adresine mesaj gönderildi: {message}")
@app.post("/notify/")
async def notify_user(email: str, background_tasks: BackgroundTasks):
background_tasks.add_task(send_email, email, "Hoş geldiniz!")
return {"message": "Bildirim sıraya alındı"}
```
## Test Süreçleri ve TestClient
FastAPI uygulamalarını test etmek için `TestClient` kullanılır. Bu, uygulamanın uç noktalarını simüle etmenizi sağlar.
```python
from fastapi.testclient import TestClient
client = TestClient(app)
def test_read_main():
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"message": "FastAPI ile mobil backend dünyasına hoş geldiniz"}
```
## Performans İpuçları ve Best Practices
FastAPI'den maksimum verim almak için şu kurallara uyun:
- **Asenkron Fonksiyonlar:** I/O işlemleri (veritabanı, ağ istekleri) için mutlaka `async def` kullanın.
- **Pydantic Modelleri:** Veri giriş ve çıkışları için her zaman model kullanın, ham sözlük (dict) kullanmaktan kaçının.
- **Gunicorn ile Dağıtım:** Üretim ortamında çalışan işçi sayısını yönetmek için Gunicorn ve Uvicorn işçilerini birlikte kullanın.
- **Dokümantasyonu Özelleştirin:** `FastAPI(title="Mobil API")` gibi parametrelerle dokümantasyonunuzu kurumsal hale getirin.
## Sık Sorulan Sorular
1. **FastAPI neden Flask'tan daha hızlı?**
FastAPI, asenkron (async/await) desteği sunan ASGI standardını kullanır ve veri doğrulamayı en hızlı Python kütüphanesi olan Pydantic ile yapar.
2. **Öğrenmek için ne kadar Python bilmeliyim?**
Temel Python bilgisi ve özellikle 'Type Hints' (Tip İpuçları) kavramına aşinalık yeterlidir.
3. **Otomatik dokümantasyona nasıl erişirim?**
Uygulama çalışırken `/docs` (Swagger UI) veya `/redoc` (ReDoc) adreslerine giderek erişebilirsiniz.
4. **FastAPI ile hangi veritabanlarını kullanabilirim?**
PostgreSQL, MySQL, SQLite, MongoDB ve Redis dahil olmak üzere tüm modern veritabanlarıyla uyumludur.
5. **Büyük projeler için uygun mu?**
Evet, Netflix ve Uber gibi dev şirketler FastAPI'yi mikro hizmet mimarilerinde aktif olarak kullanmaktadır.
## Özet ve Sonuç
FastAPI, hızı, güvenliği ve geliştirici dostu yapısıyla modern backend geliştirme dünyasında yeni bir standart belirlemiştir. Mobil uygulama geliştiricileri için sunduğu otomatik dokümantasyon ve veri doğrulama özellikleri, hata payını azaltırken geliştirme sürelerini kısaltır. Bu rehberdeki adımları takip ederek, siz de ölçeklenebilir ve yüksek performanslı API'lar inşa etmeye başlayabilirsiniz.