Ответ
Depends — это ключевой компонент FastAPI, реализующий механизм внедрения зависимостей (Dependency Injection).
Он позволяет вашим обработчикам маршрутов (endpoints) декларативно объявлять зависимости (например, сессию БД, аутентификацию пользователя), которые им необходимы для работы. FastAPI берет на себя заботу о выполнении этих зависимостей и передаче результата в ваш эндпоинт.
Основные сценарии использования:
- Переиспользование логики: Вынесение общего кода, такого как параметры пагинации, в одну функцию.
- Авторизация и аутентификация: Защита эндпоинтов, требующая проверки токенов или прав доступа.
- Работа с базой данных: Создание и автоматическое закрытие сессий БД для каждого запроса.
Пример (общие параметры запроса):
from typing import Optional
from fastapi import Depends, FastAPI
app = FastAPI()
# Функция-зависимость
def common_parameters(q: Optional[str] = None, skip: int = 0, limit: int = 100):
return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/")
# FastAPI вызовет common_parameters и передаст результат в 'commons'
async def read_items(commons: dict = Depends(common_parameters)):
return commons
Ключевые преимущества:
- DRY (Don't Repeat Yourself): Избавляет от дублирования кода.
- Разделение логики: Эндпоинты занимаются только бизнес-логикой, а зависимости — своей задачей (например, аутентификацией).
- Интеграция с OpenAPI: Зависимости автоматически документируются в Swagger UI.
- Простое тестирование: Зависимости можно легко подменить (mock) в тестах.