HARCON -Radiation: una extensión a la Biblioteca HARCON para exponer automáticamente los servicios a través de REST y/o WebSocket utilizando formatos de mensajes HARCON y JSONRPC.
================ Harcon-Radiation es una pequeña herramienta que extiende la biblioteca HARCON para proporcionar una interfaz basada en REST y WebSocket. Siguiendo su configuración, sus servicios dentro de sus entidades estarán expuestos a través de REST / WebSocket automáticamente.
Cada vez que publica o revoca una entidad basada en objetos, la radiación HARCON reacciona a los cambios y mantiene las interfaces de manera transparente.
! Nota: de la versión 8.0.0, HARCON admite solo el nodo V8 y espera funciones. Para la versión basada en devolución de llamada, use V7 o debajo.
$ npm instalación harcon-radiación
Deje serverconfig = {} deje harconfig = {} let radiationConfig = {} let servidor = request ('Harcon-Radiation/Util/Server') Let Server = Server = New Server ({name: 'King', Server: ServerCig, Harcon : harconcig, radiación: radiationConfig}) espera server.init ()
El ejemplo muestra cómo puede crear una instancia de servidor fácilmente. El servidor es una instancia de Fastify que utiliza varios complementos incorporados como Fastify-WS que proporciona soporte de WebSocket. El servidor inicia el HARCON y la Radiación HARCON, así como configurado.
La idea principal es exponer cualquier entidad basada en objetos publicada a Harcon que posee atributos 'REST' y 'WebSocket' a través de esas interfaces REST y / o WebSocket automáticamente sin requerido ninguna acción.
El comportamiento predeterminado es publicar todos los servicios definidos por el usuario. Sin embargo, uno puede definir reglas para hacer excepciones. Al establecer la opción HideInnerservices , Harcon-Radiation ocultará los servicios internos y no los publicará
var radiationCiG = {..., hideInnerservices: verdadero}
Harcon-Radiation se puede configurar de 2 maneras:
Para definir una cadena de prefijo
var radiationCiG = {..., hideInnerservices: true, innerservicesprefix: '_'})
Para definir una función que evalúa el nombre de las funciones
var radiationConfig = {..., hideInnerservices: true, innerServicesfn: function (name) {return name.startswith ('Inner') || name.startswith ('sys')}})
Spec de OpenApi
Hay 3 formas de exponer los servicios a través de REST:
RESTFUL: Cada servicio se expusirá en diferentes URI según el nombre de la división, el contexto/entidad y el servicio. El patrón URI general es /{división}/{entidad}/{evento} . Por supuesto, cada parte puede ser un nombre calificado dependiendo de su orquestación HARCON.
JSON-RPC 2.0: un solo URI que accesría las llamadas JSON-RPC 2.0 como define la especificación.
HARCON RPC: un solo URI que acepta mensajes HARCON JSON
Por defecto, la opción 3 está activa, las opciones 1 y 2 son pasivas.
La siguiente configuración activará la opción HARCON-RPC en URI '/HARCON' :
var radiationConfig = {..., {REST: {IgnorerEstpattern: False}})
La interfaz RESTful acepta solo mensajes de publicación. Para abordar un servicio expuesto, debe componer un URI siguiendo el patrón /{división}/{entidad}/{evento} . Por ejemplo:
post -> 'http://localhost:8080/Harcon/book/log'
con un cuerpo de
{ params: [ 'Hello!'] }
abordará el servicio 'registro' del componente 'libro' en la división 'Harcon' . La respuesta de la entidad se enviará de regreso como JSON.
Harcon-Radiation admite JSON-RPC 2.0 si crea la instancia de la siguiente manera:
var radiationConfig = {..., REST: {jsonrpcpath: '/rpctwo'})
Esto aceptará la solicitud de publicación en la ruta '/RPCTWO' respetando el estándar JSON-RPC 2.0.
Nota: Tenga en cuenta las limitaciones de JSON-RPC. No admite la orquestación, como las divisiones o contextos, por lo tanto, el direccionamiento debe limitarse a EntityName.Service , no se puede abordar los subdominios/subcontextos.
La siguiente configuración activará la opción HARCON-RPC en URI '/HARCON' :
var radiationConfig = {..., {REST: {harConrpcpath: '/harcon'}})
Al enviar el siguiente JSON a la dirección, puede abordar el método 'terminal' de la entidad 'Marie' en la división 'King.Charming' :
{División: 'King.Charming', Event: 'Marie.terminus', Params: ['Szióka!']}
Mensaje HARCON JSON Schema
Usar WebSockets también es sencillo. La siguiente configuración activa las interfaces que aceptan mensajes HARCON JSON.
var radiationConfig = {..., {WebSocket: {harconpath: '/Socket'}})
Enviar paquete a esa interfaz:
const webSocket = require ('ws') SocketClient = new WebSocket ('ws: // localhost: 8080/kingsocket') ... SocketClient.send (json.stringify ({id: Mid, Division: 'King', Event:: 'Greet.Simple', Parámetros: ['Bonjour!', 'Salut!' .Error (nuevo error (data.Error)) if (data.id === Mid) Console.log (data.Result)})
Esto enviará un mensaje JSON al servidor que realiza el servicio simple de la entidad Salud en Division King . La respuesta se enviará de regreso. NOTA: Se recomienda que una ID se pase para diferenciar los paquetes de respuesta entrantes.
La siguiente configuración activa las interfaces que aceptan mensajes JSON RPC 2.0 JSON.
var radiationCig = {..., {WebSocket: {jsonrpcpath: '/jSonsocket'}})
Enviar paquete a esa interfaz:
Socketjsonrpcclient.send (json.stringify ({jsonrpc: '2.0', id: mediano, división: 'rey', método: 'julie.wakeup', params: []})) Socketjsonrpcclient.on ('Message', function ((function ((Function ( Data) {data = json.parse (data) if (data.error) console.error (nuevo error (data.error)) if (data.id === Mid) console.log (data.result)})
Puede enviar / transmitir mensajes a los oyentes conectados si su entidad comercial llama al método 'cambiado' , que es un servicio incorporado de las entidades de alquilar HARCON para informar al sistema sobre los cambios en el estado. Harcon-Radiation utiliza este mecanismo para enviar esos mensajes a los oyentes de WebSocket si está configurado.
Katie = {nombre: 'Katie', contexto: 'Morning', Dobusiness: Async Function () {espera this.shifted ({Mood: 'Pour Toi, Marie'}) Return 'Ok'}}
Eso enviará el mensaje 'estado de ánimo' a los clientes conectados con los datos 'Pour Toi, Marie' . Todas las propiedades del objeto pasada a la función 'desplazada' se convertirán en mensajes separados para transmitir. La carga útil de cada mensaje será establecida por el valor de la propiedad dada.
Nota: Teniendo en cuenta la naturaleza del JSON-RPC 2.0, este nivel de servicio requiere implementar el manejo de mensajes más allá del alcance de la especificación.
De manera predeterminada, la función 'desplazada' emite un mensaje a todos los oyentes conectados. Algunos casos comerciales desean un enfoque más enfocado, dirigido a un grupo definido de clientes. Harcon-Radiation le permite definir 2 servicios para marcar y seleccionar clientes.
El archivo de configuración puede definir la siguiente función:
Asignación: función async (evento, términos, res, socket) {return 'ok'}
La función 'AsignSocket' se llama como el paso final de cada procesamiento de mensajes, lo que da la oportunidad de marcar el socket actual del cliente, como lo demuestra el siguiente ejemplo:
AsignSocket: Async Function (Event, Terme, Res, Socket) {if (event === 'Julie.login') Socket.name = RErreturn 'Ok'}
Si un mensaje 'julie.login' se ha procesado con éxito, el resultado del servicio se asociará con el socket conectado.
Lo que está cambiando un cambio de estado y los clientes deben ser notificados, las funciones de identificación se llamarán de la siguiente manera:
this.shifted ({estado de ánimo: 'Pour Toi, Claire'}, 'Claire') ... Identifysockets: Función Async (Sockets, Target) {Let Filtered = [] para (Let Socket of Sockets) if (Target ==== '*' ||
La función IdentifySockets se llama por la función interna transmitida realizada por la función insignada por el usuario desplazada . El papel de las funciones de funciones es filtrar a los clientes para enviar los mensajes. Por defecto, todos los clientes de WebSocket conectados serán notificados.
HarCon-Radiation le permite definir una función de escudo en el archivo de configuración para proteger el sistema contra el direccionamiento no deseado o alcanzar el área restringida:
var harcon = new Harcon ({ ... escudo: function (división, evento) {return false}})
Si esa función devuelve 'verdadero', el mensaje entrante debe rechazarse con un error: 'el mensaje ha sido bloqueado'
Nimesis es una entidad incorporada de Harcon-Radiation que proporciona un solo servicio:
Mimic: function (entityDef) {
Acepta las definiciones de la entidad Harcon como cadena y las convierte en definiciones de entidad y luego las publica de acuerdo con su configuración. De forma predeterminada, todos los servicios también se expusirán a través de REST y WebSockets. Sirve bien cuando la extensión dinámica o la capacidad de publicar servicios sobre la marcha es un requisito. El Nimesis mantendrá solo una definición como referencia. Cuando una nueva definición ingresa, la anterior será destruida.
Llamar a la función 'reiniciar' eliminará la entidad publicada.
Nota: Esta característica está sirviendo propósitos especiales, úsela con precaución adecuada.
(La licencia del MIT)
Copyright (c) 2018 Imre Fazekas
El permiso se otorga, de forma gratuita, a cualquier persona que obtenga una copia de este software y archivos de documentación asociados (el "software"), para tratar el software sin restricción, incluidos los derechos de usar, copiar, modificar, modificar, modificar, fusionar , publique, distribuya, sublicence y venda copias del software, y para permitir a las personas a las que se proporciona el software para hacerlo, sujeto a las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o porciones sustanciales del software.
El software se proporciona "tal cual", sin garantía de ningún tipo, expresa o implícita, incluidas, entre otros, las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. En ningún caso los autores o titulares de derechos de autor serán responsables de cualquier reclamo, daños u otro responsabilidad, ya sea en una acción de contrato, agravio o de otro tipo, derivado, de o en relación con el software o el uso u otros tratos en el SOFTWARE.
Ver https://github.com/imrefazekas/harcon-radiation/issues.