Какие типы ответов можно возвращать в эндпоинтах FastAPI

«Какие типы ответов можно возвращать в эндпоинтах FastAPI» — вопрос из категории Библиотеки и модули, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

FastAPI предоставляет гибкие возможности для возврата различных типов ответов, автоматически выполняя сериализацию данных и установку корректного `Content-Type` заголовка. Основные типы возвращаемых данных: 1. **Модели Pydantic** Это основной и рекомендуемый способ. FastAPI автоматически преобразует модель в JSON, валидирует данные ответа и генерирует OpenAPI схему. ```python 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) ``` 2. **Словарь (`dict`) или список (`list`)** Любой `dict` или `list` будет автоматически сериализован в JSON. ```python @app.get("/info") def get_info(): return {"version": "1.0", "status": "ok"} ``` 3. **Объекты `Response`** Для полного контроля над ответом (статус-код, заголовки, cookies) можно напрямую вернуть экземпляр класса `Response` или его наследников. ```python from fastapi import Response @app.get("/legacy") def get_legacy_data(): data = "some_xml" return Response(content=data, media_type="application/xml") ``` 4. **Специализированные классы `Response`** FastAPI предоставляет готовые классы для распространенных задач: * `JSONResponse`: для явного возврата JSON с кастомными заголовками. * `HTMLResponse`: для возврата HTML-страниц. * `PlainTextResponse`: для простого текста. * `RedirectResponse`: для выполнения HTTP-перенаправлений. * `FileResponse`: для отправки файла из файловой системы. * `StreamingResponse`: для потоковой передачи данных (например, при генерации большого файла). ```python from fastapi.responses import HTMLResponse, RedirectResponse @app.get("/home", response_class=HTMLResponse) def home(): return "

Welcome Home

" @app.get("/docs-redirect") def redirect_to_docs(): return RedirectResponse(url="/docs") ``` 5. **Простые типы** Можно возвращать и простые типы, такие как `str`, `int`, `bytes`. FastAPI автоматически обернет их в соответствующий `Response` (например, `PlainTextResponse` для `str`).