Ответ
Основным инструментом для сериализации и валидации данных в FastAPI является библиотека Pydantic.
Она выполняет две ключевые функции:
-
Десериализация и Валидация (Входящие данные): Когда запрос поступает на эндпоинт, FastAPI использует модель Pydantic, указанную в аннотации типа, для парсинга, валидации и преобразования входящих данных (например, JSON) в типизированный Python-объект. Если данные не соответствуют схеме (неверный тип, отсутствуют обязательные поля), FastAPI автоматически возвращает клиенту ошибку
422 Unprocessable Entityс подробным описанием проблемы. -
Сериализация (Исходящие данные): Когда эндпоинт возвращает объект (например, экземпляр модели Pydantic или ORM-модель), FastAPI использует Pydantic для его преобразования в JSON-формат, который отправляется в теле ответа.
Пример:
from fastapi import FastAPI
from pydantic import BaseModel
# 1. Определение модели Pydantic для валидации и сериализации
class Item(BaseModel):
name: str
price: float
is_offer: bool | None = None # Необязательное поле
app = FastAPI()
@app.post("/items/")
# 2. FastAPI использует Item для валидации тела запроса
async def create_item(item: Item):
# Здесь 'item' — это уже валидный экземпляр класса Item
print(item.name)
# 3. Возвращаемый объект будет автоматически сериализован в JSON
return item
Почему это важно?
- Надежность: Строгая типизация и автоматическая валидация предотвращают ошибки, связанные с некорректными данными.
- Автоматическая документация: FastAPI анализирует модели Pydantic для автоматической генерации интерактивной документации (Swagger UI / ReDoc), включая схемы данных, типы полей и обязательность.
- Чистый код: Логика валидации и структура данных инкапсулированы в моделях, что делает код эндпоинтов более лаконичным и сфокусированным на бизнес-логике.