PRO

Что такое Depends (Dependency Injection) в FastAPI?

Depends — механизм dependency injection в FastAPI. Endpoint объявляет, какие данные или сервисы ему нужны, а FastAPI вызывает dependency-функцию, разрешает её параметры и передаёт результат в endpoint.
Подробный ответ

Что такое dependency injection

Dependency injection — это подход, при котором функция не создаёт нужные ей зависимости самостоятельно, а получает их извне. В FastAPI endpoint может объявить, что ему нужен, например, текущий пользователь, сессия базы данных, настройки или общие query-параметры.

Простой пример

from fastapi import Depends, FastAPI

app = FastAPI()


def get_pagination(limit: int = 20, offset: int = 0):
    return {'limit': limit, 'offset': offset}


@app.get('/articles')
def get_articles(pagination: dict = Depends(get_pagination)):
    return pagination

FastAPI самостоятельно вызовет get_pagination, получит параметры из запроса и передаст его результат в pagination.

Для чего используют Depends

  • получение сессии базы данных;

  • аутентификация и получение текущего пользователя;

  • проверка ролей и прав доступа;

  • общие параметры фильтрации и пагинации;

  • доступ к конфигурации и внешним клиентам.

Dependencies с yield

Если ресурс нужно не только создать, но и гарантированно закрыть, dependency может использовать yield. Код после yield выполнится после завершения обработки запроса.

def get_resource():
    resource = create_resource()
    try:
        yield resource
    finally:
        resource.close()

Преимущества

Dependencies уменьшают дублирование кода и упрощают тестирование: dependency можно переопределить в тесте и передать фейковую базу, пользователя или внешний сервис.

Как ответить на собеседовании

Depends — это встроенный механизм dependency injection в FastAPI. Я использую его, чтобы endpoint не создавал сам сессию БД, текущего пользователя или общие параметры, а получал их через dependency-функцию. Это делает код переиспользуемым и тестируемым.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге