HARCON -Radiation - Eine Erweiterung der Harcon -Bibliothek, um Dienste automatisch über REST und/oder WebSocket mithilfe von HARCON- und JSONRPC -Nachrichtenformaten aufzudecken.
================ HARCON-Radiation ist ein kleines Tool, das die Harcon-Bibliothek erweitert, um eine rest- und webocket-basierte Schnittstelle bereitzustellen. Nach Ihrer Konfiguration werden Ihre Dienste innerhalb Ihrer Entitäten automatisch über REST / WebSocket freigelegt.
Jedes Mal, wenn Sie eine objektbasierte Entität veröffentlichen oder widerrufen, reagiert die Harcon-Strahlung auf die Änderungen und führt die Schnittstellen transparent bei.
HINWEIS: Aus Version 8.0.0 unterstützt Harcon nur den Knoten V8 und wartet auf Funktionen. Für eine Rückruf-basierte Version verwenden Sie bitte v7 oder unten.
$ npm Installieren Sie Harcon-Radiation
Sei Serverconfig = {} let harconfig = {} let radiationconfig = {} let server = require : harconconfig, Strahlung: Strahlungconfig}) warte server.init ()
Das Beispiel zeigt, wie Sie einfach eine Serverinstanz erstellen können. Der Server ist eine Fastify-Instanz, die mehrere integrierte Plugins wie Fastify-WS verwendet, die WebSocket-Unterstützung bieten. Der Server initiiert die HARCON und die Harcon-Strahlung sowie die konfigurierte.
Die Hauptidee besteht darin, objektbasierte Entitäten aufzudecken, die Harcon über diese Rest- und / oder WebSocket -Schnittstellen, die automatisch ohne Maßnahmen erforderlich sind, über diese Rest- und / oder Websocket-Schnittstellen aufzeigen.
Das Standardverhalten besteht darin, alle benutzerdefinierten Dienste zu veröffentlichen. Man kann jedoch Regeln definieren, um Ausnahmen zu machen. Durch die Festlegung der Option Hideinnerservices wird die Harcon-Radiation innere Dienste verbergen und wird sie nicht veröffentlichen
var radiationconfig = {..., hideInneservices: true}
Harcon-Radiation kann auf 2 Arten konfiguriert werden:
Um eine Präfix -Zeichenfolge zu definieren
var radiationconfig = {..., hideInneservices: true, InnerservicePrefix: '_'})
Um eine Funktion zu definieren, die den Namen der Funktionen bewertet
var radiationconfig = {..., hideInneservices: true, InnerservicesFn: Funktion (Name) {return name.startswith ('inner') || name.Startswith ('sys')}})
OpenAPI Spec
Es gibt 3 Möglichkeiten, Dienste durch Ruhe aufzudecken:
Pastful: Jeder Dienst wird auf verschiedenen URI gemäß dem Namen der Teilung, des Kontextes/der Entität und des Dienstes ausgesetzt. Das allgemeine URI -Muster ist /{Division}/{Entity}/{Ereignis} . Natürlich kann jeder Teil von Ihrer Harcon -Orchestrierung ein qualifizierter Name sein.
JSON-RPC 2.0: Ein einzelner URI-Akzeptieren JSON-RPC 2.0-Anrufe nach Abschluss der Spezifikation.
Harcon RPC: Ein einziger Uri, der eine Harcon JSON -Nachrichten akzeptiert
Standardmäßig ist Option 3 aktiv, Option 1 und 2 sind passiv.
Die folgenden Einstellungen aktivieren die HARCON-RPC-Option auf Uri '/harcon' :
var radiationconfig = {..., {rest: {ignorereTPattern: false}})
RESTFOFFUR -Interface akzeptiert nur Post -Nachrichten. Um einen verfügbaren Dienst anzusprechen, müssen Sie ein URI nach dem Muster /{Division}/{Entity}/{Ereignis} komponieren. Zum Beispiel:
post -> 'http://localhost:8080/Harcon/book/log'
mit einem Körper von
{ params: [ 'Hello!'] }
adressiert das Service 'Protokoll' des Komponentenbuchs ' in der Abteilung ' Harcon ' . Die Antwort des Unternehmens wird als JSON zurückgesandt.
Die Harcon-Radiation unterstützt JSON-RPC 2.0, wenn Sie das Instace wie folgt erstellen:
var radiationconfig = {..., rest: {jsonrpcPath: '/rpctwo'})
Dadurch wird die Postanforderung auf dem Pfad '/rpctwo' in Bezug auf den JSON-RPC 2.0-Standard akzeptiert.
Hinweis: Beachten Sie die Einschränkungen von JSON-RPC. Es unterstützt keine Orchestrierung wie Abteilungen oder Kontexte. Daher sollte die Adressierung auf EntityName beschränkt sein. Service, Subdomains/Subcontexte können nicht behandelt werden.
Die folgenden Einstellungen aktivieren die HARCON-RPC-Option auf Uri '/harcon' :
var radiationconfig = {..., {rest: {harconrpcPath: '/harcon'}})
Indem Sie das folgende JSON an die Adresse senden, können Sie die Methode 'Terminus' der Entität 'Marie' in der Division 'King.Charming' ansprechen:
{Division: 'King.Charming', Ereignis: 'Marie.terminus', Params: ['Szióka!']}}
HARCON -Nachricht JSON -Schema
Die Verwendung von Websockets ist ebenfalls unkompliziert. Die folgende Konfiguration aktiviert die Schnittstellen, die Harcon JSON -Nachrichten akzeptieren.
var radiationconfig = {..., {webocket: {harconpath: '/socket'}})
Paket an diese Schnittstelle senden:
const webocket = required ('ws') socketClient = new WebSocket ('WS: // localhost: 8080/kingsocket') ... socketclient.send (json.stringify ({id: mid, division: 'king', event: "Greet.Simple", Parameter: ["Bonjour!", "Salut!" .Error (neuer Fehler (data.Error)) if (data.id === mid) console.log (data.result)})
Dadurch wird eine JSON -Nachricht an den Server gesendet, der den Dienst einfach im Division King ausführt . Die Antwort wird zurückgesandt. Hinweis: Es wird dringend empfohlen, die eingehenden Antwortpakete zu differenzieren.
Die folgende Konfiguration aktiviert die Schnittstellen, die JSON RPC 2.0 JSON -Nachrichten akzeptieren.
var radiationconfig = {..., {WebSocket: {jsonRpcPath: '/jsonsocket'}})
Paket an diese Schnittstelle senden:
SocketjsonRpcclient.send (JSON.Stringify ({JSONRPC: '2.0', ID: MID, Division: 'King', Methode: 'Julie.WakeUp', Params: []}) SocketjsonRpcclient.on ('Nachricht', Funktion (Funktion (Funktion (], Funktion (Funktion (), Funktion (Funktion ( Data) {data = json.parse (data) if (data.Error) console.Error (neuer Fehler (data.Error)) if (data.id === MID) console.log (Data.Result)})
Sie können Nachrichten an vernetzte Hörer senden / senden, wenn Ihre Unternehmen Entität die Methode "verschoben" bezeichnet. Dies ist ein integrierter Service von Harcon, das Unternehmen über das System über staatliche Änderungen informiert. Harcon-Radiation verwendet diesen Mechanismus, um diese Nachrichten an die WebSocket-Hörer zu senden, wenn sie konfiguriert werden.
Katie = {Name: 'Katie', Kontext: 'Morgen', dobusiness: async function () {warte auf diese.
Dadurch wird die Meldung "Stimmung" an die verbundenen Clients mit den Daten "Pour Toi, Marie" gesendet. Alle Eigenschaften des Objekts, die an die Funktion „verschoben“ übergeben werden, werden in separate Nachrichten umgewandelt, die ausgestrahlt werden sollen. Die Nutzlast jeder Nachricht wird durch den Wert der angegebenen Eigenschaft festgelegt.
HINWEIS: In Anbetracht der Art des JSON-RPC 2.0 muss diese Serviceebene über die Reichweite der Spezifikation hinaus implementieren.
Standardmäßig gibt die Funktion "verschoben" alle verbundenen Hörer aus. Einige Geschäftsfälle wünschen sich einen fokussierteren Ansatz und zielen auf eine definierte Gruppe von Kunden ab. Mit Harcon-Radiation können Sie 2 Dienste definieren, um Kunden zu markieren und auszuwählen.
Die Konfigurationsdatei kann die folgende Funktion definieren:
Acialsocket: Async -Funktion (Ereignis, Begriffe, Res, Socket) {return 'OK'}
Die Funktion 'AcialsSocket' wird als letzter Schritt jeder Nachrichtenverarbeitung bezeichnet, wobei die Möglichkeit, den aktuellen Client -Socket zu markieren, benötigt wird, wie das folgende Beispiel zeigt:
ordnungssocket: asynchrische Funktion (Ereignis, Begriffe, Res, Socket) {if (event === 'julie.login') socket.name = resReturn 'OK'}
Wenn eine Nachricht 'Julie.login' erfolgreich verarbeitet wurde, wird das Ergebnis des Dienstes mit dem angeschlossenen Sockel verbunden.
Was sich eine staatliche Verschiebung ändert und die Kunden benachrichtigt werden, werden die Funktionen identifysockets wie folgt aufgerufen:
this.shifted ({Stimmung: 'pour toi, claire'}, 'claire') ... identifysockets: asynchrische Funktion (Sockets, Ziel) {let filtred = [] für (let Socket von Steckdosen) if (target === '*' ||.
Die Funktion identifysockets wird durch die interne Funktionsübertragung aufgerufen, die von der von der benutzerdefinierten Funktion veränderten Funktion ausgeführt wird. Die Aufgabe der Funktionen identifysockets besteht darin, die Clients herauszufiltern, um die Nachrichten zu senden. Standardmäßig werden alle verbundenen WebSocket -Clients benachrichtigt.
Mit Harcon-Radiation können Sie eine Schildfunktion in der Konfigurationsdatei definieren, um das System vor unerwünschter Adressierung oder Erreichung des eingeschränkten Bereichs zu schützen:
var harcon = new harcon ({{ ... Schild: Funktion (Division, Ereignis) {return false}})
Sollte diese Funktion 'true' zurückgeben, sollte die eingehende Nachricht mit einem Fehler abgelehnt werden: 'Die Nachricht wurde blockiert'
Nimesis ist eine eingebaute Einheit der Harcon-Radiation, die einen einzigen Service bietet:
mimic: function (entitydef) {
Es akzeptiert HARCON -Entitätsdefinitionen als Zeichenfolge und konvertiert sie in Entitätsdefinitionen und veröffentlichen sie dann nach seiner Konfiguration. Standardmäßig werden alle Dienste auch über Ruhe und Websockets freigelegt. Es ist eine gute Leistung, wenn dynamische Erweiterung oder Fähigkeit, Dienste im Fliege zu veröffentlichen, eine Voraussetzung ist. Die Nimesis wird nur eine Definition als Referenz haben. Wenn eine neue Definition einhergeht, wird der vorherige zerstört.
Das Aufrufen der Funktion "Umreshape" wird die veröffentlichte Entität beseitigen.
HINWEIS: Diese Funktion bedient spezielle Zwecke und verwenden Sie sie mit ausreichender Vorsicht.
(Die MIT -Lizenz)
Copyright (C) 2018 Imre Fazekas
Die Erlaubnis wird hiermit kostenlos an eine Person erteilt, die eine Kopie dieser Software und zugehörigen Dokumentationsdateien ("Software") erhält, um die Software ohne Einschränkung zu behandeln, einschließlich ohne Einschränkung der Rechte zu verwenden, zu kopieren, zu modifizieren, zu verschmelzen, verschmelzen , veröffentlichen, vertreiben, unterlizenzieren und/oder Kopien der Software verkaufen und Personen, denen die Software dazu bereitgestellt wird, unter den folgenden Bedingungen ermöglicht:
Die oben genannte Copyright -Mitteilung und diese Erlaubnisbekanntmachung müssen in alle Kopien oder wesentlichen Teile der Software enthalten sein.
Die Software wird "wie es ist" ohne Garantie jeglicher Art, ausdrücklich oder stillschweigend bereitgestellt, einschließlich, aber nicht beschränkt auf die Gewährleistung der Handelsfähigkeit, die Eignung für einen bestimmten Zweck und die Nichtverletzung. In keinem Fall haftet die Autoren oder Urheberrechtsinhaber für Ansprüche, Schäden oder andere Haftungen, sei es in Vertragsmaßnahmen, unerlaubter Handlung oder anderweitig, aus oder im Zusammenhang mit der Software oder anderen Geschäften in der SOFTWARE.
Siehe https://github.com/imrefazekas/harcon-radiation/issues.