การจัดการ API
gRPC และ REST: ทำความเข้าใจ gRPC, OpenAPI, REST และช่วงเวลาที่ควรใช้ในการออกแบบ API
- โมเดลการออกแบบ API: โดยหลักแล้วการออกแบบ API ใช้สองโมเดลคือ RPC และ REST API สมัยใหม่ส่วนใหญ่ถูกพัฒนาบนพื้นฐานของโปรโตคอล HTTP
- gRPC: เทคโนโลยีสำหรับสร้าง RPC API ที่ใช้ HTTP 2.0 เป็นโปรโตคอลขนส่ง Google และบริษัทอื่น ๆ ใช้ API จำนวนมากที่ผสานแนวคิดของ RPC และ HTTP เข้าด้วยกัน
- สามวิธีหลักในการใช้งาน HTTP:
- REST: ไคลเอนต์ใช้ URL ที่เซิร์ฟเวอร์ให้มาได้โดยตรง และไม่จำเป็นต้องเข้าใจรูปแบบของ URL
- gRPC: ใช้ HTTP/2 แต่รายละเอียดของ HTTP จะไม่ถูกเปิดเผยต่อผู้ออกแบบ API
- OpenAPI: ไคลเอนต์เรียกใช้ API โดยใช้เทมเพลตเส้นทาง URL
REST
- ลักษณะเด่น: ไคลเอนต์ไม่จำเป็นต้องเข้าใจรูปแบบของ URL และ URL ไม่ใช่ส่วนหนึ่งของข้อกำหนด API
- ข้อดี: มีข้อดีแบบเดียวกับเว็บ เช่น ความเสถียร ความสม่ำเสมอ และความเป็นสากล โมเดลที่ยึดตามเอนทิตีนั้นเรียบง่ายและเข้าใจได้ง่ายกว่า
gRPC
- ลักษณะเด่น: ใช้ HTTP/2 แต่ซ่อนรายละเอียดของ HTTP เอาไว้ ไคลเอนต์ใช้งาน API โดยการเรียกโพรซีเยอร์และส่งพารามิเตอร์
- ข้อดี: สร้างไลบรารีสำหรับการเขียนโปรแกรมฝั่งไคลเอนต์ได้ง่าย และมีประสิทธิภาพดี
OpenAPI
- ลักษณะเด่น: เรียกใช้ API ผ่านเทมเพลตเส้นทาง URL และไคลเอนต์ต้องเข้าใจรูปแบบของ URL
- ข้อดี: เข้าถึง API ได้ด้วยเทคโนโลยี HTTP มาตรฐานเพียงอย่างเดียว และสามารถสร้างไลบรารีสำหรับการเขียนโปรแกรมฝั่งไคลเอนต์ได้
การเปรียบเทียบ gRPC กับ OpenAPI
- ความเหมือน: ทั้งคู่สามารถใช้เป็นภาษาอธิบายอินเทอร์เฟซแบบ RPC (IDL) ได้
- ความต่าง: gRPC ซ่อนรายละเอียดของ HTTP ขณะที่ OpenAPI เปิดเผยรายละเอียดของ HTTP
ข้อดีของ REST
- โมเดลที่ยึดตามเอนทิตี: เรียบง่าย เข้าใจง่าย และมีความเสถียรแม้เวลาจะผ่านไป
วิธีใช้งาน OpenAPI
- การกำหนดเส้นทาง: นิยาม API โดยใช้เส้นทางและเมธอด HTTP
ข้อดีและข้อเสียของ OpenAPI
- ข้อดี: คล้ายกับโมเดล RPC จึงคุ้นเคยสำหรับโปรแกรมเมอร์ และสามารถแมปกับคำขอ HTTP ได้
- ข้อเสีย: ต้องใช้ความพยายามมากในการออกแบบรายละเอียดของ HTTP
ข้อดีของ gRPC
- การพัฒนาที่เรียบง่าย: การพัฒนาฝั่งเซิร์ฟเวอร์ทำได้ง่าย และสามารถสร้างไลบรารีฝั่งไคลเอนต์ได้อย่างสะดวก
- ประสิทธิภาพ: มีประสิทธิภาพสูงเพราะใช้ payload แบบไบนารี
ข้อเสียของ gRPC
- ต้องใช้ซอฟต์แวร์เฉพาะ: ทั้งไคลเอนต์และเซิร์ฟเวอร์ต้องใช้ซอฟต์แวร์เฉพาะ
- ความสามารถของพร็อกซีมีข้อจำกัด: ต่างจาก HTTP API ที่สามารถขยายหรือแก้ไขความสามารถผ่านพร็อกซีได้ง่ายกว่า
บทสรุป
- การเลือกแนวทางออกแบบ API: ควรเลือกโดยพิจารณาข้อดีและข้อเสียของ REST, OpenAPI และ gRPC แต่ละแบบ
- สิ่งที่ควรพิจารณาเมื่อใช้ gRPC: เหมาะในกรณีที่ไคลเอนต์ไม่จำเป็นต้องรองรับเทคโนโลยี gRPC หรือเป็น API ภายในองค์กร
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
รู้สึกเสียดายที่ไปเรียนรู้ gRPC เพราะเสียเวลาไปมากกับการดีบักและการปรับแต่งการตั้งค่า
สร้าง API มายาวนาน และเคยใช้ทั้ง gRPC และ HTTP/REST
มีประสบการณ์ทำงานที่ FAANG และคิดว่า gRPC มีประโยชน์สำหรับการทำ routing ของบริการภายใน
คิดว่า gRPC เป็นการเสียเวลา เว้นแต่จะใช้การสตรีมแบบสองทิศทาง
ในโปรเจกต์ที่ใช้ gRPC เคยนำมาใช้ด้วยเหตุผลด้านประสิทธิภาพ แต่สุดท้ายเปลี่ยนไปใช้ JSON API
กำลังแก้ปัญหาของ gRPC ด้วยการใช้ connectrpc
คิดว่าประสบการณ์การพัฒนาด้วย gRPC แย่กว่า REST
Roy Fielding เคยกล่าวว่า REST API ต้องรู้เพียง URI เริ่มต้นและ media type ที่เป็นมาตรฐาน
ไม่ชอบใช้ gRPC ภายในดาต้าเซ็นเตอร์
รู้สึกว่า gRPC เข้าถึงได้ยากนอกโลกของ Google