-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
c1551ab
commit 2fcc2ec
Showing
1 changed file
with
51 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,52 @@ | ||
# Простое REST API приложение | ||
|
||
Приложение работает с сущностями заказа и товаров. Предоставляет публичное 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. | ||
|
||
Инструкция по разворачиванию проекта | ||
------------ | ||
1. После клонирования репозитория подтягиваем зависимости проекта: | ||
~~~ | ||
composer install | ||
~~~ | ||
2. Устанавливаем данные для подключения к БД (PostgreSQL) в файле _config/parameters/db.yaml_. | ||
3. Выполняем SQL скрипт _installer/db_schema.sql_ для накатывания схемы БД. | ||
4. Для тестирования вполне подойдет встроенный в PHP локальный веб сервер. Для активации локального хоста выполнить команду: | ||
~~~ | ||
php -S localhost:8000 -t public/ | ||
~~~ | ||
|
||
Описание API методов | ||
------------ | ||
API содержит 4 эндпоинта: | ||
1. Генерация стартового набора данных - создает сущности типа "Товар" | ||
**POST /api/items/create** | ||
2. Метод получения всех существующих товаров | ||
**GET /api/items** | ||
3. Создать заказ: | ||
**POST /api/order/create** | ||
Создает заказ в статусе "Новый". | ||
4. Оплатить заказ | ||
**POST /api/order/pay** | ||
|
||
*Примечание:* | ||
Для удобства тестирования в проекте есть файл для http клиента PostMan |