Harcon -Radiation - Perpanjangan ke Perpustakaan Harcon untuk secara otomatis mengekspos layanan melalui istirahat dan/atau WebSocket menggunakan format pesan Harcon dan JSONRPC.
================ Harcon-Radiation adalah alat kecil yang memperluas perpustakaan Harcon untuk menyediakan antarmuka berbasis istirahat, dan Websocket. Mengikuti konfigurasi Anda, layanan Anda di dalam entitas Anda akan diekspos melalui REST / WebSocket secara otomatis.
Setiap kali Anda menerbitkan atau mencabut entitas berbasis objek, Harcon-Radiation bereaksi terhadap perubahan dan mempertahankan antarmuka secara transparan.
Catatan: Dari versi 8.0.0, Harcon hanya mendukung fungsi Node V8 dan menunggu. Untuk versi berbasis callback, gunakan V7 atau di bawah.
$ npm menginstal harcon-radiasi
Biarkan serverconfig = {} biarkan harconConfig = {} let RadiationConfig = {} let server = membutuhkan ('Harcon-Radiation/Util/Server') Let Server = server = server baru ({name: 'King', Server: ServerConfig, Harcon : HarconConfig, Radiasi: RadiationConfig}) menunggu server.init ()
Contohnya menunjukkan bagaimana Anda dapat membuat instance server dengan mudah. Server adalah instance kalibah menggunakan beberapa plugin built-in seperti Fictify-WS yang menyediakan dukungan WebSocket. Server memulai Harcon dan Harcon-Radiation serta dikonfigurasi.
Gagasan utamanya adalah untuk mengekspos entitas berbasis objek yang diterbitkan ke Harcon yang memiliki atribut 'istirahat' dan 'WebSocket' melalui istirahat dan / atau antarmuka WebSocket secara otomatis tanpa tindakan apa pun yang diperlukan.
Perilaku default adalah untuk mempublikasikan semua layanan yang ditentukan pengguna. Namun, seseorang dapat mendefinisikan aturan untuk membuat pengecualian. Dengan mengatur opsi HideInnerservices , Harcon-Radiation akan menyembunyikan layanan dalam dan tidak akan mempublikasikannya
var RadiationConfig = {..., HideInnerservices: true}
Harcon-Radiation dapat dikonfigurasi dalam 2 cara:
Untuk mendefinisikan string awalan
var RadiationConfig = {..., HideInnerservices: True, InnerservicesPrefix: '_'})
Untuk mendefinisikan fungsi yang mengevaluasi nama fungsi
var RadiationConfig = {..., HideInnerservices: True, InnerservicesFn: function (name) {return name.startswith ('dalam') || name.startswith ('sys')}})
Spesifikasi openapi
Ada 3 cara untuk mengekspos layanan melalui istirahat:
RESTFUL: Setiap layanan akan diekspos pada URI yang berbeda sesuai nama Divisi, Konteks/Entitas dan Layanan. Pola URI Umum adalah /{Divisi}/{entitas}/{event} . Tentu saja, setiap bagian dapat menjadi nama yang memenuhi syarat tergantung pada orkestrasi Harcon Anda.
JSON-RPC 2.0: Satu URI tunggal yang mempercepat panggilan JSON-RPC 2.0 sebagai spesifikasi yang ditentukan.
Harcon RPC: Satu Uri tunggal menerima pesan Harcon Json
Secara default, opsi 3 aktif, opsi 1 dan 2 pasif.
Pengaturan berikut akan mengaktifkan opsi Harcon-RPC di URI '/Harcon' :
var RadiationConfig = {..., {rest: {ignorerestpattern: false}})
Antarmuka yang tenang hanya menerima pesan posting. Untuk mengatasi layanan yang diekspos, Anda harus menyusun URI mengikuti pola /{divisi}/{entitas}/{event} . Misalnya:
post -> 'http://localhost:8080/Harcon/book/log'
dengan tubuh
{ params: [ 'Hello!'] }
akan membahas layanan 'log' dari komponen 'buku' di divisi 'Harcon' . Jawaban entitas akan dikirim kembali sebagai JSON.
Harcon-Radiation mendukung JSON-RPC 2.0 jika Anda membuat Instace sebagai berikut:
var RadiationConfig = {..., REST: {JSONRPCPATH: '/RPCTWO'})
Ini akan menerima permintaan pos di jalur '/rpctwo' menghormati standar JSON-RPC 2.0.
Catatan: Perhatikan keterbatasan JSON-RPC. Itu tidak mendukung orkestrasi seperti divisi atau konteks, oleh karena itu menangani harus dibatasi pada entityname.service , subdomain/subkonteks tidak dapat diatasi.
Pengaturan berikut akan mengaktifkan opsi Harcon-RPC di URI '/Harcon' :
var radiationconfig = {..., {rest: {harconrpcpath: '/harcon'}})
Dengan mengirim JSON berikut ke alamat, Anda dapat membahas metode 'terminal' entitas 'Marie' di Divisi 'King.Charming' :
{Division: 'King.Charming', acara: 'marie.terminus', params: ['szióka!']}
SKEMA HARCON PESAN JSON
Menggunakan websockets juga mudah. Konfigurasi berikut mengaktifkan antarmuka yang menerima pesan Harcon JSON.
var RadiationConfig = {..., {WebSocket: {HarconPath: '/Socket'}})
Kirim paket ke antarmuka itu:
const WebSocket = membutuhkan ('ws') socketclient = websocket baru ('ws: // localhost: 8080/kingsocket') ... socketclient.send (json.stringify ({id: mid, divisi: 'king', acara: 'salam.simple', parameter: ['bonjour!', 'Salut!' .Error (kesalahan baru (data.error)) if (data.id === mid) console.log (data.Result)})
Ini akan mengirim pesan JSON ke server yang melakukan layanan sederhana dari Entity Salam di Division King . Tanggapan akan dikirim kembali. Catatan: ID sangat disarankan untuk diteruskan untuk membedakan paket jawaban yang masuk.
Konfigurasi berikut mengaktifkan antarmuka yang menerima pesan JSON RPC 2.0 JSON.
var RadiationConfig = {..., {WebSocket: {jsonrpcpath: '/jsonsocket'}})
Kirim paket ke antarmuka itu:
socketjsonrpcclient.send (json.stringify ({jsonrpc: '2.0', id: mid, divisi: 'king', metode: 'julie.wakeup', params: []})) socketjsonrpcclient.on ('pesan', fungsi (fungsi ([]})) data) {data = json.parse (data) if (data.error) console.error (kesalahan baru (data.error)) if (data.id === mid) console.log (data.result)}))
Anda dapat mengirim / menyiarkan pesan ke pendengar yang terhubung jika entitas bisnis Anda memanggil metode ini 'bergeser' , yang merupakan layanan bawaan dari Harcon membiarkan entitas untuk menginformasikan sistem tentang perubahan keadaan. Harcon-Radiation menggunakan mekanisme ini untuk mengirimkan pesan-pesan tersebut kepada pendengar Websocket jika dikonfigurasi.
Katie = {name: 'Katie', Context: 'Morning', Dobusiness: Async Function () {menunggu this.shifted ({mood: 'pour toi, marie'}) kembalikan 'ok'}}
Itu akan mengirim pesan 'suasana hati' ke klien yang terhubung dengan data 'pour toi, marie' . Semua properti objek yang diteruskan ke fungsi 'bergeser' akan diubah menjadi pesan terpisah untuk disiarkan. Payload setiap pesan akan ditetapkan oleh nilai properti yang diberikan.
Catatan: Mempertimbangkan sifat JSON-RPC 2.0, tingkat layanan ini perlu menerapkan penanganan pesan di luar jangkauan spesifikasi.
Secara default, fungsi 'bergeser' memancarkan pesan ke semua pendengar yang terhubung. Beberapa kasus bisnis menginginkan pendekatan yang lebih fokus, menargetkan kelompok klien yang ditentukan. Harcon-Radiation memungkinkan Anda untuk mendefinisikan 2 layanan untuk menandai dan memilih klien.
File konfigurasi mungkin menentukan fungsi berikut:
Menetapkan Fungsi Async (Acara, Ketentuan, Res, Socket) {return 'OK'}
Fungsi 'penetapan kuncup' disebut sebagai langkah terakhir dari setiap pemrosesan pesan yang memberikan kesempatan untuk menandai soket klien saat ini diperlukan seperti yang ditunjukkan oleh contoh di bawah ini:
AssiCocket: fungsi async (event, istilah, res, soket) {if (event === 'julie.login') socket.name = resreturn 'ok'}
Jika pesan 'julie.login' telah berhasil diproses, hasil dari layanan akan dikaitkan dengan soket yang terhubung.
Apa perubahan keadaan berubah dan klien harus diberi tahu, fungsi mengidentifikasioket akan disebut sebagai berikut:
ini. '*' ||.
Fungsi IdentifySockets disebut oleh siaran fungsi internal yang dilakukan oleh fungsi yang disebut pengguna bergeser . Peran Funtion IdentifySockets adalah untuk memfilter klien untuk mengirim pesan ke. Secara default semua klien Websocket yang terhubung akan diberitahu.
Harcon-Radiation memungkinkan Anda untuk mendefinisikan fungsi perisai dalam file konfigurasi untuk melindungi sistem dari pengalamatan yang tidak diinginkan atau mencapai area terbatas:
var harcon = new Harcon ({ ... Shield: function (divisi, peristiwa) {return false}})
Jika fungsi itu mengembalikan 'benar', pesan yang masuk harus ditolak dengan kesalahan: 'pesan telah diblokir'
Nimesis adalah entitas built-in dari Harcon-Radiation yang menyediakan satu layanan:
mimic: function (entityDef) {
Ia menerima definisi entitas Harcon sebagai string dan mengubahnya menjadi definisi entitas kemudian menerbitkannya sesuai konfigurasinya. Secara default, semua layanan akan diekspos melalui istirahat dan websockets juga. Melayani dengan baik ketika ekstensi dinamis atau kemampuan untuk mempublikasikan layanan secara langsung adalah persyaratan. Nimesis hanya akan memiliki 1 definisi sebagai referensi. Ketika pendapatan definisi baru, yang sebelumnya akan dihancurkan.
Memanggil fungsi 'Reshape' akan menghapus entitas yang diterbitkan.
Catatan: Fitur ini melayani tujuan khusus, gunakan dengan hati -hati yang memadai.
(Lisensi MIT)
Hak Cipta (C) 2018 IMRE FAZEKAS
Izin dengan ini diberikan, gratis, kepada siapa pun yang mendapatkan salinan perangkat lunak ini dan file dokumentasi terkait ("Perangkat Lunak"), untuk menangani perangkat lunak tanpa pembatasan, termasuk tanpa batasan hak untuk menggunakan, menyalin, memodifikasi, menggabungkan , menerbitkan, mendistribusikan, sublisense, dan/atau menjual salinan perangkat lunak, dan untuk mengizinkan orang -orang yang dilengkapi dengan perangkat lunak untuk melakukannya, tunduk pada kondisi berikut:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini harus dimasukkan dalam semua salinan atau bagian substansial dari perangkat lunak.
Perangkat lunak ini disediakan "sebagaimana adanya", tanpa jaminan apa pun, tersurat maupun tersirat, termasuk tetapi tidak terbatas pada jaminan dapat diperjualbelikan, kebugaran untuk tujuan tertentu dan nonpringement. Dalam hal apa pun penulis atau pemegang hak cipta tidak akan bertanggung jawab atas klaim, kerusakan atau tanggung jawab lainnya, baik dalam tindakan kontrak, gugatan atau sebaliknya, timbul dari, di luar atau sehubungan dengan perangkat lunak atau penggunaan atau transaksi lain dalam PERANGKAT LUNAK.
Lihat https://github.com/imrefazekas/harcon-radiation/issues.