Приложение работает с сущностями заказа и товаров. Предоставляет публичное API для взаимодействия.
- PHP - не ниже версии 7.1
- СУБД - PostgreSQL 9.6
Инстанс приложения представлен классом Application, которое обрабатывает HTTP запрос к API. Классы сердцевины приложения (микрофреймворка) расположены в папке src/Core. Каркас приложения стандартный MVC, реализованный с использованием минимально необходимых для этого компонентов Symfony. Каждый контролер и сервисы, которые он использует, инициализируются объектом DI контейнера, который доступен приложению. Все обращения к БД происходят через прослойку Repository (назвал так по аналогии со структурой ORM Doctrine 2). Каждый репозиторий это по своей сути Mapper конкретной сущности к БД. Модели лежат в src/Entity.
Слой взаимодействия с БД самописный с использованием PDO, я не задавался целью использовать какую либо ORM для универсальности. Все запросы к БД безопасные, т.к. используется подход Prepared statements с привязкой параметров к запросу. Вся бизнес логика вынесена в сервисы.
Для простоты слой аутентификации пользователей отсутствует.
Все 4 метода API покрыты тестами с использованием php unit, сервисы отдельно. В тестовом окружении идут обращения к локальной файловой БД SQLite 3.
- После клонирования репозитория подтягиваем зависимости проекта:
composer install
- Устанавливаем данные для подключения к БД (PostgreSQL) в файле config/parameters/db.yaml.
- Выполняем SQL скрипт installer/db_schema.sql для накатывания схемы БД.
- Для тестирования вполне подойдет встроенный в PHP локальный веб сервер. Для активации локального хоста выполнить команду:
php -S localhost:8000 -t public/
№ | HTTP метод | PATH | Описание | Параметры | Пример запроса | Пример ответа |
---|---|---|---|---|---|---|
1 | POST | /api/items/create | Создание товаров | |||
2 | GET | /api/items | Получение всех товаров | |||
3 | POST | /api/order/create | Создание заказа. Возвращает id созданного заказа | "itemIds" - Идентификаторы товаров | { "itemIds": [1, 2] } | { "id": 1 } |
4 | POST | /api/order/pay | Оплата заказа | "id" - Идентификатор заказа, "amount" - Сумма оплаты | { "id": 1, "amount": "250.00" } | { "success": true } |