Перейти к основному содержимому

Практическое задание 3: Database Integration

🗄️ Интеграция с базой данных - Подключение СУБД для сохранения данных

📋 Описание задания

Поднять у себя СУБД и записывать результаты формы, которую вы добавляли в эту СУБД. Создать полноценную связку фронтенд → бекенд → база данных. Можно использовать как локальное развертывание, так и Docker для контейнеризации.

🎯 Цели задания

  • Работа с базами данных
  • Создание API для работы с БД
  • Интеграция фронтенда с бекендом
  • Понимание архитектуры веб-приложений
  • Освоение ORM технологий
  • Настройка миграций и схемы БД
  • Обеспечение безопасности данных

📝 Требования к выполнению

Основные требования:

  1. Установить и настроить СУБД - выбрать одну из разрешенных
  2. Создать схему БД - таблицы для хранения данных формы
  3. Настроить бекенд - API для работы с базой данных
  4. Интегрировать с формой - данные из лендинга сохраняются в БД
  5. Настроить миграции - версионирование схемы БД
  6. Обеспечить безопасность - защита от SQL-инъекций и валидация данных

Разрешенные СУБД:

  • PostgreSQL - рекомендуемая
  • MySQL - популярная альтернатива
  • MongoDB - NoSQL решение для документо-ориентированных данных
  • SQLite - запрещена для этого задания

🐳 Использование Docker (опционально):

  • СУБД в Docker - использовать готовые образы PostgreSQL, MySQL, MongoDB
  • Упрощенная настройка - не нужно устанавливать СУБД локально
  • Изоляция окружения - чистая среда для экспериментов
  • Docker Compose - для оркестрации контейнеров с бекендом и БД
  • Персистентные данные - настройка volumes для сохранения данных

💻 Локальное развертывание (альтернатива):

  • Установка СУБД - установить PostgreSQL, MySQL или MongoDB локально
  • Локальная настройка - настроить подключение к локальной БД
  • Простота разработки - быстрый старт без Docker
  • Прямое подключение - подключение к БД через localhost

📊 Система оценивания

  • Полное выполнение: Максимальная оценка (2 балла)
  • Частичное выполнение: Преподаватель дает обратную связь и просит переделать
  • Пересдача: Возможна после исправления замечаний

🛠 Технические требования

Схема базы данных:

Создать таблицу/коллекцию для хранения данных формы - изучите документацию по созданию схем БД

API Endpoints:

  • POST /api/form - обработка данных формы (обязательно)
  • GET /api/form - получение всех записей (опционально)
  • GET /api/form/:id - получение конкретной записи (опционально)

Бекенд требования:

  • Валидация данных - проверка всех входящих данных
  • Обработка ошибок - корректная обработка ошибок БД
  • Безопасность - защита от SQL-инъекций, XSS, CSRF
  • ORM - использование библиотек для работы с БД
  • Миграции - версионирование схемы БД

🔗 Полезные ресурсы

PostgreSQL:

MySQL:

MongoDB:

Backend и API:

Безопасность:

Docker и контейнеризация:

Миграции и схемы:

Тестирование:

📁 Структура проекта

Docker подход:

practical-3-database-integration/
├── backend/
│ ├── src/
│ │ ├── models/ # Модели данных
│ │ │ └── FormSubmission.js
│ │ ├── routes/ # API маршруты
│ │ │ └── form.js
│ │ ├── controllers/ # Контроллеры
│ │ │ └── formController.js
│ │ ├── middleware/ # Middleware
│ │ │ ├── validation.js
│ │ │ └── errorHandler.js
│ │ ├── database/ # Настройка БД
│ │ │ ├── connection.js
│ │ │ └── migrations/
│ │ └── utils/ # Утилиты
│ │ └── logger.js
│ ├── package.json
│ ├── Dockerfile
│ └── README.md
├── frontend/ # Лендинг из предыдущего задания
├── database/
│ ├── schema.sql # SQL схема для таблицы формы
│ ├── migrations/ # Миграции БД
│ └── seeds/ # Начальные данные
├── docker-compose.yml # Оркестрация контейнеров
└── README.md # Описание проекта

Локальный подход:

practical-3-database-integration/
├── backend/
│ ├── src/
│ │ ├── models/ # Модели данных
│ │ ├── routes/ # API маршруты
│ │ ├── controllers/ # Контроллеры
│ │ ├── middleware/ # Middleware
│ │ ├── database/ # Настройка БД
│ │ └── utils/ # Утилиты
│ ├── package.json
│ └── README.md
├── frontend/ # Лендинг из предыдущего задания
├── database/
│ ├── schema.sql # SQL схема для таблицы формы
│ ├── migrations/ # Миграции БД
│ └── seeds/ # Начальные данные
└── README.md # Описание проекта

📋 Чек-лист выполнения

Подготовка БД:

  • [ ] Установлена и настроена выбранная СУБД (Docker или локально)
  • [ ] Создана схема БД для данных формы
  • [ ] Настроены миграции для версионирования схемы
  • [ ] Протестировано подключение к БД

Backend разработка:

  • [ ] Настроено подключение к БД в бекенде
  • [ ] Создана модель для данных формы
  • [ ] Реализован endpoint POST /api/form
  • [ ] Добавлена валидация данных формы
  • [ ] Настроена обработка ошибок
  • [ ] Добавлено логирование операций
  • [ ] Реализована защита от SQL-инъекций

Интеграция:

  • [ ] Интегрирована форма лендинга с API
  • [ ] Протестирована полная цепочка: форма → API → БД
  • [ ] Данные формы сохраняются в базе данных
  • [ ] Проверена обработка ошибок при недоступности БД

Безопасность:

  • [ ] Валидация всех входящих данных
  • [ ] Защита от SQL-инъекций
  • [ ] Обработка XSS атак
  • [ ] Настройка CORS для безопасности

🧪 Тестирование

Обязательные тесты:

  1. Отправка данных формы через лендинг
  2. Сохранение данных в базе данных
  3. Обработка ошибок (неверные данные, проблемы с БД)
  4. Валидация данных - проверка всех полей формы
  5. Безопасность - защита от SQL-инъекций

Дополнительные тесты:

  • Производительность при множественных запросах
  • Тестирование миграций БД
  • Нагрузочное тестирование
  • Тестирование восстановления после сбоев

🔒 Безопасность

Основные принципы безопасности:

  • Защита от SQL-инъекций - используйте параметризованные запросы
  • Валидация данных - проверяйте все входящие данные
  • Обработка ошибок - не раскрывайте внутреннюю информацию
  • CORS настройка - ограничьте доступ к API
  • Логирование - записывайте все операции для аудита

Изучите документацию по безопасности:

  • Защита от SQL-инъекций в выбранной СУБД
  • Валидация данных в выбранном фреймворке
  • Настройка CORS для API
  • Обработка ошибок и логирование

Последнее обновление: Январь 2025