Backend-сервис для хранения и управления вакансиями, реализованный на фреймворке Yii2 с REST API.
- Framework: Yii2 (2.0.53)
- PHP: 8.0+
- Database: MySQL 5.7+ / PostgreSQL 9.5+
- API: REST JSON
- CORS: Настроен для работы с frontend
- Пагинация (10 вакансий на страницу)
- Сортировка по зарплате (возрастание/убывание)
- Сортировка по дате создания (возрастание/убывание)
- Возвращаемые поля: id, название, зарплата, описание
- Кеширование результатов (5 минут) для повышения производительности
- Поиск по названию и описанию вакансий
- PostgreSQL: tsvector с русской морфологией
- MySQL: FULLTEXT индексы
- Ранжирование результатов по релевантности
- 10-100x быстрее обычного LIKE поиска
- Кеширование результатов поиска (5 минут)
- Обязательные поля: id, название, зарплата, описание
- Опциональные поля через параметр
fields: выборочное отображение полей - Поддержка дополнительных полей в формате JSON
- Кеширование отдельных вакансий (10 минут)
- Принимает: название, описание, зарплата
- Опционально: дополнительные поля (JSON)
- Валидация данных
- Автоматическая инвалидация кеша
- Rate Limiting: 100 запросов в час на IP
- CORS: Настраиваемый список разрешенных доменов
- HTTPS: Готовая конфигурация для Nginx/Apache
- Кеширование: Автоматическое с FileCache/Redis
| Метод | Endpoint | Описание |
|---|---|---|
| GET | /vacancy |
Получение списка вакансий с пагинацией и сортировкой |
| GET | /vacancy/search?q=... |
Полнотекстовый поиск вакансий |
| GET | /vacancy/{id} |
Получение конкретной вакансии |
| GET | /vacancy/{id}?fields=title,salary |
Получение вакансии с выбранными полями |
| POST | /vacancy |
Создание новой вакансии |
| PUT | /vacancy/{id} |
Обновление существующей вакансии |
| DELETE | /vacancy/{id} |
Удаление вакансии |
| Поле | Тип | Описание |
|---|---|---|
| id | INTEGER | Первичный ключ (автоинкремент) |
| title | VARCHAR(255) | Название вакансии |
| description | TEXT | Описание вакансии |
| salary | INTEGER | Зарплата |
| additional_fields | JSON | Дополнительные поля (опционально) |
| created_at | INTEGER | Дата создания (UNIX timestamp) |
| updated_at | INTEGER | Дата обновления (UNIX timestamp) |
idx-vacancy-salaryна полеsalary(для быстрой сортировки)idx-vacancy-created_atна полеcreated_at(для быстрой сортировки)idx-vacancy-titleна полеtitle(для быстрого поиска)- PostgreSQL:
idx_vacancy_search_vector(GIN индекс для полнотекстового поиска) - MySQL:
idx_vacancy_fulltext(FULLTEXT индекс на title и description)
vakansii-back/
├── config/
│ ├── db.php # Конфигурация БД
│ ├── web.php # Основная конфигурация
│ └── params.php # Параметры приложения
├── controllers/
│ └── VacancyController.php # REST API контроллер
├── models/
│ └── Vacancy.php # ActiveRecord модель
├── repositories/
│ ├── VacancyRepositoryInterface.php # Интерфейс репозитория
│ └── VacancyRepository.php # Реализация репозитория
├── services/
│ └── VacancyService.php # Бизнес-логика
├── migrations/
│ ├── m250204_000000_create_vacancy_table.php
│ └── m250206_000000_add_fulltext_search.php # FULLTEXT индексы
├── tests/
│ ├── api/ # API тесты
│ └── unit/ # Unit тесты
├── web/
│ ├── index.php # Входная точка
│ ├── openapi.yaml # OpenAPI спецификация
│ ├── swagger-ui.html # Swagger UI
│ └── redoc.html # ReDoc документация
├── docker/
│ ├── nginx/ # Конфигурация Nginx с HTTPS
│ └── apache/ # Конфигурация Apache с HTTPS
├── .github/workflows/ # GitHub Actions CI/CD
├── runtime/ # Временные файлы, логи
├── vendor/ # Composer зависимости
├── setup_db.sh # Скрипт настройки БД
├── setup_ssl_certificates.sh # Скрипт настройки HTTPS
├── seed_data.php # Тестовые данные
├── README.md # Основная документация
├── README_API.md # Полная документация API
├── QUICKSTART.md # Быстрый старт
├── FULLTEXT_SEARCH.md # Документация полнотекстового поиска
├── SETUP_GUIDE.md # Руководство по настройке
└── PROJECT_INFO.md # Этот файл
REST API контроллер, наследующий yii\rest\ActiveController:
- actionIndex() - Получение списка вакансий с пагинацией и сортировкой
- actionView($id) - Получение конкретной вакансии с возможностью фильтрации полей
- actionCreate() - Создание новой вакансии
Особенности:
- Поддержка CORS для интеграции с frontend
- JSON формат запросов и ответов
- Валидация входных данных
- Обработка ошибок с понятными сообщениями
ActiveRecord модель с:
- Автоматическими timestamp (created_at, updated_at)
- Правилами валидации для всех полей
- Поддержкой JSON для дополнительных полей
Миграция для создания таблицы вакансий с:
- Индексами для оптимизации запросов
- Поддержкой JSON для гибкости данных
- Правильной кодировкой (utf8mb4)
- Валидация всех входных данных
- Защита от SQL инъекций (через ActiveRecord)
- CORS настроен (можно ограничить для production)
- Подготовленные запросы для всех операций с БД
- Кеширование: Списки (5 мин), отдельные вакансии (10 мин), поиск (5 мин)
- FULLTEXT индексы: 10-100x быстрее обычного поиска
- Индексы БД: на полях сортировки (salary, created_at, title)
- Пагинация: ограничение объема данных (10 записей на страницу)
- ActiveDataProvider: эффективная работа с большими наборами данных
- Rate Limiting: защита от перегрузки (100 запросов/час)
Для быстрого тестирования можно использовать:
# Запуск встроенного PHP сервера
php yii serve --docroot=web --port=8080
# Добавление тестовых данных
php seed_data.phpAPI готов для интеграции с Nuxt3 frontend:
// Пример использования в Nuxt3
const { data } = await useFetch('http://localhost:8080/vacancy', {
params: {
page: 1,
sort: 'salary',
order: 'desc'
}
});Для production окружения рекомендуется:
- Использовать nginx/apache вместо встроенного PHP сервера
- Включить кэширование схемы БД
- Настроить индексы БД под нагрузку
- Ограничить CORS определенными доменами
- Включить логирование API запросов
- Настроить rate limiting
- ✅ Полнотекстовый поиск с FULLTEXT индексами (PostgreSQL/MySQL)
- ✅ Кеширование для повышения производительности (10-100x)
- ✅ Rate Limiting для защиты от злоупотреблений
- ✅ HTTPS конфигурация (Nginx/Apache + Let's Encrypt)
- ✅ CI/CD пайплайны (GitHub Actions + GitLab CI)
- ✅ Swagger/OpenAPI документация
- ✅ Полное покрытие тестами (unit, functional, API)
- Аутентификация через JWT
- Фильтрация по компании, локации, требованиям
- Версионирование API (v1, v2)
- Мягкое удаление (soft delete)
- Работа с избранными вакансиями
- Система откликов на вакансии
- WebSocket для real-time уведомлений
- GraphQL API в дополнение к REST
- README - Основная информация о проекте
- Быстрый старт - Инструкция по запуску за 5 минут
- API документация - Подробное описание всех endpoints
- Полнотекстовый поиск - Руководство по поиску
- Руководство по настройке - Настройка HTTPS, CI/CD, документации
- HTTPS Setup - Настройка SSL/TLS сертификатов
- Swagger UI - Интерактивная документация API
- Yii2 Guide - Официальная документация Yii2
- PHP 8.0+
- Composer
- MySQL 5.7+ или PostgreSQL 9.5+
- Git
# 1. Установка зависимостей
composer install
# 2. Настройка БД
./setup_db.sh
# 3. Добавление тестовых данных
php seed_data.php
# 4. Запуск сервера
php yii serve --docroot=web --port=8080См. раздел "Настройка веб-сервера" в README_API.md
MIT
Для вопросов и предложений создавайте issue в репозитории проекта.