EMZETT.
Login

FastAPI und Flask: Web-APIs mit Python bauen

Kurz: Flask ist ein schlanker Webserver-Rahmen, FastAPI nutzt Typannotationen für automatische Validierung und Dokumentation; beide liefern JSON-APIs mit wenigen Zeilen Code.

Genauer: Python-Programme lassen sich als Web-API bereitstellen: Der Browser/die App schickt HTTP-Anfragen, der Server antwortet mit JSON. Flask (2010) und FastAPI (2018) sind zwei beliebte Frameworks; Django ist die „Batterien-inklusive“-Variante.

Im Detail

Flask in 10 Zeilen

from flask import Flask, jsonify, request
app = Flask(__name__)
spiele = [{"id": 1, "titel": "Zelda"}]
 
@app.get("/spiele")
def liste():
    return jsonify(spiele)
 
@app.post("/spiele")
def neu():
    daten = request.get_json()
    spiele.append({"id": len(spiele) + 1, **daten})
    return jsonify(spiele[-1]), 201

Starten: flask --app app run --debug. Debug-Modus nie im Internet/Produktion (Code-Ausführung möglich). Produktion: Gunicorn/uWSGI hinter Nginx. Validierung und Doku selbst ergänzen (oder Erweiterungen: Marshmallow, Flask-RESTX).

FastAPI

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field
 
app = FastAPI()
 
class SpielIn(BaseModel):
    titel: str = Field(min_length=1, max_length=80)
    preis: float = Field(gt=0)
 
@app.post("/spiele", status_code=201)
async def neu(spiel: SpielIn):
    return {"id": 1, **spiel.model_dump()}
 
@app.get("/spiele/{spiel_id}")
async def lesen(spiel_id: int):
    if spiel_id != 1:
        raise HTTPException(404, "nicht gefunden")
    return {"id": 1, "titel": "Zelda"}

Start: uvicorn main:app --reload. Typannotationen + pydantic validieren Eingaben automatisch (fehlerhafte → 422 mit Fehlerliste); /docs (Swagger UI) und /redoc werden automatisch aus OpenAPI erzeugt. async möglich (ASGI), Dependency Injection (Depends), Authentifizierung (OAuth2/JWT-Helfer).

Vergleich

  • Flask: minimal, flexibel, riesiges Ökosystem, sync (async eingeschränkt); gut zum Lernen/kleinen Diensten/Server-seitig gerenderten Seiten (Jinja).
  • FastAPI: modern, typbasiert, automatische Validierung + Doku, hohe Leistung, ideal für JSON-APIs/ML-Dienste.
  • Django: ORM, Admin, Auth, Formulare eingebaut; für größere Webanwendungen.
  • Alternativen: Litestar, Starlette, aiohttp, Express (JS), Spring Boot (Java).
  • Deployment: Docker, uvicorn/gunicorn, Reverse Proxy, HTTPS, Umgebungsvariablen für Geheimnisse.

Sicherheit und Praxis

  • Eingaben nie trauen: validieren; SQL-Injection vermeiden (Parameterized Queries/ORM).
  • CORS gezielt konfigurieren, Rate Limiting, Authentifizierung/Autorisierung, HTTPS, Fehlerseiten ohne Interna.
  • Secrets nicht im Code; Logging ohne Passwörter.
  • Tests: TestClient (FastAPI) / app.test_client() (Flask) mit pytest.
  • Projektstruktur: Router/Blueprints, Schichten (API → Service → Datenbank), Konfiguration.
  • Ein ML-Modell als API (FastAPI + ONNX/scikit-learn) ist ein klassisches Beispiel.
  • Prüfung/Projekt: REST-Prinzipien (Ressourcen, Methoden, Statuscodes) anwenden.

Siehe auch: REST-API-Design, Django, Typannotationen, OpenAPI und Swagger