Harcon -Radiation - ส่วนขยายไปยัง Library 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 = {} ให้เซิร์ฟเวอร์ = ต้องการ ('harcon-radiation/util/server') ให้เซิร์ฟเวอร์ = เซิร์ฟเวอร์ = เซิร์ฟเวอร์ใหม่ ({ชื่อ: : harconconfig, รังสี: radiationconfig}) รอ Server.init ()
ตัวอย่างแสดงวิธีที่คุณสามารถสร้างอินสแตนซ์เซิร์ฟเวอร์ได้อย่างง่ายดาย เซิร์ฟเวอร์เป็นอินสแตนซ์ Fastify โดยใช้ปลั๊กอินในตัวหลายตัวเช่น Fastify-WS ที่ให้การสนับสนุน WebSocket เซิร์ฟเวอร์เริ่มต้น Harcon และ Harcon-Radiation รวมถึงการกำหนดค่า
แนวคิดหลักคือการเปิดเผยเอนทิตีตามวัตถุใด ๆ ที่เผยแพร่ไปยัง Harcon ที่มีแอตทริบิวต์ 'REST' และ 'WebSocket' ผ่านส่วนที่เหลือและ / หรือ WebSocket อินเทอร์เฟซโดยอัตโนมัติโดยไม่ต้องดำเนินการใด ๆ
พฤติกรรมเริ่มต้นคือการเผยแพร่บริการที่ผู้ใช้กำหนดทั้งหมด อย่างไรก็ตามเราสามารถกำหนดกฎเพื่อให้ยกเว้น โดยการตั้งค่าตัวเลือก HideInnerservices , Harcon-Radiation จะซ่อนบริการภายในและจะไม่เผยแพร่
var radiationConfig = {... , hideInnerservices: true}
Harcon-Radiation สามารถกำหนดค่าได้ใน 2 วิธี:
เพื่อกำหนดสตริงคำนำหน้า
var radiationConfig = {... , hideInnerservices: จริง, innerservicesprefix: '_'})
เพื่อกำหนดฟังก์ชั่นการประเมินชื่อของฟังก์ชัน
var radiationConfig = {... , hideInnerservices: จริง, innerservicesfn: ฟังก์ชั่น (ชื่อ) {return name.startswith ('inner') || name.startswith ('sys')}})
openapi spec
มี 3 วิธีในการเปิดเผยบริการผ่านการพักผ่อน:
Restful: แต่ละบริการจะถูกเปิดเผยใน URI ที่แตกต่างกันตามชื่อของแผนกบริบท/เอนทิตีและบริการ รูปแบบ URI ทั่วไปคือ /{Division}/{Entity}/{Event} แน่นอนว่าแต่ละส่วนอาจเป็นชื่อที่มีคุณสมบัติขึ้นอยู่กับ Harcon orchestration ของคุณ
JSON-RPC 2.0: URI หนึ่งเดียวที่รับการเรียกใช้ JSON-RPC 2.0 เป็นข้อมูลจำเพาะ
Harcon RPC: URI เดียวที่ยอมรับข้อความ Harcon JSON
โดยค่าเริ่มต้นตัวเลือก 3 ใช้งานได้ตัวเลือก 1 และ 2 เป็นแบบพาสซีฟ
การตั้งค่าต่อไปนี้จะเปิดใช้งานตัวเลือก HARCON-RPC บน URI '/HARCON' :
var radiationConfig = {... , {rest: {molondererestpattern: false}})
อินเทอร์เฟซ Restful ยอมรับเฉพาะข้อความโพสต์ ในการจัดการกับบริการที่เปิดเผยคุณต้องเขียน URI ตามรูปแบบ /{division}/{entity}/{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 , โดเมนย่อย/subcontexts ไม่สามารถแก้ไขได้
การตั้งค่าต่อไปนี้จะเปิดใช้งานตัวเลือก HARCON-RPC บน URI '/HARCON' :
var radiationConfig = {... , {rest: {harconrpcpath: '/harcon'}})
โดยการส่ง JSON ต่อไปนี้ไปยังที่อยู่คุณสามารถระบุวิธี 'ปลายทาง' ของเอนทิตี 'Marie' ในแผนก 'King.Charming' :
{ส่วน: 'King.Charming', เหตุการณ์: 'Marie.terminus', params: ['Szióka!']}}
Harcon Message Json Schema
การใช้ WebSockets นั้นตรงไปตรงมา การกำหนดค่าต่อไปนี้เปิดใช้งานอินเทอร์เฟซที่ยอมรับข้อความ Harcon JSON
var radiationConfig = {... , {webSocket: {harconpath: '/socket'}})
ส่งแพ็กเก็ตไปยังอินเทอร์เฟซนั้น:
constwebsocket = ต้องการ ('ws') socketClient = ใหม่ webSocket ('ws: // localhost: 8080/kingsocket') ... socketclient.send (json.stringify ({id: mid, division: 'king', เหตุการณ์: เหตุการณ์: เหตุการณ์: 'greet.simple', พารามิเตอร์: ['bonjour!', 'salut!']})) socketclient.on ('ข้อความ', ฟังก์ชั่น (data) {data = json.parse (data) ถ้า (data.error) คอนโซล .Error (ข้อผิดพลาดใหม่ (data.error)) ถ้า (data.id === mid) console.log (data.result)})
สิ่งนี้จะส่งข้อความ JSON ไปยังเซิร์ฟเวอร์ที่ให้บริการ ง่ายๆ ของ Entity Greet in Division King การตอบกลับจะถูกส่งกลับ หมายเหตุ: ID ขอแนะนำให้ส่งผ่านเพื่อแยกความแตกต่างของแพ็คเก็ตคำตอบที่เข้ามา
การกำหนดค่าต่อไปนี้เปิดใช้งานอินเตอร์เฟสที่ยอมรับข้อความ JSON RPC 2.0 JSON
var radiationConfig = {... , {webSocket: {jsonrpcpath: '/jSonsocket'}})
ส่งแพ็กเก็ตไปยังอินเทอร์เฟซนั้น:
SocketJsonrpcclient.Send (json.stringify ({jsonrpc: '2.0', id: กลาง, ส่วน: 'ราชา', วิธี: 'julie.wakeup', params: []}) socketjsonrpcclient.on ('ข้อความ' data) {data = json.parse (data) ถ้า (data.error) console.error (ข้อผิดพลาดใหม่ (data.error)) ถ้า (data.id === mid) console.log (data.result)})
คุณสามารถส่งข้อความออก / ออกอากาศไปยังผู้ฟังที่เชื่อมต่อได้หากนิติบุคคลธุรกิจของคุณเรียกวิธี การ 'เปลี่ยน' ซึ่งเป็นบริการในตัวของ Harcon เพื่อให้หน่วยงานแจ้งระบบเกี่ยวกับการเปลี่ยนแปลงของรัฐ Harcon-Radiation ใช้กลไกนี้เพื่อส่งข้อความเหล่านั้นไปยังผู้ฟัง WebSocket หากกำหนดค่า
katie = {ชื่อ: 'katie', บริบท: 'ตอนเช้า', dobusiness: async function () {รอสิ่งนี้. shifted ({mood: 'pe toi, marie'}) กลับ 'ตกลง'}}}
ที่จะส่งข้อความ 'อารมณ์' ไปยังลูกค้าที่เชื่อมต่อด้วยข้อมูล 'pour toi, marie' คุณสมบัติทั้งหมดของวัตถุที่ส่งผ่านไปยังฟังก์ชั่น 'เปลี่ยน' จะถูกเปลี่ยนเป็นข้อความแยกต่างหากที่จะออกอากาศ เพย์โหลดของแต่ละข้อความจะถูกตั้งค่าตามมูลค่าของคุณสมบัติที่กำหนด
หมายเหตุ: เมื่อพิจารณาถึงลักษณะของ JSON-RPC 2.0 การให้บริการระดับนี้จำเป็นต้องใช้การจัดการข้อความเกินขอบเขตของข้อกำหนด
โดยค่าเริ่มต้นฟังก์ชั่น 'เปลี่ยน' จะส่งข้อความไปยังผู้ฟังทั้งหมดที่เชื่อมต่อ กรณีธุรกิจบางกรณีต้องการแนวทางที่มุ่งเน้นมากขึ้นโดยกำหนดเป้าหมายกลุ่มลูกค้าที่กำหนดไว้ Harcon-Radiation ช่วยให้คุณสามารถกำหนด 2 บริการเพื่อทำเครื่องหมายและเลือกไคลเอนต์
ไฟล์กำหนดค่าอาจกำหนดฟังก์ชั่นต่อไปนี้:
AssignSocket: ฟังก์ชั่น async (เหตุการณ์, ข้อกำหนด, res, ซ็อกเก็ต) {return 'ok'}
ฟังก์ชั่น 'AssignSocket' เรียกว่าเป็นขั้นตอนสุดท้ายของการประมวลผลข้อความแต่ละครั้งที่ให้โอกาสในการทำเครื่องหมายซ็อกเก็ตไคลเอ็นต์ปัจจุบันเป็นสิ่งจำเป็นตามตัวอย่างด้านล่างแสดงให้เห็น:
AssignSocket: ฟังก์ชั่น async (เหตุการณ์, ข้อกำหนด, res, ซ็อกเก็ต) {ถ้า (event === 'julie.login') socket.name = resreturn 'ตกลง'}
หากข้อความ 'Julie.login' ได้รับการประมวลผลเรียบร้อยแล้วผลลัพธ์ของบริการจะเชื่อมโยงกับซ็อกเก็ตที่เชื่อมต่อ
สิ่งที่การเปลี่ยนแปลงของรัฐกำลังเปลี่ยนแปลงและลูกค้าควรได้รับแจ้งฟังก์ชั่น idefysockets จะถูกเรียกดังนี้:
this.shifted ({mood: 'pe toi, claire'}, 'claire') ... identifysockets: ฟังก์ชั่น async (ซ็อกเก็ต, เป้าหมาย) {ให้กรอง = [] สำหรับ (ปล่อยซ็อกเก็ตของซ็อกเก็ต) ถ้า (target ===== '*' || socket.name === เป้าหมาย || socket.name === target.name) Filtered.push (ซ็อกเก็ต)
ฟังก์ชั่น identifysockets เรียกว่าโดยฟังก์ชั่นภายใน การออกอากาศ ที่ดำเนินการโดยฟังก์ชั่นที่ผู้ใช้เรียกว่า เปลี่ยน บทบาทของ Funtion idefysockets คือการกรองลูกค้าเพื่อส่งข้อความไป โดยค่าเริ่มต้นไคลเอนต์ WebSocket ที่เชื่อมต่อทั้งหมดจะได้รับแจ้ง
Harcon-Radiation ช่วยให้คุณสามารถกำหนดฟังก์ชั่น Shield ในไฟล์ config เพื่อป้องกันระบบจากการกำหนดที่อยู่ที่ไม่พึงประสงค์หรือถึงพื้นที่ จำกัด :
var harcon = new harcon ({ ... Shield: ฟังก์ชั่น (ส่วน, เหตุการณ์) {return false}})
หากฟังก์ชั่นนั้นส่งคืน 'จริง' ข้อความที่เข้ามาควรถูกปฏิเสธด้วยข้อผิดพลาด: 'ข้อความถูกบล็อก'
Nimesis เป็นเอนทิตีในตัวของ Harcon-Radiation ที่ให้บริการเดียว:
Mimic: function (entityDef) {
มันยอมรับคำจำกัดความของเอนทิตี Harcon เป็นสตริงและแปลงเป็นคำจำกัดความของเอนทิตีจากนั้นเผยแพร่ตามการกำหนดค่า โดยค่าเริ่มต้นบริการทั้งหมดจะถูกเปิดเผยผ่าน REST และ WebSockets เช่นกัน ทำหน้าที่ได้ดีเมื่อมีการขยายแบบไดนามิกหรือความสามารถในการเผยแพร่บริการในการบินเป็นข้อกำหนด nimesis จะมีเพียง 1 คำจำกัดความเป็นข้อมูลอ้างอิง เมื่อรายได้นิยามใหม่หนึ่งรายการก่อนหน้านี้จะถูกทำลาย
การเรียกฟังก์ชั่น 'Reshape' จะลบเอนทิตีที่เผยแพร่
หมายเหตุ: คุณสมบัตินี้มีวัตถุประสงค์พิเศษใช้ด้วยความระมัดระวังอย่างเพียงพอ
(ใบอนุญาต MIT)
ลิขสิทธิ์ (c) 2018 Imre Fazekas
ได้รับอนุญาตโดยไม่เสียค่าใช้จ่ายสำหรับบุคคลใด ๆ ที่ได้รับสำเนาซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง ("ซอฟต์แวร์") เพื่อจัดการในซอฟต์แวร์โดยไม่มีการ จำกัด รวมถึง แต่ไม่ จำกัด เฉพาะสิทธิ์ในการใช้คัดลอกแก้ไขผสาน เผยแพร่แจกจ่าย sublicense และ/หรือขายสำเนาของซอฟต์แวร์และอนุญาตให้บุคคลที่ซอฟต์แวร์ได้รับการตกแต่งให้ทำเช่นนั้นภายใต้เงื่อนไขดังต่อไปนี้:
ประกาศลิขสิทธิ์ข้างต้นและประกาศการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือส่วนสำคัญของซอฟต์แวร์
ซอฟต์แวร์มีให้ "ตามสภาพ" โดยไม่มีการรับประกันใด ๆ ไม่ว่าโดยชัดแจ้งหรือโดยนัยรวมถึง แต่ไม่ จำกัด เฉพาะการรับประกันความสามารถในการค้าการออกกำลังกายสำหรับวัตถุประสงค์เฉพาะและการไม่เข้าร่วม ไม่ว่าในกรณีใดผู้เขียนหรือผู้ถือลิขสิทธิ์จะต้องรับผิดชอบต่อการเรียกร้องความเสียหายหรือความรับผิดอื่น ๆ ไม่ว่าจะเป็นการกระทำของสัญญาการละเมิดหรืออื่น ๆ ซอฟต์แวร์.
ดู https://github.com/imrefazekas/harcon-radiation/issues