Ответ
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 "