POST, JSON-тело и первая модель запроса
Содержание курса
Аргумент-тело в обработчике: получение объекта RoomIn и доступ к полям
Когда аргумент функции-обработчика аннотирован подклассом BaseModel, FastAPI автоматически читает его из тела запроса — не из пути и не из query-строки. Механизм вывода источника встроен в FastAPI: он смотрит на тип аннотации.
Полный рабочий файл выглядит так:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class RoomIn(BaseModel):
name: str
floor: int
capacity: int
@app.post("/api/rooms")
def create_room(room: RoomIn):
return {"received": room.name, "floor": room.floor, "capacity": room.capacity}
Внутри create_room переменная room — это уже готовый объект RoomIn с проверенными полями. Обращение к ним — обычный доступ к атрибутам: room.name, room.floor, room.capacity.
Чтобы проверить в /docs: откройте секцию POST /api/rooms, нажмите Try it out, в поле Request body введите:
{"name": "Лондон", "floor": 2, "capacity": 6}
Нажмите Execute. Ответ будет 200 и тело:
{"received": "Лондон", "floor": 2, "capacity": 6}
/docs отправляет запрос с заголовком Content-Type: application/json — он сообщает серверу формат тела. FastAPI ориентируется именно на него при разборе.
Обработчик может одновременно принимать аргумент-тело и query-параметры или path-параметры: они не конфликтуют, FastAPI разбирает каждый источник отдельно. Данные здесь не сохраняются — обработчик просто возвращает то, что получил, и это достаточно, чтобы убедиться: контракт работает.

