Ответ
Ключевой паттерн, который выделяет FastAPI, — это Внедрение зависимостей (Dependency Injection, DI).
Этот механизм встроен в ядро фреймворка и позволяет декларативно управлять зависимостями, такими как сессии базы данных, аутентификация или конфигурация. Это упрощает тестирование и переиспользование кода.
Пример: зависимость для получения сессии БД
from fastapi import FastAPI, Depends
from typing import Generator
app = FastAPI()
# Зависимость: генератор, который создает и закрывает сессию
def get_db_session() -> Generator:
db = "database_session_started"
try:
yield db
finally:
# Этот код выполнится после отправки ответа
print("database_session_closed")
@app.get("/items/")
async def read_items(db_session: str = Depends(get_db_session)):
# Логика, использующая сессию БД
return {"message": f"Data fetched using {db_session}"}
Почему это важно:
- Тестируемость: Зависимости (
get_db_session
) легко подменить моками (mocks) в тестах. - Переиспользование кода: Одна и та же зависимость (например, проверка токена) может использоваться в десятках эндпоинтов.
- Разделение ответственности (SoC): Логика получения зависимости отделена от бизнес-логики эндпоинта.