API Gateway คือ?
API Gateway คือ ประตูหน้าบ้านหรือตัวกลาง (Reverse Proxy) ที่คอยรับคำขอ (Request) ทั้งหมดจากฝั่งผู้ใช้งาน (เช่น Mobile App, Web App) แล้วทำหน้าที่จัดเส้นทาง ส่งคำขอนั้นไปยังบริการหลังบ้าน (Backend Services หรือ Microservices) ที่ถูกต้อง
หน้าที่หลักของ API Gateway
- Routing การจัดเส้นทางรับคำขอ Request จากแอป แล้วกระจายงานไปให้ Microservices ตัวที่ถูกต้อง เช่น ถ้าแอปขอข้อมูลสินค้า ส่งไปที่ Product Service ถ้าขอจ่ายเงิน ส่งไปที่ Payment Service
- Authentication & Authorization การยืนยันตัวตน ตรวจสอบว่าผู้ใช้งานคนนี้ล็อกอินถูกต้องไหม มีสิทธิ์เข้าถึงข้อมูลส่วนนี้หรือไม่ ก่อนจะปล่อยให้คำขอผ่านเข้าไปถึงระบบหลังบ้าน
- Load Balancing การกระจายโหลด ช่วยกระจายคำขอไปยังเซิร์ฟเวอร์หลังบ้านหลายๆ ตัวอย่างเท่าเทียม เพื่อไม่ให้เครื่องใดเครื่องหนึ่งทำงานหนักเกินไป
- Rate Limiting การจำกัดปริมาณ จำกัดจำนวนครั้งที่แอปจะเรียกใช้งาน API ได้ใน 1 นาที เพื่อป้องกันไม่ให้ระบบล่มจากการโดนยิงถล่ม (DDoS Attack)
- Protocol Translation การแปลงโปรโตคอล แปลงรูปแบบการคุยกัน เช่น หน้าแอปคุยด้วย HTTP/REST แต่ระบบหลังบ้านคุยกันด้วย gRPC หรือ WebSockets
5 ขั้นตอนหลักในกระบวนการของ API Gateway
1. Request Entry (รับคำขอ): ไคลเอนต์ (เช่น โมบายแอป หรือเว็บเบราว์เซอร์) ส่งคำขอ HTTP/HTTPS มาที่จุดเข้าใช้งานหลักจุดเดียว (Single Entry Point)
2. Security & Authentication (ตรวจสอบสิทธิ์): Gateway จะตรวจเช็กว่าคำขอนั้นปลอดภัยหรือไม่ โดยตรวจสอบ API Key, JWT Token หรือระบบ OAuth หากไม่ผ่านจะถูกปฏิเสธกลับไปทันที (401 Unauthorized)
3. Traffic Control (ควบคุมการจราจร): ตรวจสอบโควตาการใช้งานผ่านระบบ Rate Limiting เพื่อดูว่าไคลเอนต์นั้นๆ ส่งคำขอถี่เกินกว่าที่กำหนดไว้หรือไม่ เพื่อป้องกันการเกิด DDoS โจมตีระบบ
4. Routing & Protocol Transformation (เลือกเส้นทางและแปลงข้อมูล): Gateway จะจับคู่ URL ลิงก์ที่เรียกเข้ามา (เช่น /users หรือ /orders) เพื่อส่งต่อไปยังไมโครเซอร์วิสที่ถูกต้อง ด้านในนี้อาจมีการแปลงโปรโตคอล (เช่น จาก HTTP REST JSON ด้านนอก ไปเป็น gRPC หรือ SOAP ด้านใน) รวมไปถึงการทำ Load Balancing เพื่อกระจายงานให้เซิร์ฟเวอร์ที่ว่างอยู่
5. Response Transformation & Logging (ส่งกลับและบันทึกข้อมูล): เมื่อบริการแบ็กเอนด์ประมวลผลเสร็จและส่งข้อมูลกลับมา Gateway สามารถกรองข้อมูล ถอดรหัส หรือย่อขนาดไฟล์ (Compression) ก่อนส่งคืนให้ไคลเอนต์ พร้อมทำการ Logging และเก็บสถิติเพื่อนำไปวิเคราะห์การใช้งานระบบ
ข้อดีของการใช้งาน
- ลดความซับซ้อนแอปพลิเคชันภายนอกไม่ต้องจำที่อยู่หรือจัดการกับการเชื่อมต่อกับเซอร์วิสย่อยหลายๆ ตัวโดยตรง
- ความปลอดภัย: ช่วยซ่อนโครงสร้างภายในระบบและกรองคำขอที่ไม่ปลอดภัยออกได้
- การจัดการ ควบคุมนโยบายความปลอดภัยและการเก็บบันทึกข้อมูล (Logging) ไว้ที่จุดเดียว
เครื่องมือสำหรับจัดการ API Gateway
สามารถแบ่งออกเป็น 3 กลุ่มหลักตามลักษณะการใช้งานและโครงสร้างพื้นฐานของระบบ ดังนี้ครับ
- Cloud-Native & Managed Services เน้นใช้งานง่ายบนคลาวด์เหมาะสำหรับระบบที่โฮสต์อยู่บน Cloud Provider อยู่แล้ว ไม่ต้องดูแลเซิร์ฟเวอร์เอง ซึ่งมีผู้ให้บริการปัจจุบัน ดังนี้
- Amazon API Gateway: รองรับการทำงานร่วมกับบริการอื่นของ AWS ได้ดีเยี่ยม เช่น AWS Lambda (Serverless)
- Google Cloud API Gateway: ออกแบบมาสำหรับจัดการ API บน Google Cloud Platform (GCP)
- Azure API Management: เครื่องมือของ Microsoft มีฟีเจอร์สำหรับทำ API Developer Portal ในตัว
- Open-Source & Self-Hosted เน้นยืดหยุ่น ปรับแต่งได้ตามใจ เหมาะสำหรับองค์กรที่ต้องการควบคุมสถาปัตยกรรมเอง หรือใช้งานใน On-Premise Data Center
- Kong API Gateway: สร้างบน Nginx ได้รับความนิยมสูงมากเพราะประมวลผลเร็วและมี Plugin ให้เลือกใช้หลากหลาย
- Tyk: มีประสิทธิภาพสูง เขียนด้วยภาษา Go มาพร้อมแดชบอร์ดที่ใช้งานง่าย
- KrakenD: เน้นความเร็วระดับ Ultra-performance กินทรัพยากรน้อยมากเนื่องจากไม่มีสถานะ (Stateless)
- APISIX: โครงการภายใต้ Apache Foundation รองรับการขยายตัว (Scalability) ได้ดีมาก
- Kubernetes-Native สำหรับระบบที่รันบน Container เหมาะสำหรับโปรเจกต์ที่จัดการระบบด้วย
- Kubernetes (K8s) เป็นหลัก Emissary-ingress (Ambassador): สร้างขึ้นเพื่อทำงานร่วมกับ Kubernetes โดยตรง
- Trafik: ตัวจัดการ Proxy และ Gateway ที่ตรวจจับการเปลี่ยนแปลงของ Container ได้อัตโนมัติ
วิธีการพัฒนา API Gateway
สามารถทำได้ 2 แนวทางหลัก คือ 1). การใช้เครื่องมือสำเร็จรูป (Configuration-Based) และ 2). การเขียนโค้ดขึ้นมาเอง (Code-Based) ขึ้นอยู่กับความซับซ้อนของระบบแนวทางที่ 1: การใช้เครื่องมือสำเร็จรูป (แนะนำสำหรับระบบทั่วไป)
แนวทางนี้เน้นการติดตั้งเครื่องมือระดับโลก (เช่น Kong, Apache APISIX) แล้วปรับแต่งผ่านไฟล์คอนฟิก (YAML/JSON) หรือหน้าจอ UIขั้นตอนการพัฒนา:
- ออกแบบระบบและเส้นทาง (Routing Map): กำหนดว่า URL ไหน (เช่น
/api/v1/users) จะถูกส่งต่อไปยังบริการหลังบ้านตัวใด (เช่นuser-service:8080) - ติดตั้งเครื่องมือ (Installation): รัน Gateway ผ่าน Docker หรือติดตั้งลงบนคลาวด์
- ตั้งค่าระบบความปลอดภัย (Security & Auth): เปิดใช้งานปลั๊กอินตรวจสอบสิทธิ์ เช่น JWT Authentication หรือ OAuth 2.0
- เปิดใช้การควบคุมระบบ (Traffic Control): ตั้งค่า Rate Limiting เพื่อจำกัดจำนวนการเรียกใช้งานต่อนาที ป้องกันระบบล่ม
- ทำระบบติดตาม (Monitoring): เชื่อมต่อข้อมูล Log ไปยัง Prometheus หรือ Grafana เพื่อดูสถานะระบบ
แนวทางที่ 2: การเขียนโค้ดพัฒนาเอง (เน้นปรับแต่งเฉพาะทาง)
หากระบบมีเงื่อนไขทางธุรกิจที่ซับซ้อนมาก และต้องการควบคุมการทำงานทุกขั้นตอน สามารถเขียนขึ้นเองได้โดยใช้ Framework ยอดนิยม ดังนี้:
ภาษาและ Framework ที่นิยมใช้:
- Node.js: ใช้ Express หรือ Fastify ร่วมกับไลบรารี
http-proxy-middleware(เด่นเรื่องพัฒนาไว รองรับ I/O สูง) - Go (Golang): ใช้ Gin หรือ Fiber (เด่นเรื่องความเร็ว ประมวลผลเร็วมาก กินแรมต่ำ)
- Java: ใช้ Spring Cloud Gateway (เหมาะกับองค์กรขนาดใหญ่และระบบที่ใช้ Java/Spring Boot)
โครงสร้างโค้ดตัวอย่าง (Node.js/Express):
javascript
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();
// 1. ตรวจสอบสิทธิ์ (Authentication Middleware)
const authMiddleware = (req, res, next) => {
const token = req.headers['authorization'];
if (!token) return res.status(401).json({ message: 'Unauthorized' });
next();
};
// 2. กำหนดเส้นทางและส่งต่อคำขอ (Routing & Proxy)
app.use('/api/users', authMiddleware, createProxyMiddleware({
target: 'http://webservice:3001',
changeOrigin: true
}));
app.use('/api/orders', authMiddleware, createProxyMiddleware({
target: 'http://webservice:3002',
changeOrigin: true
}));
app.listen(8080, () => console.log('API Gateway running on port 8080'));สถาปัตยกรรมของ API Gateway
สถาปัตยกรรมของ API Gateway เปรียบเสมือน "หอควบคุมการจราจร" ของระบบ Microservices โดยสถาปัตยกรรมภายในจะแบ่งออกเป็น Layer การทำงานที่ชัดเจน เพื่อให้สามารถรับ Request ปริมาณมหาศาลและกระจายงานได้อย่างมีประสิทธิภาพ
โครงสร้างสถาปัตยกรรมภายใน (Inside the API Gateway)การทำงานภายในของ API Gateway มักจะถูกแบ่งออกเป็น 3 Layer หลักๆ ดังนี้ 1). Inbound Layer 2). Processing Layer / Pipeline Engine และ 3). Outbound Layer มีรายละเอียดแต่ละ Layer ดังนี้
- Inbound Layer (ขารับคำขอ)ทำหน้าที่รับ Request จากภายนอกเข้ามายัง Gateway
- Protocol Translation: แปลงโปรโตคอลจากภายนอก (เช่น HTTP/REST, WebSockets, GraphQL) ให้เป็นโปรโตคอลที่ระบบหลังบ้านคุยกัน (เช่น gRPC, AMQP หรือ REST)
- SSL/TLS Termination: ถอดรหัส SSL ที่ชั้นนี้ เพื่อไม่ให้เป็นภาระของ Microservices ด้านหลัง
- Processing Layer / Pipeline Engine (ขบวนการตรวจสอบ)ชั้นนี้เป็นหัวใจสำคัญที่นำ เครื่องมือสำเร็จรูป มาผสมผสานกับ การเขียนโค้ดเอง โดยจะรันทำงานเป็นทอดๆ (Middleware Pipeline)
- Security & Auth: ตรวจสอบสิทธิ์ (JWT / OAuth2 / API Key)
- Traffic Control: ตรวจสอบโควตาผ่าน Rate Limiting และ Throttling
- Custom Customization (BFF/Lua Plugin): หากเราเขียนโค้ดเพิ่มเอง โค้ดจะรันที่จุดนี้เพื่อปรับแต่ง Request หรือเย็บรวมข้อมูล (Data Aggregation) ก่อนส่งต่อ
- Outbound Layer (ขาส่งต่อคำขอ)ทำหน้าที่หาตัวตนและส่งคำขอไปยังเซิร์ฟเวอร์หลังบ้านอย่างถูกต้องแม่นยำ
- Service Discovery Integration: ทำงานร่วมกับระบบอย่าง Consul หรือ Kubernetes DNS เพื่อหาว่าไมโครเซอร์วิสตัวที่ต้องการรันอยู่ที่ IP ไหน
- Load Balancing: กระจายคำขอไปยังไมโครเซอร์วิสหลายๆ เครื่องแบบ Round Robin หรือ Least Connections
- Circuit Breaker: ถ้าระบบหลังบ้านตัวไหนเสีย Gateway จะตัดการเชื่อมต่อทันที (Fail-fast) เพื่อไม่ให้ระบบทั้งหมดค้างช้าตามไปด้วย
สถาปัตยกรรมระบบ (Deployment Topologies)
สถาปัตยกรรมระบบ (Deployment Topologies)ในการนำไปใช้งานจริง (Deployment) สถาปัตยกรรมของ API Gateway ยอดนิยมจะมี 3 รูปแบบ
- Centralized API Gateway มี Gateway ตัวใหญ่ตัวเดียวรับทุกแอปพลิเคชัน ทุกหน้าบ้าน (Web, Mobile, Third-party)
- Backends for Frontends - BFF แยก Gateway ออกเป็นหลายตัวตามลักษณะผู้ใช้งาน เช่น Mobile Gateway, Web Gateway, Public API Gateway
- Microgateway / Service Mesh นิยมใช้บน Kubernetes โดยจะมี Gateway ขนาดเล็กจิ๋วรันควบคู่ไปกับไมโครเซอร์วิสทุกๆ ตัว (Sidecar Pattern)
สรุป
API Gateway เป็นประตูทางเข้าเดียว ที่ทำหน้าที่รับคำขอ (Request) จากผู้ใช้แล้วส่งต่อไปยังบริการย่อยหลังบ้าน (Microservices)มีหน้าที่หลัก 4 อย่าง คือ การกำหนดเส้นทาง (Routing), ตรวจสอบสิทธิ์ (Auth), จำกัดปริมาณใช้งาน (Rate Limit) และกระจายโหลด (Load Balance)เลือกพัฒนาได้ 2 แบบ ทั้งแบบใช้เครื่องมือสำเร็จรูป (เช่น Kong, Istio) หรือเขียนโค้ดขึ้นเอง (เช่น Node.js, Go) เพื่อจัดการเงื่อนไขซับซ้อนปรับสถาปัตยกรรมได้หลากหลาย ตั้งแต่ศูนย์กลางระบบ (Centralized), แยกตามหน้าบ้าน (BFF), ไปจนถึงกระจายตัวประกบทุกแอป (Microgateway / Service Mesh)ตอบโจทย์ระบบจัดการฟาร์ม ช่วยแปลงข้อมูลจากเซนเซอร์ IoT ปริมาณมาก, เข้ารหัสความปลอดภัย และมีระบบตัดไฟ (Circuit Breaker) ป้องกันแอปค้างตอนเน็ตดับ
ความคิดเห็น
แสดงความคิดเห็น