คำถามที่น่าสนใจมาก ๆ ที่ถูกถามเป็นประจำคือ
ทำไมต้องมี API Gateway ด้วย ? ไม่ใช้ได้ไหม ?
พอดีซื้อมาแล้ว ก็ต้องใช้ ?
คนออกแบบกำหนดว่าต้องให้มี ?

แต่ก็มักตอบกลับด้วยคำถามคือ ใช้ API Gateway ไปทำไม ?
ทำไมต้องใช้ ?
ไม่ใช้ได้ไหม ?
การใช้หรือไม่ใช้ มีข้อดีและข้อเสียอะไรบ้าง ?

ยิ่งพูดถึงบริบทของ Microservices ก็ยิ่งมีการพูดถึงหรือใช้งาน API Gateway มาก

แต่ก่อนอื่นเรามาดูก่อนว่า ถ้าไม่มีการใช้งาน API Gateway จะเป็นอย่างไร
ไปเจอรูปจากบทความ Why do microservices need an API Gateway?
อธิบายด้วยรูปนี้

คำอธิบาย

ในแต่ละ service จะมีการทำงานต่าง ๆ มากมาย ทั้ง function การทำงานหลัก ทั้ง function การทำงานอื่น ๆ ที่ไม่ใช่ส่วนหลัก แต่เป็นส่วนเสริม เช่น

  • Authentication และ Authrorization
  • การจัดการ CORS (Cross-Origin Resource Sharing)
  • การจัดการเรื่อง Traffic และ Rate limit
  • การ Monitoring ระบบงาน
  • การจัดการ Logging
  • การจัดการ Request termination
  • การจัดการเรื่องของ caching data

ทำให้แต่ละ service หรือ ระบบงาน มีการทำงานเยอะจนเกินไป
หรือมีการทำงานที่ผูกมัดจนเกินไป (Tight coupling)
เกิดงานที่ทำซ้ำ ๆ จนน่าเบื่อ
การที่จะเปลี่ยนแปลง อาจต้องเปลี่ยนแปลงในหลาย ๆ ที่

ดังนั้นจะดีกว่าไหม ถ้ามีส่วนการจัดการสิ่งต่าง ๆ เหล่านี้

นั่นคือ การสร้างอีกส่วนงานหรือ layer ขึ้นมา
ซึ่งจะเรียกว่า API Gateway หรือบางคนเรียกว่า Backen for Frontend (BFF)
ทำให้ระบบงานหลักกับส่วนงานซ้ำ ๆ ออกจากกัน
ทำให้ไม่ผูกมัดกันมากนัก (Loose Coupling)
ที่สำคัญทำให้ แต่ละส่วนงานทำหน้าที่ของมันไป (Single Responsibility)
แสดงดังรูป

แต่เมื่อแยกออกมาแล้ว ไม่ใช่จะมีเพียงข้อดี แต่ก็ยังมีข้อเสียที่ต้องเข้าใจ

เพื่อที่จะได้หาวิธีแก้ไขและป้องกัน
ทั้งเรื่องของการเปลี่ยนแปลง
ทั้งเรื่องของการ configuration
ทั้งเรื่องปัญหาคอขวด
ทั้งเรื่องของปัญหา Single Point of Failure ที่อาจจะเกิดขึ้น
ทั้งเรื่องของการ scale เพื่อรองรับการใช้งานที่มากขึ้น
รวมทั้งการมีจำนวน hop/layer เพิ่มเข้ามา  อาจจะส่งผลต่อ rsponse time ที่สูงขึ้น

อีกอย่าง เราชอบทำการร้อยเรียง service ต่าง ๆ ใน API Gateway

หรืออาจจะเรียกว่า API Management เลยก็ได้
ทำให้ business logic เกิดขึ้นในนี้
ถามว่า ทำได้ไหมก็ตอบว่าได้
แต่ถ้าถามว่า มันถูกใช้ไหม ?
ตรงนี้อาจจะตอบได้ยาก
เพราะว่า มันใช่หน้าที่ของมันหรือไม่ 
ดังนั้นจำเป็นต้องกำหนดหน้าที่รับผิดชอบให้ชัดเจนก่อนเสมอ
มิเช่นนั้นก็อาจจะเกิดความซับซ้อนมากมายขึ้นมาอีก
ส่งผลให้เมื่อมีการเปลี่ยนแปลง จะส่งผลกระทบที่สูงมาก ๆ

การใช้งาน API Gateway นั้นมักจะใช้ใน traffic ที่เรียกว่า North-South traffic

ซึ่งเป็นการติดต่อสื่อสารระหว่างระบบภายในและภายนอก
หรือการติดต่อจาก public zone มายัง private zone
ซึ่งจะผ่านตัว API Gateway ก่อนเสมอ
เปรียบได้กับ ตม. เข้าประเทศนั่นเอง

สุดท้ายลองตอบคำถามให้ได้ก่อนว่า

ทำไมคุณถึงใช้งาน API Gateway มิใช่เพียงบอกว่า
เราหรือเขาบอกว่าต้องใช้งาน
มิเช่นนั้น ของที่มีประโยชน์อาจจะกลายเป็นโทษก็ได้