По способу функционирования web-приложения можно разделить на 3 группы:
– Одностраничные web-приложения, у которых вся маршрутизация запросов выполняется в одной загруженной странице.
– Интеграционные. Работа этих web-приложений основана на взаимодействии серверов, например сервер PHP и сервер MySQL.
– Мульти-инеграционные. Работа этих web-приложении основана на взаимодействии серверных и клиентских API, например технология RestFull API позволяет обойти ограничения SQL-запросов, которые выполняются только на стороне сервера. RestFull API преобразоваывает данные сервера в формат JSON, с которым взаимодействует JavaScript. Формат JSON является единым унифицированным форматом данных как на стороне клиента, так и на стороне сервера.
Мульти-интеграционными являются такие приложения, которые могут:
– взаимодействовать с любыми, как серверными, так и клиентскими технологиями.
– самообновляться.
Мульти-интеграционные программы можно постоянно дописывать и обновлять. Объектно-ориентированные решения в написании кода при построении таких программ предоставляет еще больше гибкости, поскольку классы библиотек можно изменять, добавлять и удалять, а объекты, построенные на их основе таких классов могут иметь широкий диапазан характеристик. Мульти-интеграционные web-приложения - это современные, и с какой-то точки зрения, вечные приложения (т.к. они могут интегрироваться с любой базой данных и запускаться на любом сервере). Такие серверные технологии, менеджер зависимости для PHP - Composer и обновляемый фрэймворк Laravel, предоставляют мульти-интеграционность на стороне web-сервера. Клиентскую часть мы всегда можем переписать, добавив туда новый функционал, либо изменив существующие файлы стилей и скриптов. А вот с сервером баз данных дело обстоит иначе. Не все языки программирования настроены на удобное взаимодействие с базой MySQL, используемой в приложении [11]. Поэтому для добавления мульти-интеграционности на стороне сервера баз данных, было решено разработать RestFull Api.
Транзакция по такому API будет состоять, как минимум, из следующих запросов и ответов:
– метод запроса, например: GET, POST, PUT, DELETE, также имеется возможность использовать любые другие типы Request-переменных;
– маршрут запроса на добавление данных;
– маршрут запроса на удаление данных;
– маршрут запроса на вывод всех данных;
– маршрут запроса на вывод данных по идентификатору;
– маршрут запроса на обновление данных;
– могут присутствовать иные запросы, взаимодействующие с данными;
– тело ответа в формате JSON или в формате статуса страницы;
Многие разработчики стали использовать парадигму RestFull Api в разработке web-сервисов с использованием HTTP [12]. Особенностью RestFull API является его универсальность. Однако при разработке модуля были введены некоторые ограничения. А именно:
– использовались всего два метода отправки запроса GET и POST.
– тело ответа всегда формируется в формате JSON, даже если это метод удаления или обновления. При удалении записи возвращается ответ в виде пустых фигурных скопок, т.е. пустой JSON [13].
Для реализации модуля RestFull Api было решено использовать Node.js. Данный модуль на прямую не связан с самим приложением, и может быть использован другими приложениями, которым необходимо обращаться к данным.
Разработка любой node-программы начинается с определения зависимостей. RestFull Api не будет исключением. Рассмотрим файл зависимостей packages.json, в котором указаны название модуля, версия, опсание, исполняемые файлы, скрипты и необходимые зависимости.
{ "name": "todolistapi", "version": "1.0.0", "description": "RESTful todoListApi", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "nodemon server.js" }, "repository": { "type": "git", "url": "git+https://github.com/mikhalkevich/RestfullApi" }, "keywords": [ "RESTful", "API", "Tutorial" ], "author": "Mikhalkevich Alexandr", "license": "ISC", "bugs": { "url": "https://github.com/mikhalkevich/RestfullApi/issues" }, "homepage": "https://github.com/mikhalkevich/RestfullApi#readme", "devDependencies": { "nodemon": "^1.11.0" }, "dependencies": { "body-parser": "^1.15.2", "express": "^4.14.0", "mongoose": "^4.7.2" } }
Из листинга видно, что для реализации модуля необходимо установить следующие зависимости: body-parser, express и mongoose [1-А]. Для установки зависимостей, воспользуемся менеджером зависимостей npm:
npm install
Реализация необходимых GET и POST-запросов находится в маршрутизаторе, роль которого выполняет файл api/routes/todoListRoutes.js:
'use strict'; module.exports = function(app) { var todoList = require('../controllers/todoListController'); // todoList Routes app.route('/tasks') .get(todoList.list_all_tasks) .post(todoList.create_a_task); app.route('/tasks/:taskId') .get(todoList.read_a_task) .put(todoList.update_a_task) .delete(todoList.delete_a_task); };
Скачать готовый модуль RestfullApi на Node.js можно с авторского репозитория по адресу:
– https://github.com/mikhalkevich/RestfullApi.git