1. Основы архитектуры: настройка окружения FastAPI и интеграция с базой данных MySQL
Основы архитектуры: настройка окружения FastAPI и интеграция с базой данных MySQL
Добро пожаловать в курс Fullstack-разработка сервиса аналитики. В этом цикле статей мы с нуля создадим полноценный сервис для сбора и визуализации данных, используя современные и производительные инструменты. Наша цель — построить приложение, способное обрабатывать входящие события (аналитику), сохранять их в надежную реляционную базу данных и отображать статистику на клиентской части.
В этой первой статье мы заложим фундамент нашего бэкенда. Мы разберем архитектуру приложения, настроим рабочее окружение Python, установим FastAPI и научимся правильно подключаться к базе данных MySQL, используя ORM SQLAlchemy.
Архитектура проекта
Прежде чем писать код, важно понимать, как компоненты нашей системы будут взаимодействовать друг с другом. Мы используем классическую трехзвенную архитектуру:
!Схема взаимодействия компонентов: Клиент, Фронтенд, Бэкенд и База данных
Почему именно этот стек?
* FastAPI: Один из самых быстрых Python-фреймворков. Он поддерживает асинхронность из коробки и автоматически генерирует документацию (Swagger UI). * MySQL: Проверенная временем реляционная база данных, отлично подходящая для структурированных данных аналитики. * SQLAlchemy: Мощная ORM (Object-Relational Mapping), позволяющая работать с базой данных, используя объекты Python вместо написания «сырых» SQL-запросов.
Настройка окружения
Для начала работы вам потребуется установленный Python версии 3.10 или выше. Мы будем использовать виртуальное окружение, чтобы изолировать зависимости нашего проекта от системных библиотек.
1. Создание проекта и виртуального окружения
Создайте папку для проекта и перейдите в нее через терминал:
Теперь создадим виртуальное окружение. В зависимости от вашей операционной системы команды могут немного отличаться.
Для Windows:
Для macOS и Linux:
После активации вы увидите префикс (venv) в командной строке.
2. Установка зависимостей
Нам понадобятся следующие библиотеки:
* fastapi: Сам веб-фреймворк.
* uvicorn: ASGI-сервер для запуска FastAPI.
* sqlalchemy: Инструмент для работы с базой данных.
* pymysql: Драйвер для подключения к MySQL (SQLAlchemy использует его под капотом).
* python-dotenv: Библиотека для управления переменными окружения (чтобы не хранить пароли в коде).
Выполните команду установки:
Структура проекта
Хорошая архитектура начинается с правильной структуры папок. Не стоит сваливать весь код в один файл. Мы будем придерживаться следующей структуры:
Создайте папку app и пустые файлы внутри нее согласно схеме выше.
Настройка базы данных MySQL
Предполагается, что у вас уже установлен MySQL сервер (локально или через Docker). Если вы используете Docker, запустить экземпляр MySQL можно одной командой:
Эта команда запустит базу данных analytics_db на порту 3306 с паролем secret.
Конфигурация через .env
Никогда не пишите пароли от базы данных прямо в Python-коде. Используйте файл .env. Откройте его и добавьте строку подключения:
Формат строки: протокол+драйвер://пользователь:пароль@хост:порт/имя_базы.
Подключение через SQLAlchemy
Теперь настроим файл app/database.py. Этот код будет отвечать за создание соединения (Engine) и сессий.
> Важно: Функция get_db использует конструкцию yield. Это позволяет FastAPI создавать новую сессию для каждого запроса и автоматически закрывать её после завершения обработки, даже если произошла ошибка.
Создание первой модели
Чтобы проверить подключение, опишем простую модель. В файле app/models.py создадим таблицу для хранения событий.
Здесь мы наследуемся от Base, который создали в database.py. SQLAlchemy автоматически превратит этот класс в SQL-запрос CREATE TABLE.
Точка входа: main.py
Теперь соберем всё вместе в файле app/main.py.
Обратите внимание на Depends(database.get_db). Это механизм внедрения зависимостей (Dependency Injection) в FastAPI. Он гарантирует, что у нас будет активная сессия базы данных внутри функции, и она корректно закроется после.
Запуск сервера
Для запуска приложения мы используем Uvicorn. Находясь в корневой папке проекта (где лежит папка app), выполните:
* app.main:app: путь к объекту приложения FastAPI (файл app/main.py, переменная app).
* --reload: флаг, который перезапускает сервер при изменении кода (полезно при разработке).
Если все прошло успешно, вы увидите в терминале сообщение о том, что сервер запущен на http://127.0.0.1:8000.
Откройте браузер и перейдите по адресу http://127.0.0.1:8000/docs. Вы увидите автоматически сгенерированную документацию Swagger UI, где можно протестировать наши эндпоинты / и /health.
В следующей статье мы углубимся в создание схем данных Pydantic и реализуем полноценный API для приема аналитических событий.