FastAPI gibt standardmäßig JSON zurück (serialisiert dicts, lists und Pydantic models), unterstützt aber viele andere Antworttypen für verschiedene Anforderungen — HTML, Dateien, Streams, Umleitungen und Klartext — über die Klassen in fastapi.responses.
Standard- und häufige Antwortklassen
from fastapi.responses import (
JSONResponse, HTMLResponse, PlainTextResponse,
RedirectResponse, FileResponse, StreamingResponse,
)
@app.get("/json")
def j(): return {"key": "value"} # default → JSON
@app.get("/html", response_class=HTMLResponse)
def h(): return "<h1>Hello</h1>" # serve HTML
@app.get("/text", response_class=PlainTextResponse)
def t(): return "plain text"
@app.get("/go")
def g(): return RedirectResponse(url="/new-location") # 307 redirect
Dateien bereitstellen
@app.get("/download")
def download():
return FileResponse(
"report.pdf",
media_type="application/pdf",
filename="report.pdf", # prompts a download with this name
)
FileResponse stellt eine Datei von der Festplatte effizient bereit (verwaltet Header, Content-Typ) — für Downloads, Bilder, generierte Dokumente.
Streaming großer oder generierter Daten
@app.get("/stream")
def stream():
def generate():
for i in range(1000000):
yield f"line {i}\n" # yield chunks — NOT all loaded into memory
return StreamingResponse(generate(), media_type="text/plain")
StreamingResponse sendet Daten schrittweise von einem Generator — unverzichtbar für große oder kontinuierlich generierte Daten (große Dateien, CSV-Exporte, Live-Feeds), damit Sie alles nicht auf einmal in den Speicher laden. (Auch die Basis von Server-Sent Events.)
Benutzerdefinierte JSON-Encoder (schnelleres JSON)
from fastapi.responses import ORJSONResponse
app = FastAPI(default_response_class=ORJSONResponse) # use orjson for faster JSON serialization
Warum es wichtig ist
Objekt JSON die meisten API-Antworten abdeckt, benötigen echte Anwendungen häufig die Rückgabe anderer Inhalte — und die Kenntnis der Antworttypen von FastAPI ermöglicht es Ihnen, diese korrekt zu verarbeiten. FileResponse ist erforderlich, um Dateien und Downloads bereitzustellen (Berichte, Bilder, generierte Dokumente), StreamingResponse ist wichtig für speichereffiziente Bereitstellung großer oder kontinuierlich generierter Daten (große Exporte, Datei-Streaming, Server-Sent Events — Ausgabe von Chunks statt alles im Speicher zu puffern, was für Skalierbarkeit wichtig ist), und HTMLResponse/PlainTextResponse/RedirectResponse verarbeiten nicht-JSON-Inhalte und Navigation.
Das Verständnis der verfügbaren Antworttypen und besonders wann Sie streamen sollen (für große Daten, um Speichererschöpfung zu vermeiden) gegenüber JSON zurückgeben, ist praktisches Wissen für den Aufbau von APIs, die über einfache JSON-Endpunkte hinausgehen — Dateidownloads, Datenexporte und große oder Echtzeit-Antworten, die in realen Anwendungen häufige Anforderungen sind, abdecken.
