EMZETT.
Giriş yap

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]), 201

Baş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