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
Такой подход облегчает тестирование, поддержку и расширение приложения.