Какой ключевой паттерн проектирования отличает FastAPI от других Python-фреймворков?

Ответ

Ключевой паттерн, который выделяет 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): Логика получения зависимости отделена от бизнес-логики эндпоинта.