Harcon -Radiation - امتداد لمكتبة Harcon لفضح الخدمات تلقائيًا من خلال REST و/أو WebSocket باستخدام تنسيقات رسائل Harcon و JSONRPC.
================ Harcon-Radiation هي أداة صغيرة تمتد مكتبة Harcon لتوفير واجهة قائمة على WebSocket. بعد تكوينك ، سيتم كشف خدماتك داخل كياناتك من خلال REST / WebSocket تلقائيًا.
في كل مرة تنشر فيها أو إلغاء كيان قائم على الكائن ، يتفاعل Harcon-Radiation مع التغييرات والحفاظ على الواجهات بشفافية.
! ملاحظة: من الإصدار 8.0.0 ، يدعم Harcon فقط العقدة V8 وينتظر وظائف. للإصدار المستند إلى رد الاتصال ، يرجى استخدام V7 أو أدناه.
$ NPM تثبيت Harcon-Radiation
دع ServerConfig = {} دع HarConconfig = {} دع RadiationConfig = {} Let Server = require : Harconconfig ، الإشعاع: RadiationConfig}) Await Server.init ()
يوضح المثال كيف يمكنك إنشاء مثيل خادم بسهولة. الخادم هو مثيل Fastify باستخدام العديد من المكونات الإضافية المدمجة مثل Fastify-WS التي توفر دعم WebSocket. يبدأ الخادم Harcon و Harcon-Radiation وكذلك تكوينه.
تتمثل الفكرة الرئيسية في فضح أي كيانات قائمة على الكائنات المنشورة إلى Harcon التي تمتلك سمات "Rest" و "WebSocket" من خلال واجهات REST و / أو WebSocket تلقائيًا دون الحاجة إلى أي إجراء.
السلوك الافتراضي هو نشر جميع الخدمات المعرفة من قبل المستخدم. ومع ذلك ، يمكن للمرء تحديد القواعد لاستثناء الاستثناءات. من خلال تحديد الخيار Hideinnerservices ، سوف يخفي Harcon-Radiation الخدمات الداخلية ولن ينشرها
var radiationConfig = {... ، Hideinnerservices: true}
يمكن تكوين Harcon-Radiation بطريقتين:
لتحديد سلسلة البادئة
var RadiationConfig = {... ، Hideinnerservices: true ، innerservicesprefix: '_'})
لتحديد وظيفة تقييم اسم الوظائف
var radiationConfig = {... ، Hideinnerservices: true ، innerservicesfn: function (name) {return name.startswith ('inner') || name.startswith ('sys')}})
Spec Openapi
هناك 3 طرق لفضح الخدمات من خلال الراحة:
Restful: سيتم كشف كل خدمة على URI مختلفة وفقًا لاسم القسم والسياق/الكيان والخدمة. نمط URI العام هو /{division}/{intity}/{event} . بالطبع ، يمكن أن يكون كل جزء اسمًا مؤهلاً اعتمادًا على تزامن Harcon الخاص بك.
JSON-RPC 2.0: One One One URI تصدر مكالمات JSON-RPC 2.0 كما تحدد المواصفات.
Harcon RPC: URI واحد يقبل رسائل Harcon JSON
بشكل افتراضي ، الخيار 3 نشط ، الخيار 1 و 2 سلبي.
ستقوم الإعدادات التالية بتنشيط خيار Harcon-RPC على URI '/Harcon " :
var radiationConfig = {... ، {rest: {stillRestPattern: false}})
تقبل الواجهة المريحة الرسائل فقط. لمعالجة خدمة مكشوفة ، يجب عليك إنشاء URI بعد النمط /{Division}/{intity}/{event} . على سبيل المثال:
post -> 'http://localhost:8080/Harcon/book/log'
مع جسم
{ params: [ 'Hello!'] }
سوف تتناول خدمة "سجل" الخدمة للمكون " في القسم " Harcon " . سيتم إرسال إجابة الكيان باسم JSON.
يدعم Harcon-Radiation JSON-RPC 2.0 إذا قمت بإنشاء Instace على النحو التالي:
var radiationConfig = {... ، rest: {jsonrpcpath: '/rpctwo'})
سيقبل هذا الطلب على المسار "/RPCTWO" فيما يتعلق بمعيار JSON-RPC 2.0.
ملاحظة: كن على علم بالقيود المتمثلة في JSON-RPC. لا يدعم التزامن مثل الأقسام أو السياقات ، وبالتالي يجب أن تقتصر المعالجة على entityName.SERVICE ، لا يمكن معالجة النطاقات الفرعية/المكون الفرعي.
ستقوم الإعدادات التالية بتنشيط خيار Harcon-RPC على URI '/Harcon " :
var radiationConfig = {... ، {rest: {harconrpcpath: '/harcon'}})
عن طريق إرسال JSON التالي إلى العنوان ، يمكنك معالجة طريقة "Terminus" للكيان "ماري" في القسم "king.charming" :
{Division: 'King.Charming' ، event: 'Marie.terminus' ، params: ['szióka!']}
هاركون رسالة مخطط JSON
استخدام WebSockets واضح أيضا. يقوم التكوين التالي بتنشيط الواجهات التي تقبل رسائل Harcon JSON.
var radiationConfig = {... ، {websocket: {harconpath: '/socket'}})
أرسل الحزمة إلى تلك الواجهة:
const websocket = require ('ws') socketClient = جديد websocket ('ws: // localhost: 8080/kingsocket') ... socketclient.send (json.stringify ({id: mid ، division: 'king' ، event: "Greet.simple" ، المعلمات: ["Bonjour!" ، "Salut!" .error (خطأ جديد (data.error)) إذا (data.id === mid) console.log (data.result)})
سيؤدي ذلك إلى إرسال رسالة JSON إلى الخادم الذي يقوم بالخدمة البسيطة في تحية الكيان في Division King . سيتم إعادة الاستجابة مرة أخرى. ملاحظة: يوصى بشدة بالمعرف لتمييز حزم الإجابة الواردة.
يقوم التكوين التالي بتنشيط الواجهات التي تقبل رسائل JSON RPC 2.0 JSON.
var radiationConfig = {... ، {websocket: {jsonrpcpath: '/jsonsocket'}})
أرسل الحزمة إلى تلك الواجهة:
socketjsonrpcclient.send (json.stringify ({jsonrpc: '2.0' ، id: mid ، division: 'king' ، method: 'julie.wakeup' ، params: []})) socketjsonrpcclient.on ('message' ، function (function ( البيانات) {data = json.parse (data) if (data.error) console.error (خطأ جديد (data.error)) إذا (data.id === mid) console.log (data.result)})
يمكنك إرسال / بث رسائل إلى المستمعين المتصلين إذا استدعى كيان عملك الطريقة "التي تم تحويلها" ، وهي خدمة مدمجة لكيانات Harcon لإعلام النظام بتغييرات الحالة. يستخدم Harcon-Radiation هذه الآلية لإرسال تلك الرسائل إلى مستمعي WebSocket إذا تم تكوينه.
katie = {name: 'katie' ، السياق: 'morning' ، dobusiness: async function () {incait this.shifted ({mood: 'dour toi ، marie'}) return 'ok'}}
سيؤدي ذلك إلى إرسال رسالة "الحالة المزاجية" إلى العملاء المتصلين بالبيانات "Pour Toi ، Marie" . سيتم تحويل جميع خصائص الكائن الذي تم تمريره إلى الوظيفة "التي تم تحويلها" إلى رسائل منفصلة ليتم بثها. سيتم تعيين حمولة كل رسالة من خلال قيمة الخاصية المحددة.
ملاحظة: بالنظر إلى طبيعة JSON-RPC 2.0 ، يتطلب هذا المستوى من الخدمة تنفيذ معالجة الرسائل خارج نطاق المواصفات.
بشكل افتراضي ، تنبعث وظيفة "تحول" إلى جميع المستمعين المتصلين. ترغب بعض الحالات التجارية في نهج أكثر تركيزًا ، واستهداف مجموعة محددة من العملاء. يتيح لك Harcon-Radiation تحديد خدمتين لتمييز العملاء وتحديدهم.
قد يحدد ملف التكوين الوظيفة التالية:
envisionSocket: وظيفة Async (الحدث ، المصطلحات ، الدقة ، المقبس) {return 'ok'}
تسمى الوظيفة "envisionSocket" على أنها الخطوة الأخيرة من كل معالجة الرسائل ، مما يتيح الفرصة لتمييز مقبس العميل الحالي كما يوضح المثال أدناه:
envisionSocket: وظيفة Async (الحدث ، المصطلحات ، الدقة ، المقبس) {if (event === 'julie.login') socket.name = regreturn 'ok'}
إذا تمت معالجة رسالة "julie.login" بنجاح ، فستكون نتيجة الخدمة مرتبطة بالمقبس المتصل.
ما يتغير عليه تحول الدولة ويجب إخطار العملاء ، وسيتم تسمية المعرفات الوظيفية على النحو التالي:
this.shifted ({Mood: 'Pour toi ، Claire'} ، 'Claire') ... identifysockets: async function (sockets ، target) {let filtered = [] for (let socket of sockets) if (target ==== *'||
يتم استدعاء معرف الوظيفة من قبل البث الداخلي للوظيفة التي يتم تنفيذها بواسطة الوظيفة التي يسمى المستخدم. يتمثل دور معرف الترون في تصفية العملاء لإرسال الرسائل إليها. بشكل افتراضي ، سيتم إخطار جميع عملاء WebSocket المتصلين.
يتيح لك Harcon-Radiation تحديد وظيفة الدرع في ملف التهيئة من أجل حماية النظام من المعالجة غير المرغوب فيها أو الوصول إلى المنطقة المقيدة:
var harcon = new harcon ({ ... درع: وظيفة (القسم ، الحدث) {return false}})
إذا كانت هذه الوظيفة تعود "صواب" ، فيجب رفض الرسالة الواردة بخطأ: "تم حظر الرسالة"
Nimesis هو كيان مدمج من Harcon-Radiation يوفر خدمة واحدة:
تقليد: وظيفة (entitydef) {
إنه يقبل تعريفات كيان Harcon كسلسلة وتحولها إلى تعريفات الكيان ثم تنشرها وفقًا لتكوينها. بشكل افتراضي ، سيتم عرض جميع الخدمات من خلال REST و WebSockets أيضًا. يخدم بشكل جيد عندما يكون الامتداد الديناميكي أو القدرة على نشر الخدمات على النحو أمرًا متطلبًا. سيحتفظ NIMESIS بالتعريف واحد فقط كمرجع. عندما يكون تعريف تعريف جديد ، سيتم تدمير التعريف السابق.
سيؤدي استدعاء وظيفة "إعادة تشكيل" إلى إزالة الكيان المنشور.
ملاحظة: هذه الميزة تخدم أغراضًا خاصة ، استخدمها بحذر كافٍ.
(ترخيص معهد ماساتشوستس للتكنولوجيا)
حقوق الطبع والنشر (C) 2018 Imre Fazekas
يتم منح الإذن بموجب هذا ، مجانًا ، لأي شخص يحصل على نسخة من هذا البرنامج وملفات الوثائق المرتبطة ("البرنامج") ، للتعامل في البرنامج دون تقييد ، بما في ذلك على سبيل المثال لا الحصر حقوق استخدام ، نسخ ، تعديل ، دمج أو نشر نسخ وتوزيعها و/أو بيعها و/أو بيع نسخ من البرامج ، والسماح للأشخاص الذين يتم تقديم البرنامج لهم للقيام بذلك ، مع مراعاة الشروط التالية:
يجب إدراج إشعار حقوق الطبع والنشر أعلاه وإشعار الإذن هذا في جميع النسخ أو الأجزاء الكبيرة من البرنامج.
يتم توفير البرنامج "كما هو" ، دون أي ضمان من أي نوع ، صريح أو ضمني ، بما في ذلك على سبيل المثال لا الحصر ضمانات القابلية للتسويق واللياقة لغرض معين وعدم الانفجار. لن يكون المؤلفون أو حاملي حقوق الطبع والنشر بأي حال من الأحوال مسؤولاً عن أي مطالبة أو أضرار أو مسؤولية أخرى ، سواء في إجراء عقد أو أضرار أو غير ذلك ، ناشئة عن البرامج أو خارجها أو الاستخدام أو غيرها برمجة.
انظر https://github.com/imrefazekas/harcon-radiation/issues.