สวัสดีครับวันนี้ผมอยากพาทุกท่านมาทำความรู้จักกับ API Gateway ค่ายหนึ่ง ที่ทำให้เราสามารถจัดการกับ Application Program Interface หรือ เรียกสั้น ๆ กันว่า API โดยเฉพาะ ถ้าหากในอนาคตเรามีการ Design ระบบเป็นรูปแบบ Microservices จะทำให้เราต้องคอยมานั่งจัดการเรื่อง จำนวน API ของ Services ต่าง ๆ มากมาย วันนี้ผมเลยจะขอแนะนำ Kong API Gateway เจ้าลิงร่างยักษ์ที่ไต่ชาร์ตดังอย่าง Gartner มาอย่างต่อเนื่องในช่วงเวลาไม่กี่ปีที่ผ่านมา นั่นเป็นเพราะ Kong มีจุดเด่นในเรื่องการใช้ Spec ที่ต่ำ แต่ใช้งานได้เร็วแรง รวมทั้งยังมี Feature ที่ครบถ้วนตอบโจทย์ผู้ใช้งานสุด ๆ เรียกได้ว่าเป็น Tools ที่มีความมินิมอล แต่ประสิทธิภาพไม่ธรรมดาเลย แค่นี้ก็ทำให้ตกหลุมรักได้ไม่ยาก
Kong เป็น API Gateway และ API Management Tools เรียกว่าเป็น Full-Lifecycle Service Management เลยทีเดียว โดยทำหน้าที่เป็นตัวกลางในการสื่อสารระหว่าง Server ต้นทาง และ API-Application ปลายทาง ซึ่งเราสามารถใส่ Plugins ต่าง ๆ เพื่อเพิ่มความสามารถให้แก่ Kong ได้ และด้วยความที่เป็น Tools แบบ Open-Source ทำให้มี Community ที่มาช่วยเขียน Plugins ต่าง ๆ มากมาย ให้เราเลือกมาใช้งานกันได้ โดยไม่ต้องเขียนเองเลยครับ
แล้ว Kong ทำงานอย่างไร
ถ้าเราเจาะลึกลงไปจะพบว่า Kong มีการแยกระดับการทำงานในการ Forward Request ไปให้กับปลายและส่วนที่เปรียบเสมือนสมองเก็บ Configuration ต่าง ๆ ไว้ โดยมี 2 องค์ประกอบในการ Set-up ให้สามารถใช้งานได้นั่นก็คือ
- Kong Server เป็น Http Server ที่สร้างต่อยอดจาก Nginx ทำหน้าที่ในการจัดการ Reverse Proxy ไปยัง Service ต่าง ๆ ที่เรา Config ไว้ หรือก็ตัวที่คอยส่ง Request ไปยัง API-Application ของเรานั่นแหละครับ
- Kong Datastore ทำหน้าที่ในการจัดเก็บ Kong Configuration ด้วย Third-Party เช่น PostgreSQL หรือแบบ DB-less ด้วย JSON หรือ YAML Files
โดยมีตัวช่วยอย่าง Kong Admin API ทำหน้าที่ในการจัดการต่าง ๆ เช่น Service, Route, Plugins และการ Configuration ทั้งหมด แล้วส่งไปไว้ที่ Datastore อีกทีนึงครับ
Plugins
หนึ่งในองค์ประกอบหลักของ Kong คือระบบ Plugins ซึ่งเป็นส่วนเพิ่มฟังค์ชั่นให้กับ API ให้มีความสามารถที่มากขึ้น โดย Plugins เหล่านี้อาจถูกพัฒนามาจาก Kong Inc. หรือ Community ก็ได้ เช่น
- Authentication ไว้กำหนดสิทธิการเข้าถึง Backend Server หากใครจะเข้าใช้งาน Application ต้องได้รับอนุญาต รวมถึงมี Key และ Token ที่ถูกต้อง โดยสามารถกำหนดตามความต้องการได้ เช่น Service-A ต้องผ่าน Basic AUTH, Service-B รองรับ JWT เท่านั้น ตัวอย่าง Plugins authentication ที่มี เช่น Basic Auth, apikey, JWT และ OAuth
- Traffic control มีหน้าที่จัดการ In-Bound, Out-Bound ของ API Traffic
- Analytics สำหรับตรวจสอบ Traffic การเข้าใช้งาน, Inspect, Monitor และ Visualize
- Transformation เพิ่ม หรือ แก้ไข ส่วนของ Request/Response ก่อนจะไปถึง Service หรือหลังออก Service
- Logging ปลั๊กอินที่สำคัญอีกตัวไว้ทำหน้าที่ส่ง Logs ไปยัง Third-Party ต่าง ๆ
เนื่องจากผมทำ Dev Backend มาก่อนก็จะเห็นภาพในส่วนนี้ชัดเจน ที่ในแต่ละโปรเจคจะมีโค้ดหลายร้อยบรรทัดที่ Dev เขียนมาเพื่อจัดการ Authentication, Traffic และ Logs ซึ่งแน่นอนว่าบริษัทนึงก็ไม่ได้มีเพียง Application เดียว จะมีการอัพเดทที ก็อาจจะต้องไปทำการแก้ในหลายจุด ซึ่ง Kong จะช่วยเข้ามาแก้ปัญหาเหล่านี้ และ Dev ก็จะได้ไปโฟกัสในการเขียน Logic ได้อย่างเต็มที่