Практическое задание 3: Database Integration
🗄️ Интеграция с базой данных - Подключение СУБД для сохранения данных
📋 Описание задания
Поднять у себя СУБД и записывать результаты формы, которую вы добавляли в эту СУБД. Создать полноценную связку фронтенд → бекенд → база данных. Можно использовать как локальное развертывание, так и Docker для контейнеризации.
🎯 Цели задания
- Работа с базами данных
- Создание API для работы с БД
- Интеграция фронтенда с бекендом
- Понимание архитектуры веб-приложений
- Освоение ORM технологий
- Настройка миграций и схемы БД
- Обеспечение безопасности данных
📝 Требования к выполнению
Основные требования:
- Установить и настроить СУБД - выбрать одну из разрешенных
- Создать схему БД - таблицы для хранения данных формы
- Настроить бекенд - API для работы с базой данных
- Интегрировать с формой - данные из лендинга сохраняются в БД
- Настроить миграции - версионирование схемы БД
- Обеспечить безопасность - защита от 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:
- PostgreSQL Documentation - официальная документация
- PostgreSQL Tutorial - обучение PostgreSQL
- Node.js PostgreSQL - драйвер для Node.js
- Prisma ORM - современная ORM для Node.js
- TypeORM - TypeScript ORM
- PostgreSQL Installation - установка PostgreSQL
- PostgreSQL Docker - Docker образ PostgreSQL
MySQL:
- MySQL Documentation - официальная документация
- MySQL Tutorial - обучение MySQL
- MySQL2 for Node.js - драйвер для Node.js
- Sequelize ORM - популярная ORM для Node.js
- MySQL Installation - установка MySQL
- MySQL Docker - Docker образ MySQL
MongoDB:
- MongoDB Documentation - официальная документация
- MongoDB Tutorial - обучение MongoDB
- Mongoose ODM - ODM для Node.js
- MongoDB Atlas - облачная БД
- MongoDB Installation - установка MongoDB
- MongoDB Docker - Docker образ MongoDB
Backend и API:
- REST API Best Practices - лучшие практики REST API
- HTTP Status Codes - коды состояния HTTP
- Express.js Documentation - фреймворк для Node.js
- Node.js Documentation - документация Node.js
- API Design Guidelines - руководство по дизайну API
Безопасность:
- SQL Injection Prevention - защита от SQL-инъекций
- OWASP Top 10 - топ-10 уязвимостей
- Data Validation - валидация данных
- CORS Configuration - настройка CORS
Docker и контейнеризация:
- Docker Documentation - документация Docker
- Docker Compose - оркестрация контейнеров
- Docker Best Practices - лучшие практики
- Database Docker Tutorials - примеры с базами данных
Миграции и схемы:
- Database Migrations - концепция миграций
- Prisma Migrate - миграции Prisma
- Sequelize Migrations - миграции Sequelize
- Mongoose Migrations - миграции для MongoDB
Тестирование:
- Jest Testing - фреймворк для тестирования
- Supertest - тестирование HTTP API
- Database Testing - тестирование с БД
- API Testing - тестирование API
📁 Структура проекта
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 для безопасности
🧪 Тестирование
Обязательные тесты:
- Отправка данных формы через лендинг
- Сохранение данных в базе данных
- Обработка ошибок (неверные данные, проблемы с БД)
- Валидация данных - проверка всех полей формы
- Безопасность - защита от SQL-инъекций
Дополнительные тесты:
- Производительность при множественных запросах
- Тестирование миграций БД
- Нагрузочное тестирование
- Тестирование восстановления после сбоев
🔒 Безопасность
Основные принципы безопасности:
- Защита от SQL-инъекций - используйте параметризованные запросы
- Валидация данных - проверяйте все входящие данные
- Обработка ошибок - не раскрывайте внутреннюю информацию
- CORS настройка - ограничьте доступ к API
- Логирование - записывайте все операции для аудита
Изучите документацию по безопасности:
- Защита от SQL-инъекций в выбранной СУБД
- Валидация данных в выбранном фреймворке
- Настройка CORS для API
- Обработка ошибок и логирование
Последнее обновление: Январь 2025