HARCON -RADIATION- HARCON 및 JSONRPC 메시지 형식을 사용하여 REST 및/또는 WebSocket을 통해 서비스를 자동으로 노출시키기 위해 Harcon 라이브러리의 확장.
================= Harcon-Radiation은 Harcon 라이브러리를 확장하여 REST- 및 WEBSOCKE 기반 인터페이스를 제공하는 작은 도구입니다. 구성에 따라 엔터티 내의 서비스는 REST / WebSocket을 통해 자동으로 노출됩니다.
객체 기반 엔티티를 게시하거나 취소 할 때마다 Harcon-Radiation은 변경 사항에 반응하고 인터페이스를 투명하게 유지합니다.
! 참고 : 버전 8.0.0에서 Harcon은 노드 v8 및 대기 기능 만 지원합니다. 콜백 기반 버전의 경우 v7 이하를 사용하십시오.
$ npm Harcon-radiation을 설치합니다
LET ServerConfig = {} HARCONCONFIG = {} LET RADIATIONCONFIG = {} let server = require ( 'harcon-radiation/util/server') let server = server = 새 서버 ({King ', Server : ServerConfig, Harcon : harconconfig, 방사선 : RadiationConfig}) await server.init ()
예제는 서버 인스턴스를 쉽게 만들 수있는 방법을 보여줍니다. 서버는 WebSocket 지원을 제공하는 Fastify-WS와 같은 여러 내장 플러그인을 사용하는 Fastify 인스턴스입니다. 서버는 Harcon과 Harcon-radiation과 구성된 구성을 시작합니다.
주요 아이디어는 해당 REST 및 / 또는 WebSocket 인터페이스를 통해 조치를 취하지 않고 자동으로 'REST' 및 'WebSocket'을 소유 한 Harcon에 게시 된 객체 기반 엔티티를 노출시키는 것입니다.
기본 동작은 모든 사용자 정의 서비스를 게시하는 것입니다. 그러나 예외를 수행하기 위해 규칙을 정의 할 수 있습니다. hideinnerservices 옵션을 설정하면 Harcon-Radiation은 내부 서비스를 숨기고 게시하지 않습니다.
var radiationConfig = {..., hideinnerservices : true}
Harcon-radiation은 두 가지 방법으로 구성 할 수 있습니다.
접두사 문자열을 정의합니다
var radiationConfig = {..., hideinnerservices : true, innerservicesprefix : '_'})
함수 이름을 평가하는 함수를 정의하려면 함수의 이름을 평가합니다.
var radiationconfig = {..., hideinnerservices : true, innerservicesfn : function (name) {return name.startswith ( '내부') || name.startswith ( 'sys')}})
OpenApi 사양
휴식을 통해 서비스를 노출시키는 3 가지 방법이 있습니다.
RESTFUL : 각 서비스는 부서 이름, 상황/엔티티 및 서비스에 따라 다른 URI에 노출됩니다. 일반 URI 패턴은 /{division}/{entity}/{event} 입니다. 물론, 각 부분은 Harcon 오케스트레이션에 따라 자격을 갖춘 이름이 될 수 있습니다.
JSON-RPC 2.0 : 사양이 정의 된대로 JSON-RPC 2.0 호출을 설명하는 단일 URI 하나.
Harcon RPC : Harcon Json 메시지 수락 한 단일 URI
기본적으로 옵션 3은 활성화되며 옵션 1 및 2는 수동적입니다.
다음 설정은 URI '/Harcon' 에서 HARCON-RPC 옵션을 활성화합니다.
var radiationConfig = {..., {rest : {gnorerestpattern : false}})
RESTFUL 인터페이스는 메시지 만 게시합니다. 노출 된 서비스를 해결하려면 /{division}/{entity}/{event} 에 따라 URI를 작성해야합니다. 예를 들어:
post -> 'http://localhost:8080/Harcon/book/log'
몸과 함께
{ params: [ 'Hello!'] }
'하콘' 부서의 구성 요소 '책' 의 서비스 '로그'를 다룰 것입니다. 엔티티의 답변은 JSON으로 다시 전송됩니다.
Harcon-radiation은 JSON-RPC 2.0을 지원합니다.
var radiationconfig = {..., rens : {jsonrpcpath : '/rpctwo'})
이는 JSON-RPC 2.0 표준에 대한 경로 '/rpctwo' 에 대한 사후 요청을 수락합니다.
참고 : JSON-RPC의 한계를 알고 있어야합니다. 부서 나 컨텍스트와 같은 오케스트레이션을 지원하지 않으므로 주소 지정은 EntityName 으로 제한되어야합니다 .Service, 하위 도메인/하위 컨텍스트를 다룰 수 없습니다.
다음 설정은 URI '/Harcon' 에서 HARCON-RPC 옵션을 활성화합니다.
var radiationConfig = {..., {rest : {harconrpcpath : '/harcon'}})
다음 JSON을 주소로 보내면 'King.Charming' 부서의 엔티티 'Marie' 의 'Terminus' 방법을 다룰 수 있습니다.
{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', 이벤트 : 'greet.simple', 매개 변수 : [ 'bonjour!', 'salut!')) socketclient.on ( 'message', function (data) {data = json.parse (data.error) 콘솔 .Error (새 오류 (data.error)) if (data.id === mid) console.log (data.result)})
이것은 Division King 에서 엔티티 인사 의 단순한 서비스를 수행하는 서버에 JSON 메시지를 보냅니다. 응답은 다시 전송됩니다. 참고 : 들어오는 답변 패킷을 구별하기 위해 ID를 전달하는 것이 좋습니다.
다음 구성은 JSON RPC 2.0 JSON 메시지를 수락하는 인터페이스를 활성화합니다.
var radiationConfig = {..., {webSocket : {jsonrpcPath : '/jsonsocket'}})
해당 인터페이스로 패킷을 보내십시오.
socketjsonrpcclient.send (json.stringify ({jsonrpc : '2.0', id : mid, division : 'king', method : 'julie.wakeup', params : []})) socketjsonrpcclient.on ( 'message', function ( data) {data = json.parse (data) if (data.error) console.error (new Error (data.error)) if (data.id === mid) console.log (data.result)})
비즈니스 엔티티가 메소드를 '이동'하는 방법을 호출하는 경우 연결된 청취자에게 메시지를 보내거나 방송 할 수 있습니다. 이는 Harcon의 내장 서비스 인 엔티티가 상태 변경에 대해 시스템에 알릴 수 있도록합니다. Harcon-radiation 은이 메커니즘을 사용하여 구성된 경우 해당 메시지를 WebSocket 리스너에게 전송합니다.
Katie = {이름 : 'Katie', Context : 'Morning', Dobusiness : async function () {this.shifted ({mood : 'pout toi, marie'})}}}}}
이렇게하면 'Mood'가 'Mood'를 'Pour Toi, Marie' 로 연결된 클라이언트에게 보냅니다. '이동 된' 함수로 전달 된 객체의 모든 속성은 방송 될 별도의 메시지로 전환됩니다. 각 메시지의 페이로드는 주어진 속성의 값으로 설정됩니다.
참고 : JSON-RPC 2.0의 특성을 고려할 때이 수준의 서비스는 사양 범위를 넘어 메시지 처리를 구현해야합니다.
기본적으로 '이동 된' 기능은 연결된 모든 청취자에게 메시지를 방출합니다. 일부 비즈니스 사례는 정의 된 클라이언트 그룹을 대상으로보다 집중된 접근 방식을 원합니다. Harcon-Radiation을 사용하면 2 개의 서비스를 정의하여 클라이언트를 표시하고 선택할 수 있습니다.
구성 파일은 다음 함수를 정의 할 수 있습니다.
ansartsocket : async (이벤트, 이용자, RES, 소켓) {return 'Ok'}}
함수 'antartsocket'은 각 메시지 처리의 최종 단계라고 불립니다. 아래의 예에서 알 수 있듯이 현재 클라이언트 소켓을 표시 할 수있는 기회가 필요합니다.
할인 혜택 : Async (이벤트, 약관, RES, 소켓) {if (event === 'Julie.Login') socket.name = Reseturn 'Ok'}}
'Julie.Login' 메시지가 성공적으로 처리 된 경우 서비스 결과가 연결된 소켓과 관련됩니다.
상태 변화가 변경되고 고객에게 알리면 기능 식별 기능을 다음과 같이 호출합니다.
this.shifted ({mood : 'pout toi, claire'}, 'claire') ... identifysockets : async 함수 (소켓, target) {let filtered = [] for (소켓 소켓) if (target === '*'|| socket.name === target.name === target.name.
기능 식별 기능은 사용자 통화 기능이 이동 한 내부 기능 방송 에 의해 호출됩니다. 기능 식별 요소 의 역할은 클라이언트를 필터링하여 메시지를 보내는 것입니다. 기본적으로 모든 연결된 WebSocket 클라이언트에 알림이 표시됩니다.
Harcon-radiation은 원치 않는 주소 또는 제한된 영역에 도달하지 않도록 시스템을 보호하기 위해 구성 파일에서 실드 기능을 정의 할 수 있습니다.
var Harcon = New Harcon ({ ... Shield : 함수 (Division, Event) {return false}})
해당 기능이 'true'를 반환하면 들어오는 메시지는 오류로 거부되어야합니다. '메시지가 차단되었습니다'.
Nimesis는 하나의 단일 서비스를 제공하는 Harcon-Radiation의 내장 엔티티입니다.
MIMIC : function (entityDef) {
Harcon Entity 정의를 문자열로 받아들이고 엔티티 정의로 변환 한 다음 구성에 따라 게시합니다. 기본적으로 모든 서비스는 REST 및 WebSocket을 통해 노출됩니다. 역동적 인 확장 또는 서비스를 현장에서 출판 할 수있는 능력이 요구되는 경우에도 잘 작동합니다. Nimesis는 참조로서 1 정의 만 보유합니다. 새로운 정의가 소득되면 이전의 정의가 파괴 될 것입니다.
함수를 '재구성' 으로 호출하면 게시 된 엔티티가 제거됩니다.
참고 :이 기능은 특별한 목적으로 사용되며 적절한주의를 기울여 사용합니다.
(MIT 라이센스)
저작권 (C) 2018 Imre Fazekas
이에 따라이 소프트웨어 및 관련 문서 파일 ( "소프트웨어")의 사본을 얻는 사람에게 허가는 제한없이 소프트웨어를 처리 할 수있는 사람에게 무료로 제공됩니다. , 소프트웨어의 사본을 게시, 배포, 서브 리센스 및/또는 판매하고, 소프트웨어가 제공하도록하는 사람을 다음과 같은 조건에 따라 할 수 있도록합니다.
위의 저작권 통지 및이 권한 통지는 소프트웨어의 모든 사본 또는 실질적인 부분에 포함되어야합니다.
이 소프트웨어는 상업성, 특정 목적에 대한 적합성 및 비 침해에 대한 보증을 포함하여 명시 적 또는 묵시적 보증없이 "그대로"제공됩니다. 어떠한 경우에도 저자 또는 저작권 보유자는 계약, 불법 행위 또는 기타, 소프트웨어 또는 사용 또는 기타 거래와 관련하여 계약, 불법 행위 또는 기타의 행동에 관계없이 청구, 손해 또는 기타 책임에 대해 책임을지지 않아야합니다. 소프트웨어.
https://github.com/imrefazekas/harcon-radiation/issues를 참조하십시오.