FastAPI ve Flask: Python ile web API’leri kurmak
Kısaca: Flask yalın bir web sunucu çerçevesidir, FastAPI otomatik doğrulama ve belgelendirme için tür ek açıklamalarını kullanır; ikisi de birkaç satır kodla JSON API’leri sunar.
Biraz daha ayrıntılı: Python programları bir web API’si olarak sunulabilir: tarayıcı/uygulama HTTP istekleri gönderir, sunucu JSON ile yanıt verir. Flask (2010) ve FastAPI (2018) iki popüler çerçevedir; Django “her şey dahil” varyantıdır.
Ayrıntılı
10 satırda Flask
from flask import Flask, jsonify, request
app = Flask(__name__)
games = [{"id": 1, "title": "Zelda"}]
@app.get("/games")
def list_games():
return jsonify(games)
@app.post("/games")
def create():
data = request.get_json()
games.append({"id": len(games) + 1, **data})
return jsonify(games[-1]), 201Başlat: flask --app app run --debug. Hata ayıklama kipi asla internette/üretimde olmamalı (kod çalıştırma mümkün). Üretim: Nginx arkasında Gunicorn/uWSGI. Doğrulamayı ve belgeleri kendin ekle (veya eklentiler: Marshmallow, Flask-RESTX).
FastAPI
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field
app = FastAPI()
class GameIn(BaseModel):
title: str = Field(min_length=1, max_length=80)
price: float = Field(gt=0)
@app.post("/games", status_code=201)
async def create(game: GameIn):
return {"id": 1, **game.model_dump()}
@app.get("/games/{game_id}")
async def read(game_id: int):
if game_id != 1:
raise HTTPException(404, "not found")
return {"id": 1, "title": "Zelda"}Başlat: uvicorn main:app --reload. Tür ek açıklamaları + pydantic girdileri otomatik doğrular (hatalılar → hata listesiyle 422); /docs (Swagger UI) ve /redoc OpenAPI’den otomatik üretilir. async mümkün (ASGI), bağımlılık enjeksiyonu (Depends), kimlik doğrulama (OAuth2/JWT yardımcıları).
Karşılaştırma
- Flask: asgari, esnek, devasa ekosistem, senkron (async sınırlı); öğrenme/küçük hizmetler/sunucuda işlenen sayfalar (Jinja) için iyi.
- FastAPI: modern, tür tabanlı, otomatik doğrulama + belgeler, yüksek performans, JSON API’leri/ML hizmetleri için ideal.
- Django: ORM, yönetim, kimlik doğrulama, formlar dahili; daha büyük web uygulamaları için.
- Alternatifler: Litestar, Starlette, aiohttp, Express (JS), Spring Boot (Java).
- Dağıtım: Docker, uvicorn/gunicorn, ters proxy, HTTPS, sırlar için ortam değişkenleri.
Güvenlik ve uygulama
- Girdilere asla güvenme: doğrula; SQL enjeksiyonundan kaçın (parametreli sorgular/ORM).
- CORS’u bilinçli yapılandır, hız sınırlama, kimlik doğrulama/yetkilendirme, HTTPS, iç ayrıntı içermeyen hata sayfaları.
- Sırlar kodda değil; parolasız günlükleme.
- Testler: pytest ile
TestClient(FastAPI) /app.test_client()(Flask). - Proje yapısı: yönlendiriciler/blueprint’ler, katmanlar (API → servis → veri tabanı), yapılandırma.
- API olarak bir ML modeli (FastAPI + ONNX/scikit-learn) klasik bir örnektir.
- Sınav/proje: REST ilkelerini uygula (kaynaklar, yöntemler, durum kodları).
Ayrıca bak: REST API tasarımı, Django, Tür ek açıklamaları, OpenAPI ve Swagger