Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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)
- Host: GitHub
- URL: https://github.com/ehpc/web-service-emulator
- Owner: ehpc
- Created: 2019-09-26T12:38:54.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-02-28T15:04:05.000Z (almost 2 years ago)
- Last Synced: 2024-10-30T21:13:10.424Z (about 2 months ago)
- Language: JavaScript
- Size: 1.26 MB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
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) => {}