{"id":18050570,"url":"https://github.com/ehpc/web-service-emulator","last_synced_at":"2025-07-26T13:33:06.546Z","repository":{"id":39774297,"uuid":"211085548","full_name":"ehpc/web-service-emulator","owner":"ehpc","description":"Emulates web services via finite state machines (FSM)","archived":false,"fork":false,"pushed_at":"2023-02-28T15:04:05.000Z","size":1322,"stargazers_count":0,"open_issues_count":7,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-05T06:26:43.785Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ehpc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-09-26T12:38:54.000Z","updated_at":"2019-09-26T13:19:46.000Z","dependencies_parsed_at":"2024-10-30T21:12:31.376Z","dependency_job_id":"ff758108-f9ce-4d74-902a-ee7df597d092","html_url":"https://github.com/ehpc/web-service-emulator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ehpc/web-service-emulator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ehpc%2Fweb-service-emulator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ehpc%2Fweb-service-emulator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ehpc%2Fweb-service-emulator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ehpc%2Fweb-service-emulator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ehpc","download_url":"https://codeload.github.com/ehpc/web-service-emulator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ehpc%2Fweb-service-emulator/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267174765,"owners_count":24047687,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-26T02:00:08.937Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-30T21:12:21.612Z","updated_at":"2025-07-26T13:33:06.499Z","avatar_url":"https://github.com/ehpc.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Эмулятор веб-сервисов\n\nЭмулятор веб-сервисов позволяет создавать произвольные \"болванки\" веб-сервисов на основе концепции черного ящика.\n\nЭмулятор представляет собой коллекцию конечных автоматов. К примеру, сэмулируем конечным автоматом сервис получения данных по заявке:\n\n![Emulator FSM Example](https://raw.githubusercontent.com/ehpc/web-service-emulator/master/docs/web-service-emulator-example.png)\n\nСледует учесть, что с одним автоматом могут одновременно работать несколько пользователей. В связи с этим следует ввести некоторое пространство выполнения, уникальное для каждого клиента. Если мы ограничимся только http-протоколом для сервисов, то можно использовать обычную куку для разделения пространств имен.\n\nПримерная схема данных эмулятора:\n\n![Emulator Diagram](https://raw.githubusercontent.com/ehpc/web-service-emulator/master/docs/web-service-emulator-structure.png)\n\n# Схема использования\n\n1. Пользователь посылает на определенный порт по определенному URL HTTP-запрос с определенными данными (вход);\n\n1. Эмулятор по порту находит соответствующую таблицу переходов; \n\n1. Эмулятор парсит запрос и находит по кортежу \u003cURL, запрос\u003e соответствующую строку в таблице переходов; \n\n1. В зависимости от текущего состояния, делается переход в следующее состояние (это список выполнения), а также в ответ пользователю уходит что-то (выход). \n\nВходящие data и выход будут RAW payload ответом HTTP.\n\nВ итоге, эмулятор способен создавать иллюзию какой-то логики. \n\n# Доступ и управление\n\nСервис запускается по адресу http://host:8081/.\n\nУ пользователя, под которым происходит запуск, должны быть права на запись в папки `log` и `settings`.\n\nЗапуск осуществляется командой `npm start`.\n\nОстановка командой `npm stop`.\n\n# Схема BDD\n\n* Сначала придумать, что должно происходить\n* Описать это с помощью теста describe('Название сущности') -\u003e it('что-то делает или обладает чем-то')\n* Достаточно одного it, но можно и несколько сразу\n* Прогнать тесты\n* Увидеть, что написанный тест провалился\n* Написать код, который позволит тесту выполниться\n* Если код писать сложно, либо долго, придумать ещё it или describe, уточняющие поведение системы\n* Прогнать тесты\n* Увидеть, что написанный тест прошёл\n* Повторить всё с начала\n\nP.S. it() - это говорящее название, ссылающееся на describe.\nТо есть, если describe('Корабль'), то it('не тонет').\nПо-русски читается так: Опишите (describe) корабль: он (it) не тонет.\n\n# Заметки по написанию кода\n\n* Для хеш-таблиц использовать Map, а не {}\n* Стрелочные функции вместо function\n* \"() =\u003e value\" вместо \"() =\u003e {return value}\"\n* \"x =\u003e value\" вместо \"(x) =\u003e value\"\n* for...of вместо .forEach и for(;;;), если индекс не нужен\n* for(const...of) вместо for(let...of)\n* let вместо var\n* const, если нет смысла в изменении переменной\n* Promise вместо callback\n* .then.then.catch вместо .then(() =\u003e {.then.catch}).catch\n* String templates \\`${variable1}: ${variable2}\\` вместо concatenation \"variable1 + ': ' + variable2\"\n* JsDoc http://usejsdoc.org/tags-type.html\n* map, reduce, filter, some, every, find\n* class вместо {} для инкапсуляции\n* Параметры по умолчанию (x = 1) =\u003e {}\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fehpc%2Fweb-service-emulator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fehpc%2Fweb-service-emulator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fehpc%2Fweb-service-emulator/lists"}