Входные данные и Pydantic v2

POST, JSON-тело и первая модель запроса

Содержание курса

Обязательные поля модели BaseModel

Чтобы FastAPI умел читать JSON-тело и проверять его структуру, нужна модель — класс, наследующий BaseModel из Pydantic:

from pydantic import BaseModel

class RoomIn(BaseModel):
    name: str
    floor: int
    capacity: int

Каждое поле — просто аннотированный атрибут класса. Никаких __init__, __repr__ или ручной валидации писать не нужно: всё это берёт на себя Pydantic.

Все три поля здесь обязательны: у них нет значения по умолчанию. Если входящий JSON не содержит хотя бы одно из них или передаёт значение несовместимого типа (например, строку "шесть" вместо числа в capacity), Pydantic не сможет построить объект RoomIn. FastAPI при этом вернёт 422 Unprocessable Entity и не вызовет функцию-обработчик вообще.

Pydantic также делает мягкое приведение типов там, где это безопасно: строка "2" превратится в int 2 для поля floor. Но строку "два" привести к int не получится — это уже 422.

Важно понимать, что RoomIn описывает контракт входных данных. Всё, что не прошло проверку, до вашего кода не доходит.