Ответ
FastAPI предоставляет гибкие возможности для возврата различных типов ответов, автоматически выполняя сериализацию данных и установку корректного Content-Type заголовка.
Основные типы возвращаемых данных:
-
Модели Pydantic Это основной и рекомендуемый способ. FastAPI автоматически преобразует модель в JSON, валидирует данные ответа и генерирует OpenAPI схему.
from pydantic import BaseModel class Item(BaseModel): name: str price: float @app.get("/items/1", response_model=Item) def get_item(): return Item(name="My Item", price=10.5) -
Словарь (
dict) или список (list) Любойdictилиlistбудет автоматически сериализован в JSON.@app.get("/info") def get_info(): return {"version": "1.0", "status": "ok"} -
Объекты
ResponseДля полного контроля над ответом (статус-код, заголовки, cookies) можно напрямую вернуть экземпляр классаResponseили его наследников.from fastapi import Response @app.get("/legacy") def get_legacy_data(): data = "<data>some_xml</data>" return Response(content=data, media_type="application/xml") -
Специализированные классы
ResponseFastAPI предоставляет готовые классы для распространенных задач:JSONResponse: для явного возврата JSON с кастомными заголовками.HTMLResponse: для возврата HTML-страниц.PlainTextResponse: для простого текста.RedirectResponse: для выполнения HTTP-перенаправлений.FileResponse: для отправки файла из файловой системы.StreamingResponse: для потоковой передачи данных (например, при генерации большого файла).
from fastapi.responses import HTMLResponse, RedirectResponse @app.get("/home", response_class=HTMLResponse) def home(): return "<h1>Welcome Home</h1>" @app.get("/docs-redirect") def redirect_to_docs(): return RedirectResponse(url="/docs") -
Простые типы Можно возвращать и простые типы, такие как
str,int,bytes. FastAPI автоматически обернет их в соответствующийResponse(например,PlainTextResponseдляstr).