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