Выбор ответа Junior FastAPI и Pydantic обновлено

Annotated в параметрах FastAPI

Вопрос

Зачем пишут user: Annotated[User, Depends(current_user)] вместо user: User = Depends(current_user)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Тип и метаданные разделены, сигнатура корректна, а зависимость легко переиспользовать. Annotated из typing прикрепляет к типу метаданные (Depends, Query, Path), не подменяя значение по умолчанию.

Варианты ответа

  1. Тип и метаданные разделены, сигнатура корректна, а зависимость легко переиспользоватьправильный ответ
  2. Без Annotated зависимость не будет вызвана, если у параметра нет значения по умолчанию
  3. Это ускоряет запросы: FastAPI кеширует граф зависимостей по аннотациям типов
  4. Annotated нужен только для query-параметров, а для Depends он ничего не меняет

Разбор

Annotated из typing прикрепляет к типу метаданные (Depends, Query, Path), не подменяя значение по умолчанию. Можно объявить CurrentUser = Annotated[User, Depends(current_user)] и писать user: CurrentUser везде. Документация FastAPI рекомендует этот стиль, но старый тоже работает. На скорость он не влияет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.