app for testing Yii2 REST server and AngularJS(1.xx) frontend
Содержание
Установка
Запуск
Cерверная часть
Фронтенд
Установка
ВНИМАНИЕ. приложение создано и протестировано в ОС Linux Ubuntu 16.04 LTS. Конфигурация и установка в других ОС может отличаться. Ниже приводится процесс конфигурации и установки компонентов для ОС Linux Ubuntu/Debian.
Скопируйте все файлы проекта в любую директорию.
В папке:
/backend - находится серверная часть приложения на базе PHP фреймворка Yii2 Basic.
/frontend - клиенская часть приложения на базе AngularJS v1.5.8.
Для простоты работы с приложением, была использована технология Docker и Docker-compose.
В папке /docker вы найдете файлы конфигурации для контейнеров docker.
Для запуска приложения необходимо установить эти компоненты, если их нет, согласно руководства к ним и выполнить комaнду в корневой директории проекта:
$ docker-compose up -d
После ее выполнения на локальной машине будет запущен веб-сервер в следующей конфигурации:
PHP7.0 - FPM
NGINX
Postgres
Далее в каталоге /backend выполните миграции базы данных:
$ docker exec -it resttest_php_1 bash
$ cd /var/www/REST_test/backend
$ php yii migrate/up
$ exit
Вы получите готовое к работе приложение с внесенными в БД 6-тью студентами и рандомно установленными предметами для каждого. В файлах миграции можно дополнить/изменить информацию о пользователях.
Запуск
После установки, проект доступен по адресу:
http://localhost:8000
Серверная часть
REST сервер сконфигурирован на базе Yii2 basic. Используя компонент gii были установлен модуль api и два субмодуля v1 и v2. Субмодули сконфигурировані в качестве REST контроллера, используя класс yii\rest\ActiveController с уже настроенными правилами доступа к REST серверу. В контроллерах добавлено поведение \yii\filters\Cors для разрешения Ajax запросов с других серверов.
В контроллер субмодуля V1 добавлен actionGetStudentsCourses для доступа по id студента к его курсам.
В модель ресурсов субмодуля V2 добавлено дополнительное поле lessons для привязки курсов к пользователю сразу при запросе. В результате получили следующую картину.
при запросе GET:
http://localhost:8000/api/v1/users
получаем список всех пользователей с данными согласно таблицы USER.
при запросе GET:
http://localhost:8000/api/v1/users/get-student-courses?id=<user_id>
получаем список всех курсов привязанных к студенту с конкретными ID.
при запросе GET:
http://localhost:8000/api/v2/users
получаем список всех студентов, с уже привязанными к ним курсам, согласно логики указанной в ресурс модели.
Доступ к данным и их добавление и изменение указанные в задании выполняются тоже. Но все я не тестировал. Точно работают: GET: POST: DELETE:
Клиентская часть
Фронтенд приложения построен на базе Angular JS. Сборка проекта осуществляется автоматически, используя Gulp. Необходимые файла конфигурации находятся в корневом каталоге клиентской части (/frontend). За основу использовалась конфигурация Yeoman-generator. Только сильно упрощенная.
Приложение построено с помощью использования стандартных модулей:
ngResource - для доступа и работы с API.
ngRoute - для роутинга и организации MVC приложения.
На страницу ApiV1 выводятся данные полностью согласно заданию.
На страницу ApiV2 выводятся данные согласно ресурс модели бекенда.
Фильтрация и сортировка реализованы на стандартных фильтрах. Пагинация с помощью модуля dir-pagination. Веб страница стилизована с помощью Twitter Bootstrap.
Спасибо за внимание и комментарии.