Ответ
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")
-
Специализированные классы
Response
FastAPI предоставляет готовые классы для распространенных задач: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
).