Harcon -Radiation - расширение библиотеки Harcon для автоматического разоблачения услуг через REST и/или WebSocket с использованием форматов сообщений HARCON и JSONRPC.
=============== Харкон-Radiation-это небольшой инструмент, расширяющий библиотеку Harcon, чтобы обеспечить интерфейс на основе отдыха и WebSocket. После вашей конфигурации ваши услуги в ваших организациях будут автоматически раскрыты через REST / WebSocket.
Каждый раз, когда вы публикуете или отменяете объект, основанный на объекте, излучение Harcon реагирует на изменения и прозрачно поддерживает интерфейсы.
! Примечание: из версии 8.0.0 Harcon поддерживает только узел V8 и ожидает функций. Для версии на основе обратного вызова, пожалуйста, используйте V7 или ниже.
$ npm Установите Harcon-Radiation
let serverconfig = {} let harconconfig = {} let radiationConfig = {} let server = retacd ('harcon-radiation/util/server') let server = server = новый сервер ({name: 'king', server: serverconfig, harcon : harconconfig, radiation: radiationConfig}) await server.init ()
В примере показано, как вы можете легко создать экземпляр сервера. Сервер является экземпляром фазвии с использованием нескольких встроенных плагинов, таких как Fastify-WS, обеспечивая поддержку WebSocket. Сервер инициирует Harcon и Arcon-Radiation, а также настроен.
Основная идея состоит в том, чтобы разоблачить любые объектные организации, опубликованные для Harcon, обладающих атрибутами «Rest» и «WebSocket» через эти интерфейсы Rest и / или WebSocket автоматически без каких-либо необходимых действий.
Поведение по умолчанию состоит в том, чтобы опубликовать все пользовательские сервисы. Однако можно определить правила, чтобы сделать исключения. Установив вариант hideinnerservices , Harcon-Radiation будет скрывать внутренние услуги и не публикует их
var RadiationConfig = {..., Hideinnerservices: true}
Harcon-Radiation может быть настроено двумя способами:
Чтобы определить строку префикса
var RadiationConfig = {..., HideInnerservices: true, inserservicesprefix: '_'})
Чтобы определить функцию, оценивающую имя функций
var radiationConfig = {..., hideinnerservices: true, innerservicesfn: function (name) {return name.startSwith ('inner') || name.startswith ('sys')}})
Openapi Spec
Есть 3 способа разоблачения услуг через отдых:
RESTFUL: Каждая служба будет выявлена на разных URI в соответствии с именем подразделения, контекста/сущности и услуги. Общий шаблон URI IS /{Division}/{Entity}/{Event} . Конечно, каждая часть может быть квалифицированным именем в зависимости от вашей оркестровки Harcon.
JSON-RPC 2.0: Один единственный URI Acccepting JSON-RPC 2.0 вызовы, как определяет спецификация.
Harcon RPC: один URI, принимающий сообщения Harcon JSON
По умолчанию вариант 3 активен, вариант 1 и 2 пассивны.
Следующие настройки активируют опцию Harcon-RPC на URI '/harcon' :
var RadiationConfig = {..., {rest: {iNgenerErestPattern: false}})
RESTful Interface принимает только сообщения. Чтобы обратиться к обнаженной службе, вы должны составить URI, следуя шаблону /{Division}/{entity}/{Event} . Например:
post -> 'http://localhost:8080/Harcon/book/log'
с
{ params: [ 'Hello!'] }
будет обращаться к сервису «журнал» компонента «книги» в подразделении «harcon» . Ответ сущности будет отправлен обратно как JSON.
Harcon-Radiation поддерживает JSON-RPC 2.0, если вы создаете инстанцию следующим образом:
var RadiationConfig = {..., REST: {jsonRpcpath: '/rpctwo'})
Это примет запрос POST по пути '/rpctwo', касающийся стандарта JSON-RPC 2.0.
Примечание. Имейте в виду ограничения JSON-RPC. Он не поддерживает оркестровку, такие как подразделения или контексты, поэтому адресация должна быть ограничена initityname.service , субдомины/субконцепты не могут быть рассмотрены.
Следующие настройки активируют опцию Harcon-RPC на URI '/harcon' :
var RadiationConfig = {..., {rest: {harconrpcpath: '/harcon'}})
Отправляя следующий JSON на адрес, вы можете обратиться к методу «терминус» организации «Мари» в подразделении «King.charming» :
{Division: 'king.charming', событие: 'marie.terminus', params: ['szióka!']}
Сообщение о harcon json схема
Использование WebSockets также просто. Следующая конфигурация активирует интерфейсы, принимающие сообщения Harcon JSON.
var RadiationConfig = {..., {websocket: {harconpath: '/socket'}})
Отправить пакет на этот интерфейс:
const websocket = require ('ws') socketClient = new WebSocket ('ws: // localhost: 8080/kingsocket') ... socketclient.send (json.stringify ({id: Mid, Division: 'King', событие: Событие: Событие: Событие: Событие: Событие: Событие: Событие: Событие: Событие: Событие: Событие: Событие: Событие: Событие: Событие: Событие: Событие: Событие: Событие: Событие: Событие: Событие: Событие: событие: событие: событие: событие: событие: событие: событие: «Призрак», параметры: ['Bonjour!' .error (новая ошибка (data.error)) if (data.id === mid) console.log (data.result)})
Это отправит сообщение JSON на сервер, выполняющий службу простым из приветствия объекта в Division King . Ответ будет отправлен обратно. Примечание. Настоятельно рекомендуется передавать идентификатор для дифференциации входящих пакетов ответов.
Следующая конфигурация активирует интерфейсы, принимающие сообщения JSON RPC 2.0 JSON.
var RadiationConfig = {..., {webSocket: {jsonrpcpath: '/jsonsocket'}})
Отправить пакет на этот интерфейс:
socketjsonrpcclient.send (json.stringify ({jsonrpc: '2.0', id: mid, division: 'king', метод: 'julie.wakeup', params: []})) socketjsonrpcclient.on ('Сообщение', функция ([]}))) data) {data = json.parse (data) if (data.error) console.error (new error (data.error)) if (data.id === mid) console.log (data.result)})
Вы можете отправлять / транслировать сообщения подключенным слушателям, если ваш бизнес-организация называет метод «сдвинутым» , который является встроенной службой организации Harcon Letting, чтобы информировать систему об изменениях состояния. Harcon-Radiation использует этот механизм для отправки этих сообщений слушателям WebSocket, если он настроен.
Katie = {name: 'katie', context: 'Morning', dobusiness: async function () {await this.shipted ({mood: 'pour toi, marie'}) вернуть 'ok'}}
Это отправит сообщение «настроение» подключенным клиентам с данными «Pour Toi, Marie» . Все свойства объекта, передаваемого функции , «смещенной», будут превращены в отдельные сообщения для трансляции. Полезная нагрузка каждого сообщения будет установлена значением данного свойства.
ПРИМЕЧАНИЕ. Учитывая характер JSON-RPC 2.0, этот уровень обслуживания требует реализации обработки сообщений вне досягаемости спецификации.
По умолчанию функция «сдвинуто» издает сообщение всем подключенным слушателям. Некоторые бизнес -кейсы желают более сфокусированного подхода, нацеленного на определенную группу клиентов. Harcon-Radiation позволяет вам определить 2 службы, чтобы отметить и выбирать клиентов.
Файл конфигурации может определить следующую функцию:
DessageSocket: Async Function (событие, термины, Res, Socket) {return 'ok'}
Функция «назначения» называется последним шагом каждой обработки сообщений, предоставляя возможность отметить текущий клиент -сокет, как показывает пример ниже:
DessageSocket: Async Function (событие, термины, Res, Socket) {if (event === 'julie.login') socket.name = repreturn 'ok'}
Если сообщение «julie.login» было успешно обработано, результат службы будет связан с подключенным гнетом.
Что изменяется в государственном смене, и клиенты должны быть уведомлены, функция идентификатора будет вызвана следующим образом:
this.shipted ({mood: 'Pour Toi, Claire'}, 'claire') ... IdentifySockets: Async Function (Sockets, Target) {let Filtered = [] for (пусть сокет сокетов) if (target === '*' ||.
Функция идентификации, идентифицируемые, вызывается внутренней трансляцией функции, выполняемой THE, сдвинутой пользователем функцией, сдвинутой . Роль Funtion IdentifySockets состоит в том, чтобы отфильтровать клиентов для отправки сообщений. По умолчанию все клиенты подключенного к WebSocket будут уведомлены.
Harcon-Radiation позволяет определить функцию щита в файле конфигурации, чтобы защитить систему от нежелательной адресации или достижения ограниченной области:
var harcon = new Harcon ({ ... Щит: функция (разделение, событие) {return false}})
Если эта функция вернет «true», входящее сообщение должно быть отклонено ошибкой: «Сообщение было заблокировано»
Nimesis-это встроенная организация Harcon-Radiation, предоставляющая одну услугу:
Mimic: function (EntityDef) {
Он принимает определения объектов Harcon как строка и преобразует их в определения объектов, а затем публикует их в соответствии с его конфигурацией. По умолчанию все услуги будут выставлены как с помощью отдыха и веб -питания. Хорошо служит, когда динамическое расширение или способность публиковать услуги на лету, является требованием. Nimesis будет иметь только 1 определение в качестве ссылки. Когда новое определение доставается, предыдущее будет разрушено.
Вызов функции «RESHAPE» удалит опубликованную сущность.
Примечание. Эта функция служит специальными целями, используйте ее с достаточной осторожностью.
(Лицензия MIT)
Copyright (C) 2018 Imre Fazekas
Настоящее разрешение предоставляется бесплатно любому лицу, получающему копию этого программного обеспечения и связанные с ними файлы документации («Программное обеспечение»), для работы в программном обеспечении без ограничений, включая, помимо прочего, права на использование, копирование, изменение, объединение , публиковать, распространять, сублиценс и/или продавать копии программного обеспечения и разрешить лицам, которым предоставлено программное обеспечение, при условии следующих условий:
Вышеуказанное уведомление об авторском праве и это уведомление о разрешении должно быть включено во все копии или существенные части программного обеспечения.
Программное обеспечение предоставляется «как есть», без гарантии любого рода, явного или подразумеваемого, включая, помимо прочего, гарантии товарной пригодности, пригодности для определенной цели и несоответствия. Ни в коем случае не будут нести ответственность авторов или владельцев авторских прав за любые претензии, ущерб или другую ответственность, будь то в действии контракта, деликт или иным образом, возникающие из или в связи с программным обеспечением или использования или других сделок в ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.
Смотрите https://github.com/imrefazekas/harcon-radiation/issues.