Sobes.tech
Back to questions
Junior — Middle
54

Каким образом ты реализуешь архитектурные решения при работе с FastAPI?

Answer from AI

sobes.tech AI

При работе с FastAPI я придерживаюсь модульной архитектуры, разделяя проект на слои: маршрутизация, бизнес-логика, доступ к данным и модели.

  • Маршруты (routers) организую по функциональным областям, используя APIRouter для удобства и масштабируемости.
  • Сервисы содержат бизнес-логику, чтобы отделить её от контроллеров.
  • Модели Pydantic применяю для валидации и сериализации данных.
  • Для работы с базой данных использую ORM (например, SQLAlchemy) с асинхронным движком, чтобы не блокировать обработку запросов.
  • Конфигурацию и зависимости выношу в отдельные модули, применяя Dependency Injection через FastAPI.

Пример простого маршрута с зависимостью:

from fastapi import FastAPI, Depends

app = FastAPI()

def get_db():
    db = ...  # создание сессии
    try:
        yield db
    finally:
        db.close()

@app.get("/items/{item_id}")
async def read_item(item_id: int, db=Depends(get_db)):
    item = db.query(Item).get(item_id)
    return item

Такой подход облегчает тестирование, поддержку и расширение приложения.