Короткий ответ
Depends указывает FastAPI вызвать переданную функцию перед основным обработчиком и передать её результат как аргумент обработчика — это базовый механизм внедрения зависимостей.
Как это работает подробнее
Функция-зависимость объявляется как обычная Python-функция (может иметь свои параметры — query, path, другие зависимости). FastAPI вызывает её при каждом запросе и передаёт возвращённое значение в параметр эндпоинта, помеченный Depends(функция).
Пример кода
example.py
from fastapi import FastAPI, Depends, Header, HTTPException
app = FastAPI()
def get_current_user(x_token: str = Header()):
if x_token != "secret-token":
raise HTTPException(status_code=401, detail="Invalid token")
return {"username": "alice"}
@app.get("/profile")
def read_profile(user: dict = Depends(get_current_user)):
return user
# GET /profile с заголовком X-Token: secret-token -> {"username": "alice"}
# GET /profile без заголовка -> 401Что использовать на практике
- Практика. Такой подход удобен для повторяющейся логики: получения текущего пользователя из токена, открытия соединения с БД, проверки прав доступа — без дублирования кода в каждом эндпоинте.
Подводные камни
- Риск. Путают
Depends(get_current_user)(вызов без скобок передаёт саму функцию, что и нужно) с ошибочнымDepends(get_current_user())(вызывает функцию один раз при определении маршрута, а не при каждом запросе).