โดยทั่วไป RPC เสนอการรวมภาษามากกว่า REST ดังที่คุณกล่าวถึงสิ่งนี้มาพร้อมกับปัญหาหลายประการในแง่ของขนาดการจัดการข้อผิดพลาดความปลอดภัยของประเภท ฯลฯ โดยเฉพาะอย่างยิ่งเมื่อระบบการแจกจ่ายเดียวเกี่ยวข้องกับโฮสต์หลายเครื่องที่ใช้รหัสที่เขียนในหลายภาษา อย่างไรก็ตามหลังจากเขียนระบบธุรกิจที่ใช้ RPC, REST และแม้ทั้งสองพร้อมกันฉันพบว่ามีเหตุผลที่ดีในการเลือก RPC ผ่าน REST ในบางกรณี
นี่คือกรณีที่ฉันพบว่า RPC เหมาะสมกว่า:
- คลัปแน่น ส่วนประกอบ (กระจาย) ของระบบได้รับการออกแบบมาเพื่อทำงานร่วมกันและการเปลี่ยนแปลงองค์ประกอบหนึ่งอาจส่งผลกระทบต่อส่วนประกอบอื่น ๆ ทั้งหมด ไม่น่าเป็นไปได้ที่จะต้องมีการดัดแปลงส่วนประกอบเพื่อสื่อสารกับระบบอื่นในอนาคต
- การสื่อสารที่เชื่อถือได้ ส่วนประกอบจะสื่อสารซึ่งกันและกันทั้งบนโฮสต์เดียวกันหรือบนเครือข่ายที่ไม่น่าจะประสบปัญหาเวลาแฝงการสูญหายของแพ็กเก็ตและอื่น ๆ (ซึ่งยังหมายความว่าคุณจำเป็นต้องออกแบบระบบของคุณเพื่อจัดการกับกรณีเหล่านี้)
- ภาษาชุด ส่วนประกอบทั้งหมด (หรือส่วนใหญ่ทั้งหมด) จะเขียนเป็นภาษาเดียว ไม่น่าเป็นไปได้ที่จะมีการเพิ่มส่วนประกอบเพิ่มเติมในภาษาอื่นในอนาคต
เกี่ยวกับจุดที่เกี่ยวกับ IDL ในระบบ REST คุณต้องเขียนโค้ดที่แปลงข้อมูลในคำขอ REST และการตอบสนองต่อการแสดงข้อมูลภายในที่คุณใช้ แหล่งที่มาของ IDL (ที่มีความคิดเห็นที่ดี) ยังสามารถใช้เป็นเอกสารประกอบของส่วนต่อประสานที่ต้องเขียนและดูแลรักษาแยกต่างหากสำหรับ REST API
รายการสามข้อด้านบนมักเกิดขึ้นเมื่อคุณต้องการสร้างองค์ประกอบหนึ่งของระบบที่ใหญ่กว่า จากประสบการณ์ของฉันส่วนประกอบเหล่านี้มักจะเป็นสิ่งที่ระบบย่อยของพวกเขาต้องสามารถล้มเหลวอย่างอิสระและไม่ทำให้เกิดความล้มเหลวทั้งหมดของระบบย่อยอื่นหรือส่วนประกอบทั้งหมด มีหลายระบบที่เขียนใน Erlang เพื่อให้บรรลุเป้าหมายเหล่านี้เช่นกันและในบางกรณี Erlang อาจเป็นทางเลือกที่ดีกว่าการเขียนระบบในภาษาอื่นและใช้ RPC เพียงเพื่อให้ได้รับประโยชน์เหล่านี้
เช่นเดียวกับปัญหาทางวิศวกรรมส่วนใหญ่ไม่มีวิธีการแก้ไขปัญหาเดียวสำหรับการสื่อสารระหว่างกระบวนการ คุณต้องดูระบบที่คุณกำลังออกแบบและสร้างทางเลือกที่ดีที่สุดสำหรับกรณีการใช้งานของคุณ