บันทึกการตัดสินใจด้านสถาปัตยกรรม: API ที่ใช้ JSON หรือ gRPC
สถานะ
ยอมรับ
บริบท
เรากำลังออกแบบ API สำหรับบริการใหม่ที่จะถูกใช้โดยไคลเอนต์หลายราย เราได้พิจารณาสองทางเลือกในการนำ API ไปใช้: JSON ผ่าน HTTP หรือ gRPC
JSON ผ่าน HTTP เป็นแนวทางที่ใช้กันอย่างแพร่หลายสำหรับการสร้าง API และได้รับการสนับสนุนจากภาษาโปรแกรมและเฟรมเวิร์กมากมาย แนวทางนี้เรียบง่าย เบา และเข้าใจง่าย ทำให้เป็นตัวเลือกที่ดีสำหรับหลายโครงการ แต่อาจมีประสิทธิภาพน้อยกว่าทางเลือกอื่น โดยเฉพาะเมื่อจัดการข้อมูลปริมาณมาก
gRPC ในทางกลับกันเป็นเทคโนโลยีใหม่กว่าที่เสนอวิธีสร้าง API ที่มีประสิทธิภาพมากกว่า ใช้การทำให้เป็นอนุกรมแบบไบนารีในการถ่ายโอนข้อมูล ซึ่งอาจเร็วกว่าและกะทัดรัดกว่าการใช้ JSON gRPC ยังรองรับการสตรีมสองทิศทาง ทำให้เป็นตัวเลือกที่ดีสำหรับแอปพลิเคชันเรียลไทม์
การตัดสินใจ
หลังจากพิจารณาข้อดีข้อเสียของทั้งสองทางเลือก เราตัดสินใจใช้ gRPC สำหรับ API ของเรา แม้ JSON ผ่าน HTTP จะเป็นทางเลือกที่ง่ายกว่า เราเชื่อว่า gRPC จะให้วิธีแก้ปัญหาที่มีประสิทธิภาพและปรับขนาดได้มากกว่าสำหรับบริการของเรา เรายังคาดว่า API ของเราจะจัดการข้อมูลจำนวนมาก และการทำให้เป็นอนุกรมแบบไบนารีของ gRPC จะมีประสิทธิภาพมากกว่าสำหรับกรณีใช้งานนี้
นอกจากนี้ เราเชื่อว่าการรองรับการสตรีมสองทิศทางของ gRPC จะเป็นประโยชน์สำหรับแอปพลิเคชันเรียลไทม์ที่เราอาจพัฒนาในอนาคต
ผลที่ตามมา
เมื่อเลือก gRPC เราจะต้องใช้ชุดเครื่องมือและไลบรารีที่แตกต่างในการสร้าง API เมื่อเทียบกับการใช้ JSON ผ่าน HTTP ซึ่งอาจต้องใช้เวลาและความพยายามเพิ่มเติมในการเรียนรู้และนำเทคโนโลยีเหล่านี้ไปใช้ นอกจากนี้ ไคลเอนต์ที่ต้องการใช้ API ของเราจะต้องใช้ไลบรารีที่เข้ากันได้กับ gRPC ซึ่งอาจไม่ได้รับการสนับสนุนอย่างกว้างขวางเท่าไลบรารี JSON ผ่าน HTTP
อย่างไรก็ตาม เราเชื่อว่าประโยชน์ของการใช้ gRPC มีมากกว่าข้อเสียที่อาจเกิดขึ้นเหล่านี้ และเรามั่นใจว่าการตัดสินใจนี้จะนำไปสู่ API ที่มีประสิทธิภาพและปรับขนาดได้มากกว่า