HARCON -radiation-使用HARCON和JSONRPC消息格式通過REST和/或Websocket自動公開服務的擴展名。
================ harcon-radiation是一個小工具,該工具擴展了Harcon庫,以提供基於REST和WESBOCKECT的接口。配置後,您的實體中的服務將通過REST / Websocket自動公開。
每次您發布或撤銷基於對象的實體時,HARCON-放射都會對更改做出反應並透明地維護接口。
!注意:從8.0.0版本中,Harcon僅支持節點V8並等待功能。對於基於回調的版本,請使用V7或以下。
$ npm安裝harcon-radiation
令serverconfig = {}讓harconconfig = {}讓radiationconfig = {}讓server = require = require('harcon-radiation/util/server')let server = server = server = new server = new server({name:'king ',server',server',server:serverconfig,harconfig,harconfig,harconfig,harconfig,harconfig,harconfig,harconfig,harconfig,harconfig,harcon :harconconfig,輻射:radiationConfig})等待server.init()
該示例顯示瞭如何輕鬆創建服務器實例。該服務器是使用多個內置插件(例如Fastify-ws提供Websocket支持)的快速實例。服務器啟動HARCON和HARCON-radiation以及配置。
主要思想是通過那些REST和 /或Websocket界面自動揭示具有“ REST”和“ Websocket”屬性“ REST”和“ Websocket”的任何基於對象的實體,而無需採取任何操作。
默認行為是發布所有用戶定義的服務。但是,可以定義規則以做例外。通過設置選項hideinnerservices ,harcon-radiation將隱藏內在服務,不會發布它們
var radiationconfig = {...,hideinnerservices:true}
可以通過兩種方式配置HARCON-放射:
定義前綴字符串
var radiationConfig = {...,hideinnerservices:true,innerServicesprefix:'_''})
定義評估功能名稱的函數
var radiationConfig = {...,hideinnerservices:true,innerServicesfn:function(name){return name.startswith('inne'')|| name.startswith('sys')}})
OpenAPI規格
有三種通過休息來暴露服務的方法:
靜止:每種服務將按照部門,上下文/實體和服務的名稱在不同的URI上暴露。一般的URI模式為/{difer}/{entity}/{event} 。當然,根據您的Harcon編排,每個部分都可以是合格的名稱。
JSON-RPC 2.0:一個單一的URI迫使JSON-RPC 2.0調用作為規範定義。
HARCON RPC:一個URI接受Harcon JSON消息
默認情況下,選項3處於活動狀態,選項1和2是被動的。
以下設置將激活URI '/harcon'上的HARCON-RPC選項:
var radiationconfig = {...,{ret {rest:{nignoreRestPattern:false}})
RESTFUL接口僅接受發布消息。要解決暴露的服務,您必須按照模式/{distrion}/{entity}/{event}組成一個URI。例如:
post -> 'http://localhost:8080/Harcon/book/log'
有一個
{ params: [ 'Hello!'] }
將解決“ harcon”部中組件“書”的“日誌” 。實體的答案將被送回JSON。
HARCON-jadiation支持JSON-RPC 2.0,如果您創建了以下功能:
var radiationConfig = {...,rether:{jsonrpcpath:'/rpctwo'})
這將接受尊重JSON-RPC 2.0標準的路徑'/rpctwo'上的發布請求。
注意:請注意JSON-RPC的局限性。它不支持諸如劃分或上下文之類的編排,因此解決應限於EntityName 。服務,子域/子語言無法解決。
以下設置將激活URI '/harcon'上的HARCON-RPC選項:
var radiationconfig = {...,{ret {rest:{harconrpcpath:'/harcon'}})
通過將以下JSON發送到地址,您可以在“ King.Charming”部中解決實體“ Marie”的方法“終點” :
{distry:'king.charming',事件:'marie.terminus',參數:['szióka!']}
HARCON消息JSON模式
使用Websocket也很簡單。以下配置激活接受HARCON JSON消息的接口。
var radiationConfig = {...,{websocket:{harconath:'/socket'}})
將數據包發送到該接口:
const websocket = require('ws')socketClient = new websocket('ws:// localhost:8080/kingsocket')... socketClient.Send(json.stringify({id:id:id:id:id:mid difision :'yid difision:'king','king',event:evest:evest: 'engret.simple',參數:['bonjour!','salut!']}))socketClient.on('Message',function ',data = data = json.parse(data)if(data.error) 。
這將向服務器發送JSON消息,以執行Division King中實體問候的服務。響應將發送回。注意:強烈建議通過ID傳遞以區分傳入的答案數據包。
以下配置激活接受JSON RPC 2.0 JSON消息的接口。
var radiationConfig = {...,{websocket:{jsonrpcpath:'/jsonsocket'}})
將數據包發送到該接口:
socketjsonrpcclient.send(json.stringify({jsonrpc:'2.0',id:中,difiss:'king',method:'julie.wakeup',params:[]})socketjsonrpcclient.on data){data = json.parse (data)if(data.error)console.error(new error(data.error))if(data.id =====米中)console.log(data.result)})
如果您的業務實體稱之為“移動” ,則可以向連接的偵聽器發送 /廣播消息,這是Harcon的內置服務,讓實體向系統告知狀態變化。 HARCON-放射使用此機制(如果配置)將這些消息發送給Websocket偵聽器。
katie = {name:'katie',上下文:'早晨',dobusiness:async function(){等待this.shifted({Mood:'pour toi,marie'})返回'ok'ok'}}}
這將通過數據“ Poul Toi,Marie”向連接的客戶發送消息“情緒”。傳遞給“移位”函數的對象的所有屬性將變成要廣播的單獨消息。每個消息的有效載荷將由給定屬性的值設置。
注意:考慮到JSON-RPC 2.0的性質,此服務級別需要實施超出規范范圍的消息處理。
默認情況下,函數“移動”發出的消息傳給了所有接口的偵聽器。一些業務案例希望採用更專注的方法,以定義的客戶群為目標。 HARCON-jadiation允許您定義2個服務以標記和選擇客戶端。
配置文件可能會定義以下功能:
分配:異步函數(事件,術語,res,socket){返回'ok'}
函數“ agissocket”被稱為每個消息處理的最後一步,這使得需要標記當前客戶插座的機會,如下面的示例所示:
sistientSocket:async函數(事件,術語,res,socket){if(event ==='julie.login')socket.name = resreturn'ok'ok'}
如果已成功處理消息“ Julie.login” ,則該服務的結果將與連接的插座關聯。
國家輪班正在發生變化,應通知客戶端,該功能識別函數將被調用如下:
chhifted({MOOD:'pour toi,claire'},'claire')...識別詞彙:async函數(套接字,target){讓filtered = [] for for(sockets of Sockets)if(target == ============================ '*'||。
該函數標識了通過由用戶稱呼函數移動的內部函數廣播調用。函數識別量的作用是濾除客戶將消息發送到。默認情況下,將通知所有連接的WebSocket客戶端。
HARCON-jadiation允許您在配置文件中定義屏蔽功能,以保護系統免受不需要的地址或達到限制區域:
var harcon = new harcon({{ ...盾牌:功能(difis,event){return false}})
如果該函數返回“ true”,則應通過錯誤拒絕傳入消息:“消息已被阻止”
Nimesis是一個提供一項單一服務的HarCadiation的內置實體:
模擬:函數(entityDef){
它接受HARCON實體定義為字符串,並將其轉換為實體定義,然後根據其配置將其發布。默認情況下,所有服務也將通過REST和WebSocket公開。當動態擴展或能夠直接發布服務的能力是必要的時,服務良好。 Nimesis僅將1個定義作為參考。當收入新的定義時,將會破壞上一個定義。
調用該函數為“重塑”將刪除已發布的實體。
注意:此功能是特殊目的,請謹慎使用。
(麻省理工學院許可證)
版權(c)2018 imre fazekas
特此免費授予任何獲得此軟件副本和相關文檔文件(“軟件”)的人,以無限制處理該軟件,包括無限制,使用,複製,修改,合併的權利,發布,分發,分佈和/或出售該軟件的副本,並允許提供該軟件的人,但要遵守以下條件:
上述版權通知和此許可通知應包含在軟件的所有副本或大量部分中。
該軟件是“原樣”提供的,沒有任何形式的明示或暗示保證,包括但不限於適銷性,特定目的的適用性和非侵權的保證。 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE軟體.
請參閱https://github.com/imrefazekas/harcon-radiation/issues。