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

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

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

До сих пор все маршруты в уроках были GET: браузер или /docs запрашивали данные, а сервер отвечал списком или одним объектом. Теперь нужно принять данные от клиента — JSON в теле запроса. Для этого подключается другой HTTP-метод и первая модель Pydantic.

POST-маршрут и несовпадение HTTP-метода

FastAPI сопоставляет входящий запрос сразу по двум параметрам: пути и методу. Декоратор @app.get("/api/rooms") регистрирует обработчик только для метода GET. Если клиент отправит на тот же путь POST-запрос, FastAPI вернёт 405 Method Not Allowed — маршрут найден, но метод не совпадает.

Чтобы принимать POST на /api/rooms, нужен отдельный декоратор:

@app.post("/api/rooms")
def create_room():
    return {"ok": True}

Этот и GET-маршрут могут сосуществовать на одном пути — каждый обслуживает свой метод своей функцией. FastAPI просто выбирает нужный обработчик по методу входящего запроса.

В интерфейсе /docs POST и GET отображаются отдельными секциями для одного пути. Ошибка 405 появляется именно тогда, когда путь зарегистрирован, но для другого метода: не стоит путать её с 404, которая означает, что пути вообще нет.

Этот обработчик возвращает одинаковый {"ok": true} независимо от отправленного тела: аргумента для его получения пока нет.