Depends — механизм dependency injection в FastAPI. Endpoint объявляет, какие данные или сервисы ему нужны, а FastAPI вызывает dependency-функцию, разрешает её параметры и передаёт результат в endpoint.
Что такое Depends (Dependency Injection) в FastAPI?
Подробный ответ
Что такое 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 paginationFastAPI самостоятельно вызовет 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-функцию. Это делает код переиспользуемым и тестируемым.
Оцени свой прогресс