Простое приложение-служба API для использования ваучеров из пула. Это для демонстрационных целей и создано для демонстрации навыков архитектуры и программирования.
Ниже приведены ключевые моменты проектирования, а также то, как они были реализованы и реализованы.
Composer используется для управления всеми зависимостями приложения. Все необходимые пакеты/библиотеки объявлены в файле composer.json
. И может быть установлен с помощью команды composer install
.
Запись приложения указывает на public
каталог, который содержит только файл index.php
, а также может содержать файлы ресурсов, к которым можно получить общий доступ. Кроме этого, прямой доступ к коду или файлу за пределами этой папки невозможен. Идея состоит в том, чтобы защитить все файлы за пределами этого каталога.
Все запросы и способы их обработки определены в routes/api.php
.
Для взаимодействия с MySQL мы использовали базу данных Illuminate, также известную как «Eloquent». Это позволяет нам взаимодействовать с нашей базой данных через реляционное сопоставление объектов «ORM».
Для миграции и заполнения базы данных мы использовали независимый от платформы пакет Phinx. С течением времени код приложения развивается, и вместе с ним развивается база данных. Чтобы отслеживать изменения кода, мы используем инструменты управления версиями исходного кода, такие как git. С помощью сценариев миграции мы также можем отслеживать изменения базы данных. Особенно полезно при работе в команде. Когда коллеги по команде извлекают ваши изменения и видят сценарии миграции, они могут просто запустить их с помощью простой команды, чтобы обновить изменения схемы локальной базы данных.
Для управления зависимостями классов и выполнения внедрения зависимостей мы использовали SlimFramwork Container
. Благодаря этому мы можем инвертировать управление зависимостями от приложения к классу, отсюда и шаблон «Инверсия управления».
Для управления настройками конфигурации приложения мы использовали файл Illuminate Config. Все конфигурации хранятся в каталоге config
. Также использовался Symfony Dotenv для загрузки переменных, определенных в файле .env
, а затем доступа к ним через функцию getenv(). Полезно иметь разные параметры конфигурации для каждой среды, т. е. разработки, промежуточной и производственной среды.
Чтобы понять, что происходит в нашем приложении, мы использовали библиотеку Monolog, которая предоставляет надежные службы ведения журналов, позволяющие регистрировать сообщения.
Для проверки данных входящего HTTP-запроса вашего приложения мы использовали Illuminate Validation, которая предоставляет множество мощных правил проверки.
Чтобы обеспечить стандартный и согласованный вывод данных ответов API, мы использовали League Fractal, поэтому у нас может быть уровень представления и преобразования для наших выходных данных. Все классы трансформации хранятся в каталоге app/Transformers
.
При создании нового специального предложения мы не создаем ваучеры для всех получателей в нашей системе. Вместо этого мы используем HashIds для создания и проверки ваучеров для каждого получателя. Мы можем кодировать и декодировать, используя комбинацию [{recipient_id}, {offer_id}]
. Он всегда создает код ваучера, состоящий ровно из 8 символов, который также можно обновить в файле config/hashids.php
Для тестирования нашей службы приложений мы использовали Codeception. Он сразу же позволяет нам проводить все три типа тестов: модульные, функциональные и приемочные тесты в единой среде. В нашем случае мы провели модульное тестирование основных бизнес-объектов в AppServices
, а также написали приемочные тесты для проверки интеграции и функциональности всех конечных точек API. Все тестовые примеры хранятся в каталоге tests
. и может быть запущен следующей командой:
$ php vendor/bin/codecept run --steps
Чтобы поддерживать стандарты кодирования в команде, я создал файл phpcs.xml
, в котором определены все стандарты кодирования. и все файлы кода можно проверить по этому файлу, выполнив следующую команду:
$ php vendor/bin/phpcs
Требования к среде разработки:
Настройка среды разработки на локальном компьютере с помощью сценария установки (для MAC/LINUX) :
git clone https://github.com/ahsanatiq/voucher-pool-api.git
cd voucher-pool-api
./setup.sh
Ручная настройка (для Windows) :
git clone https://github.com/ahsanatiq/voucher-pool-api.git
cd voucher-pool-api
cp .env.dev .env
docker-compose up -d
docker exec -it voucher-pool-php-fpm composer install
docker exec -it voucher-pool-mysql mysql -u root -pnewsletter2go -e " create database newsletter2go_testing; GRANT ALL PRIVILEGES ON *.* TO 'newsletter2go'@'%' IDENTIFIED BY 'newsletter2go'; " ;
docker exec -it voucher-pool-php-fpm php vendor/bin/phinx migrate
docker exec -it voucher-pool-php-fpm php vendor/bin/phinx seed:run
Теперь вы можете получить доступ к приложению через http://localhost:8080.
Запустите модульные и приемочные тесты в сервисном контейнере PHP-FPM:
docker exec -it voucher-pool-php-fpm php vendor/bin/codecept run --steps
Вы можете получить доступ к общедоступной документации API на сайте Postman. Чтобы импортировать и запустить все API, нажмите «Запустить в Postman» на верхней панели. После установки и импорта вы увидите новую коллекцию как «Newsletter2Go — Voucher API».