/RESTfull

Practice in creating restfull api

Primary LanguagePHP

Legend:

У клиента (компания "Todo List") есть свое веб приложение, которое предоставляет услуги по сохранению поставленных перед пользователем задач - todo-list. Задачи возможно добавлять/удалять/изменять/читать. Фронт-енд часть храниться на первом сервере с соответствующим доменным именем - todo.eu. Этот сервер также хранит бек-енд часть, которая передает полученные данные с фронта дальше для манипуляций на второй апи-сервис (api.todo.eu) принадлежащий этой же компании. Сервер todo.eu не записывает данные в БД. Это делает сервер api.todo.eu.

Task:

а) В контексте работ на сервере todo.eu требуется выпонить:

1) Создать REST-связть между фронтом и беком;

2) Настроить сендинг ресурсов на api.todo.eu апи-сервис;

3) обеспечить обработку возможных ошибок при отправке/получении ресурсов;
	
4) уведомление пользователя об невозможности проведения работ с созданным/редактируемым/удаляемым им ресурсом;

5) логгирование ошибок;

6) настроить получение изменённых ресурсов через "ПРЕДСТАВЛЕНИЕ РЕСУРСА", хранящееся на api.todo.eu;

b) api.todo.eu

Данный сервер должен:

1) Создать условия для получения ресурса
2) Создать условия автоматического выбора метода обработки ресурса
3) Создать условия уведомления об ошибках при записи/изменения ресурса в БД
4) Cоздать для каждого ресурса свое "представление ресурса" без возврата
   выполняющегося потока в точку запуска процесса.
5) Создать условия логгирования ошибок и вывод их через "представление ресурса" без возврата
   выполняющегося потока в точку запуска процесса.
6) Создать условия передачи измененного/добавленого/удаленного/прочитанного ресурса 
   без возврата выполняющегося потока в точку запуска процесса.

с) Связь между сервером api.todo.eu и todo.eu должна быть настроена таким образом, что при необходимости изменить/заменить какой-либо из сервисов, второй должен работать без уведомления, что на первый сервис заменен. Связь между двумя серверами должна выстраиваться с акцентом на принцип Client-Stateless-Server (CSS).

Как установить.

  1. Для установки нужно клонировать репозиторий и создать условия для загруженных директорий, при которых (по легенде) api.todo.eu - корневая папка апи-сервера, а todo.eu - корневая папка для веб-прложения.

  2. Создать БД и внести инфо для коннекта к ней в массив хранящийся в методе "connector()". Адрес: api.todo.eu/DataProviders/Config.php.

  3. Внести в созданную БД таблицу todo (хранится в репозитории по имени todo.sql). Если есть небоходимость создать свою таблицу, следует создавать ее структурно идентичной таблице todo.sql. имя можно изменить в константе TABLE_NAME. Адрес: api.todo.eu/DataProviders/Config.php.

  4. Настроить сервис так, чтобы обращения по ниже описанным адресам редиректились корректно.

для todo.eu:

1) при обращении на адрес "api/v1/note/" редирект на "/api/v1/entrance.php".
   Пример для Apache: 
	- RewriteRule ^api/v1/note/.* /api/v1/entrance.php [L].

2) при обращении по адресу "todo.eu/" редирект на "todo.eu/web/index.html".
   Пример для Apache: 	
	- RewriteCond %{REQUEST_URI} ^/$
		- RewriteRule ^(.*)$ /web/index.html  [L,QSA]

для api.todo.eu:

1) при обращении на "api.todo.eu" редирект на "api.todo.eu/index.php", но не запретить обращаться
  к "api.todo.eu/index.php" напрямую.

В целом, то для настроек редиректов можно воспользоваться как указателями имеющиеся файлы .htaccess, кроме тех файлов .htaccess, в которых код закомментирован

  1. Если необходимо изменить url для отправки данных, то это возможно сделать изменив возвращаемый массив в методе "uriToSend()". Адрес:

todo.eu/Models/ApiModels/Config/ApiConfig.php.

В таком случае ответственность за дальнейшие ошибки несете Вы.

  1. Предоставить права на запись/изменение/чтение файла /logs/logs.txt для api.todo.eu и todo.eu (хранится в корне).

В результате вы должны увидеть что-то вроде этого: https://picua.org/image/todo-live-example.aa8qd3