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
特此免费授予任何获得此软件副本和相关文档文件(“软件”)的人,以无限制处理该软件,包括无限制,使用,复制,修改,合并的权利,发布,分发,分布和/或出售该软件的副本,并允许提供该软件的人,但要遵守以下条件:
上述版权通知和此许可通知应包含在软件的所有副本或大量部分中。
该软件是“原样”提供的,没有任何形式的明示或暗示保证,包括但不限于适销性,特定目的的适用性和非侵权的保证。在任何情况下,作者或版权持有人均不应对任何索赔,损害赔偿或其他责任责任,无论是在合同,侵权或其他方面的诉讼中,与软件或与软件或使用或其他交易有关的诉讼或其他责任软件。
请参阅https://github.com/imrefazekas/harcon-radiation/issues。