Сравнение применения Depends и обычного вызова функции в FastAPI

Depends включает функцию в граф зависимостей запроса. Прямой вызов в значении параметра выполняется при объявлении обработчика, а не отдельно для каждого запроса.

Короткий ответ

Что ответить на собеседовании

Depends включает функцию в граф зависимостей запроса. Прямой вызов в значении параметра выполняется при объявлении обработчика, а не отдельно для каждого запроса.

Подробный разбор

Ответ с пояснениями

Условие

Разобрать пример на FastAPI и понять, какие выгоды даёт использование Depends(get_current_user) по сравнению с прямым вызовом get_current_user().

# FastAPI
Depends()
@router.get('/books')
async def list_books(
    user=Depends(get_current_user),
    user=get_current_user()
)

Ответ

Depends включает функцию в граф зависимостей запроса. Прямой вызов в значении параметра выполняется при объявлении обработчика, а не отдельно для каждого запроса.

Исходный пример синтаксически некорректен: параметр user объявлен дважды. Правильная форма:

@router.get('/books')
async def list_books(user=Depends(get_current_user)):
    return {'user_id': user.id}

FastAPI разрешает подзависимости, передаёт параметры запроса, поддерживает async-зависимости и завершение ресурсов через yield, а также переопределение зависимостей в тестах. Результат обычно кешируется в пределах одного запроса.

user=get_current_user() вычисляется при определении функции; для async-функции получится объект корутины, а не текущий пользователь. Явный вызов внутри тела возможен, но тогда передачу параметров, ожидание и управление ресурсами нужно организовать самостоятельно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее