Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ehpc/web-service-emulator

Emulates web services via finite state machines (FSM)
https://github.com/ehpc/web-service-emulator

Last synced: 5 days ago
JSON representation

Emulates web services via finite state machines (FSM)

Awesome Lists containing this project

README

        

# Эмулятор веб-сервисов

Эмулятор веб-сервисов позволяет создавать произвольные "болванки" веб-сервисов на основе концепции черного ящика.

Эмулятор представляет собой коллекцию конечных автоматов. К примеру, сэмулируем конечным автоматом сервис получения данных по заявке:

![Emulator FSM Example](https://raw.githubusercontent.com/ehpc/web-service-emulator/master/docs/web-service-emulator-example.png)

Следует учесть, что с одним автоматом могут одновременно работать несколько пользователей. В связи с этим следует ввести некоторое пространство выполнения, уникальное для каждого клиента. Если мы ограничимся только http-протоколом для сервисов, то можно использовать обычную куку для разделения пространств имен.

Примерная схема данных эмулятора:

![Emulator Diagram](https://raw.githubusercontent.com/ehpc/web-service-emulator/master/docs/web-service-emulator-structure.png)

# Схема использования

1. Пользователь посылает на определенный порт по определенному URL HTTP-запрос с определенными данными (вход);

1. Эмулятор по порту находит соответствующую таблицу переходов;

1. Эмулятор парсит запрос и находит по кортежу соответствующую строку в таблице переходов;

1. В зависимости от текущего состояния, делается переход в следующее состояние (это список выполнения), а также в ответ пользователю уходит что-то (выход).

Входящие data и выход будут RAW payload ответом HTTP.

В итоге, эмулятор способен создавать иллюзию какой-то логики.

# Доступ и управление

Сервис запускается по адресу http://host:8081/.

У пользователя, под которым происходит запуск, должны быть права на запись в папки `log` и `settings`.

Запуск осуществляется командой `npm start`.

Остановка командой `npm stop`.

# Схема BDD

* Сначала придумать, что должно происходить
* Описать это с помощью теста describe('Название сущности') -> it('что-то делает или обладает чем-то')
* Достаточно одного it, но можно и несколько сразу
* Прогнать тесты
* Увидеть, что написанный тест провалился
* Написать код, который позволит тесту выполниться
* Если код писать сложно, либо долго, придумать ещё it или describe, уточняющие поведение системы
* Прогнать тесты
* Увидеть, что написанный тест прошёл
* Повторить всё с начала

P.S. it() - это говорящее название, ссылающееся на describe.
То есть, если describe('Корабль'), то it('не тонет').
По-русски читается так: Опишите (describe) корабль: он (it) не тонет.

# Заметки по написанию кода

* Для хеш-таблиц использовать Map, а не {}
* Стрелочные функции вместо function
* "() => value" вместо "() => {return value}"
* "x => value" вместо "(x) => value"
* for...of вместо .forEach и for(;;;), если индекс не нужен
* for(const...of) вместо for(let...of)
* let вместо var
* const, если нет смысла в изменении переменной
* Promise вместо callback
* .then.then.catch вместо .then(() => {.then.catch}).catch
* String templates \`${variable1}: ${variable2}\` вместо concatenation "variable1 + ': ' + variable2"
* JsDoc http://usejsdoc.org/tags-type.html
* map, reduce, filter, some, every, find
* class вместо {} для инкапсуляции
* Параметры по умолчанию (x = 1) => {}