HARCON -RADIAÇÃO - Uma extensão da biblioteca Harcon para expor automaticamente os serviços por meio de REST e/ou WebSocket usando formatos de mensagem Harcon e JSONRPC.
================ A radiação harcon é uma pequena ferramenta que estende a biblioteca Harcon para fornecer uma interface baseada em descanso e websocket. Após sua configuração, seus serviços em suas entidades serão expostos através do REST / WebSocket automaticamente.
Toda vez que você publica ou revoga uma entidade baseada em objetos, a radiação harcon reage às alterações e mantém as interfaces de forma transparente.
NOTA: Na versão 8.0.0, o Harcon suporta apenas o nó v8 e aguardam funções. Para versão baseada em retorno de chamada, use V7 ou abaixo.
$ npm Instale harcon-radiação
Deixe serverconfig = {} Deixe HarconConfig = {} Deixe RadiationConfig = {} Deixe Server = requer ('Harcon-Radiação/Util/Server') Let Server = Novo Server ({Nome: 'King', Server: ServerConfig, Harcon : HarconConfig, Radiação: RadiationConfig}) Aguarda Server.init ()
O exemplo mostra como você pode criar uma instância do servidor facilmente. O servidor é uma instância do Fastify usando vários plugins internos, como o Fastify-Ws, fornecendo suporte ao WebSocket. O servidor inicia o harcon e a radiação harcon, bem como configurado.
A idéia principal é expor as entidades baseadas em objetos publicadas a Harcon que possui atributos 'Rest' e 'Websocket' através dessas interfaces REST e / ou WebSocket automaticamente sem nenhuma ação necessária.
O comportamento padrão é publicar todos os serviços definidos pelo usuário. No entanto, é possível definir regras para obter exceções. Ao definir a opção HideinnerServices , a Harcon-radiation ocultará os serviços internos e não os publicará
var radiationConfig = {..., HideInnerServices: true}
A radiação harcon pode ser configurada de 2 maneiras:
Para definir uma string de prefixo
var radiationConfig = {..., HideinnerServices: true, innerServicesPrefix: '_'})
Para definir uma função avaliando o nome das funções
var radiationConfig = {..., HideInnerServices: true, innerServicesfn: function (nome) {return name.startswith ('interno') || name.startswith ('sys')}})
Speci Speci
Existem 3 maneiras de expor os serviços através do REST:
RESTful: Cada serviço será exposto em diferentes URI, de acordo com o nome da divisão, contexto/entidade e serviço. O padrão URI geral é /{division}/{entidade}/{event} . Obviamente, cada parte pode ser um nome qualificado, dependendo da sua orquestração Harcon.
JSON-RPC 2.0: Um único URI acumulando chamadas JSON-RPC 2.0 como a especificação define.
Harcon RPC: Um único URI aceitando uma Harcon JSON MENSEJAS
Por padrão, a opção 3 está ativa, as opções 1 e 2 são passivas.
As configurações a seguir ativarão a opção Harcon-RPC no URI '/Harcon' :
var radiationConfig = {..., {Rest: {ignorerestPattern: false}})
Interface RESTful aceita apenas mensagens postais. Para abordar um serviço exposto, você deve compor um URI seguindo o padrão /{Division}/{entity}/{Event} . Por exemplo:
post -> 'http://localhost:8080/Harcon/book/log'
com um corpo de
{ params: [ 'Hello!'] }
abordará o serviço 'log' do componente 'livro' na divisão 'Harcon' . A resposta da entidade será enviada de volta como JSON.
A radiação da Harcon suporta JSON-RPC 2.0 se você criar o Instace da seguinte forma:
var radiationConfig = {..., descanso: {jsonrpcPath: '/rpctwo'})
Isso aceitará a solicitação de postagem no caminho '/rpctwo', respeitando o padrão JSON-RPC 2.0.
Nota: Esteja ciente das limitações do JSON-RPC. Ele não suporta orquestração como divisões ou contextos, portanto, o abordagem deve ser limitado a entityName.Service , subdomínios/subcontextos não podem ser abordados.
As configurações a seguir ativarão a opção Harcon-RPC no URI '/Harcon' :
var radiationConfig = {..., {Rest: {HarconrpcPath: '/Harcon'}})
Ao enviar o seguinte JSON para o endereço, você pode abordar o método 'Terminus' da entidade 'Marie' na divisão 'King.Charming' :
{Division: 'King.Charming', evento: 'Marie.terminus', Params: ['Szióka!']}
HARCON MENSAGEM JSON Schema
Usar WebSockets também é direto. A configuração a seguir ativa as interfaces que aceitam as mensagens Harcon JSON.
var radiationConfig = {..., {webSocket: {Harconpath: '/Socket'}})
Envie o pacote para essa interface:
const webSocket = requer ('ws') soketclient = new websocket ('ws: // localhost: 8080/kingsocket') ... SocketClient.send (json.stringify ({id: mid, divisão: 'rei', evento: 'Greet.simple', parâmetros: ['Bonjour!', 'Salut!' .Error (novo erro (data.error)) if (data.id === MID) console.log (data.result)})
Isso enviará uma mensagem JSON para o servidor executando o serviço simples da entidade cumprimenta no rei da divisão. A resposta será enviada de volta. NOTA: Um ID é altamente recomendado para ser transmitido para diferenciar os pacotes de respostas recebidos.
A configuração a seguir ativa as interfaces que aceitam mensagens JSON RPC 2.0 JSON.
var radiationConfig = {..., {webSocket: {jsonrpcPath: '/jsonsocket'}})
Envie o pacote para essa interface:
Socketjsonrpcclient.send (json.stringify ({jsonrpc: '2.0', id: mid, divisão: 'rei', método: 'julie.wakeup', params: []})) soockjsonrpcclient.on ('mensagem', função (função (função (função (função ([]}))) dados) {data = json.parse (dados) if (data.error) console.error (novo erro (data.error)) if (data.id === MID) console.log (data.result)})
Você pode enviar / transmitir mensagens para os ouvintes conectados se sua entidade comercial chamar o método de 'deslocado' , que é um serviço interno da Harcon deixando as entidades para informar o sistema sobre as alterações do estado. A radiação da Harcon usa esse mecanismo para enviar essas mensagens aos ouvintes do WebSocket, se configurado.
Katie = {nome: 'katie', context: 'Morning', Dobusiness: assync function () {aguarda this.shifted ({humor: 'Pour Toi, marie'}) retornar 'ok'}}
Isso enviará a mensagem 'humor' para os clientes conectados com os dados 'Pour Toi, Marie' . Todas as propriedades do objeto passadas para a função 'deslocadas' serão transformadas em mensagens separadas a serem transmitidas. A carga útil de cada mensagem será definida pelo valor da propriedade especificada.
NOTA: Considerando a natureza do JSON-RPC 2.0, esse nível de serviço requer implementar o tratamento de mensagens além do alcance da especificação.
Por padrão, a função 'deslocada' emite uma mensagem para todos os ouvintes conectados. Alguns casos de negócios desejam uma abordagem mais focada, visando um grupo definido de clientes. A radiação da Harcon permite definir 2 serviços para marcar e selecionar clientes.
O arquivo de configuração pode definir a seguinte função:
Atribuído: função assíncrona (evento, termos, res, soquete) {return 'ok'}
A função 'atribuído' é chamada de etapa final de cada processamento de mensagens, dando a oportunidade de marcar o soquete atual do cliente, como o exemplo abaixo demonstra:
Atribuído: função assíncrona (event, termos, res, soquete) {if (event === 'Julie.login') soquete.name = resevolv 'ok'}
Se uma mensagem 'Julie.login' tiver sido processada com sucesso, o resultado do serviço será associado ao soquete conectado.
O que uma mudança de estado está mudando e os clientes devem ser notificados, a função IdentifySockets será chamada da seguinte maneira:
this. '*' ||.
A função Identifysockets é chamada pela transmissão de função interna executada pela função chamada de usuário mudada . O papel da função Identifysockets é filtrar os clientes para enviar as mensagens. Por padrão, todos os clientes do WebSocket conectados serão notificados.
A radiação da Harcon permite definir uma função de blindagem no arquivo de configuração para proteger o sistema contra endereços indesejados ou alcance da área restrita:
var Harcon = novo Harcon ({ ... Shield: function (divisão, evento) {return false}})
Se essa função retornar 'True', a mensagem de entrada deve ser rejeitada com um erro: 'A mensagem foi bloqueada'
Nimesis é uma entidade embutida de radiação harcon, fornecendo um único serviço:
Mimic: function (entitydef) {
Ele aceita definições de entidade Harcon como string e as converte em definições de entidade e depois a publica de acordo com sua configuração. Por padrão, todos os serviços também serão expostos através do REST e da WebSockets. Serve bem quando a extensão dinâmica ou a capacidade de publicar serviços on-the-fly é um requisito. A Nimesis manterá apenas 1 definição como referência. Quando uma nova definição renda, a anterior será destruída.
Chamar a função de 'remodelação' removerá a entidade publicada.
Nota: Este recurso está servindo a propósitos especiais, use -o com cautela adequada.
(A licença do MIT)
Copyright (c) 2018 Imre Fazekas
É concedida permissão, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e arquivos de documentação associados (o "software"), para lidar com o software sem restrição, incluindo, sem limitação, os direitos de uso, copiar, modificar, mesclar .
O aviso de direitos autorais acima e este aviso de permissão devem ser incluídos em todas as cópias ou em partes substanciais do software.
O software é fornecido "como está", sem garantia de qualquer tipo, expresso ou implícito, incluindo, entre outros, as garantias de comercialização, aptidão para uma finalidade específica e não innoculação. Em nenhum caso os autores ou detentores de direitos autorais serão responsabilizados por qualquer reclamação, danos ou outro passivo, seja em uma ação de contrato, delito ou não, decorrente de, fora ou em conexão com o software ou o uso ou outras negociações nos Software.
Veja https://github.com/imrefazekas/harcon-radiation/issues.