ในโลกของการสร้างระบบแบบ API-centric
หรือแยก service ต่าง ๆ ออกมาในรูปแบบของ Microservice นั้น
สิ่งที่มักจะถูกพูดถึงก็คือ API Gateway
ดังนั้นเรามาดูกันว่า
- API Gateway มันคืออะไร ?
- API Gateway มีข้อดีและข้อเสียอย่างไรบ้าง ?
API Gateway คืออะไร ?
เป็นจุดศูนย์รวมของการเข้าถึง API ต่าง ๆ ในระบบ ทั้งการเข้าถึงแบบ 1:1 และ 1:N ทำให้การเข้าถึง API ง่ายขึ้น ทำให้สามารถกำหนดรูปแบบการใช้งานได้ง่ายขึ้น ตัวอย่างเช่น limit การใช้งาน เป็นต้น ทำให้สามารถกำหนดเรื่อง authentication และ authorization ได้ง่ายขึ้น ทำให้สามารถวิเคราะห์การใช้งานได้ง่ายขึ้นโดยรวมแล้วเป็นอีกหนึ่ง layer ที่เพิ่มขึ้นมาเพื่อจัดการ API ที่มีจำนวนมากมายนั่นเองลองคิดดูสิว่า ถ้าระบบที่มีสถาปัตยกรรมแบบ Microservice จริง ๆ จะมีจำนวน service มากมายเพียงใด ตั้งแต่หลัก 10 ไปจนถึงหรือพัน หลักหมื่น แน่นอนว่า การเข้าถึงแต่ละ service มันน่าจะยากนะ นั่งจำ endpoint ของ service กันเยอะเลย !! ดังนั้น API Gateway น่าจะเป็นอีกหนึ่งตัวช่วยที่น่าสนใจ แต่ถ้าออกแบบไม่ดีก็บรรลัยได้ง่าย ๆ เช่นกัน !! แสดงโครงสร้างดังรูป
มาดูข้อดีของ API Gateway กันบ้าง ?
1. แยกส่วนการใช้งาน API จากผู้ใช้งาน ผู้ใช้งานจะเห็นเพียง API จาก gateway เท่านั้น ว่าต้องส่ง request ไปที่ไหน ? มี input อย่างไร ? ได้ output อย่างไร ? โดยไม่รู้เลยว่าข้างในทำงานอย่างไร วิธีการนี้จะส่งผลดีต่อการแก้ไขปรับปรุง API ที่อยู่ด้านในระบบ โดยไม่กระทบต่อผู้ใช้งานโดยตรง รวมทั้งซ่อนการจัดการเรื่อง versioning และ service discovery ไว้อีกด้วย 2. ใช้สำหรับป้องกันการโจมตีจากผู้บุกรุก ทั้ง SQL Injection, XML exploit และ Denial-of-Service (DoS) เนื่องจากเป็น layer ที่ผู้ใช้งานจากภายนอกจะเข้าถึง API ได้ 3. ทำให้ service ภายในใช้งาน protocol ที่หลากหลายได้ ผู้ใช้งานสามารถใช้งานผ่าน HTTP/REST ได้ปกติ แต่ service ภายในสามารถใช้ protocol ที่หลายหลาย ในการติดต่อสื่อสารกันได้ เนื่องจากแต่ละ protocol ก็มีข้อดีและข้อเสียแตกต่างกันไป รวมทั้งทำให้ง่ายต่อการ integrate เข้ากับ Legacy system อีกด้วย เช่น ProtoBuf, SOAP, RPC, WebService เป็นต้น 4. ช่วยลดความซับซ้อนของ service ต่าง ๆ ลงไป ความสามารถพื้นฐานต่าง ๆ ของแต่ละ service นั้น เราสามารถนำมา implement ไว้น API Gateway ได้เลย ทำให้ผู้พัฒนาสนใจเฉพาะ service นั้น ๆ ไปเลย ไม่จำเป็นต้องไป implement ไว้ในแต่ละ service เนื่องจากเป็นการเพิ่มความซับซ้อนเข้าไปโดยใช่เหตุ เช่น- การ authentication
- การ authrorization
- กำหนด usage limit