Когда вам необходимо отправить данные из клиента (допустим, браузера) в ваш API, вы отправляете их как тело запроса.
Тело запроса --- это данные, отправляемые клиентом в ваш API. Тело ответа --- это данные, которые ваш API отправляет клиенту.
Ваш API почти всегда отправляет тело ответа. Но клиентам не обязательно всегда отправлять тело запроса.
Чтобы объявить тело запроса, необходимо использовать модели Pydantic, со всей их мощью и преимуществами.
Информация
Чтобы отправить данные, необходимо использовать один из методов: POST (обычно), PUT, DELETE или PATCH.
Отправка тела с запросом GET имеет неопределенное поведение в спецификациях, тем не менее, оно поддерживается FastAPI только для очень сложных/экстремальных случаев использования.
Поскольку это не рекомендуется, интерактивная документация со Swagger UI не будет отображать информацию для тела при использовании метода GET, а промежуточные прокси-серверы могут не поддерживать такой вариант запроса.
Также как и при описании параметров запроса, когда атрибут модели имеет значение по умолчанию, он является необязательным. Иначе он обязателен. Используйте None, чтобы сделать его необязательным без использования конкретных значений по умолчанию.
Например, модель выше описывает вот такой JSON "объект" (или словарь Python):
Всего лишь с помощью аннотации типов Python, FastAPI:
Читает тело запроса как JSON.
Приводит к соответствующим типам (если есть необходимость).
Проверяет корректность данных.
Если данные некорректны, будет возращена читаемая и понятная ошибка, показывающая что именно и в каком месте некорректно в данных.
Складывает полученные данные в параметр item.
Поскольку внутри функции вы объявили его с типом Item, то теперь у вас есть поддержка со стороны редактора (автодополнение и т.п.) для всех атрибутов и их типов.
Генерирует декларативное описание модели в виде JSON Schema, так что вы можете его использовать где угодно, если это имеет значение для вашего проекта.
Эти схемы являются частью сгенерированной схемы OpenAPI и используются для автоматического документирования UI.
В вашем редакторе внутри вашей функции у вас будут подсказки по типам и автодополнение (это не будет работать, если вы получаете словарь вместо модели Pydantic):
Также вы будете получать ошибки в случае несоответствия типов:
Это не случайно, весь фреймворк построен вокруг такого дизайна.
И это все тщательно протестировано еще на этапе разработки дизайна, до реализации, чтобы это работало со всеми редакторами.
Для поддержки этого даже были внесены некоторые изменения в сам Pydantic.
Вы можете одновременно объявлять параметры пути и тело запроса.
FastAPI распознает, какие параметры функции соответствуют параметрам пути и должны быть получены из пути, а какие параметры функции, объявленные как модели Pydantic, должны быть получены из тела запроса.