יישום תבנית API Gateway עבור מיקרוסרוויסים
תארו לעצמכם: יש לכם 15 מיקרוסרוויסים, לכל אחד מהם API משלו. הפרונטאנד מבצע עשרות בקשות לנקודות קצה שונות, והאימות משוכפל בכל שירות. רפקטורינג אחד רע — והלקוחות מקבלים שגיאות 500. API Gateway פותר את הכאב הזה: נקודת כניסה אחת עם ניתוב מרכזי, אימות והגבלת קצב. במקום לקרוא למספר שירותים ישירות, הלקוח מדבר עם שער אחד שמנתב בקשות, מאגד נתונים ואוכף מדיניות אבטחה.
תבנית זו מפשטת את האבטחה, מפחיתה עומס על השירותים והופכת את המערכת לסקיילבילית. המהנדסים שלנו עם ניסיון של 7+ שנים במיקרוסרוויסים מיישמים API Gateway במפתח-ביד — מבחירת הכלים ועד להגדרת ניטור. צרו קשר לייעוץ על הפרויקט שלכם.
בעיות טכניות בארכיטקטורת מיקרוסרוויסים
שימו לב: כאשר לקוח מבקש נתונים משירותים שונים, נוצרות קריאות מרובות. לדוגמה, דף פרופיל דורש נתוני משתמש, הזמנות והתראות. ללא שער, הלקוח מבצע 3 בקשות. עם API Gateway — בקשה אחת. השער אוסף נתונים במקביל באמצעות // Gateway aggregates data from multiple services app.get('/api/dashboard/:userId', jwtMiddleware, async (req, res) => { const { userId } = req.params; const [user, orders, notifications] = await Promise.allSettled([ userService.get(`/users/${userId}`), orderService.get(`/orders?customerId=${userId}&limit=5`), notificationService.get(`/notifications/${userId}/unread`) ]); res.json({ user: user.status === 'fulfilled' ? user.value.data : null, recentOrders: orders.status === 'fulfilled' ? orders.value.data : [], unreadCount: notifications.status === 'fulfilled' ? notifications.value.data.count : 0 }); }); ומחזיר תגובה אחת. זה מפחית את זמן ההשהיה ב-40% ומפשט את לוגיקת הלקוח.
בעיה נוספת היא אימות משוכפל. כל מיקרוסרוויס חייב לאמת JWTs, מה שמגביר את זמן ההשהיה ואת סיכון השגיאות. API Gateway בודק את הטוקן פעם אחת ומעביר נתוני משתמש ב-headers. זה מפחית עומס על השירותים ומרכז את האבטחה.
כיצד API Gateway פותר את בעיית הבקשות N+1
אגרגציית בקשות (תבנית BFF בשער)
לקוח מובייל מקבל נתונים ממספר שירותים בבקשה אחת. השער קורא להם במקביל ומרכיב את התגובה ל-JSON אחד. דוגמת יישום על Express:
// Gateway aggregates data from multiple services
app.get('/api/dashboard/:userId', jwtMiddleware, async (req, res) => {
const { userId } = req.params;
const [user, orders, notifications] = await Promise.allSettled([
userService.get(`/users/${userId}`),
orderService.get(`/orders?customerId=${userId}&limit=5`),
notificationService.get(`/notifications/${userId}/unread`)
]);
res.json({
user: user.status === 'fulfilled' ? user.value.data : null,
recentOrders: orders.status === 'fulfilled' ? orders.value.data : [],
unreadCount: notifications.status === 'fulfilled' ? notifications.value.data.count : 0
});
}); אילו מדדים משפר API Gateway?
TTFB יורד בזכות האגרגציה, ומספר בקשות הרשת יורד פי 3-5. Core Web Vitals (LCP, CLS) משתפרים כי הלקוח מקבל את כל הנתונים בתגובה אחת. השער גם מוריד עומס מהמיקרוסרוויסים — הם מעבדים רק בקשות מאומתות.
דוגמה מהשטח: בפרויקט עם 15 מיקרוסרוויסים, הפחתנו את בקשות הפרונטאנד מ-12 ל-2, וקיצצנו את ה-TTFB ב-60%. זמן טעינת הדף של הלקוח ירד מ-8 שניות ל-3.2 שניות.
כיצד אנו מיישמים API Gateway
פונקציות שאנו מגדירים
- ניתוב —
/api/orders→ שירות הזמנות,/api/users→ שירות משתמשים - אימות והרשאות — JWT/OAuth2 נבדק פעם אחת בשער
- הגבלת קצב — הגנה מפני ניצול לרעה
- סיום SSL — TLS מסתיים בשער, מיקרוסרוויסים מתקשרים דרך HTTP בתוך הקלאסטר
- טרנספורמציית בקשה/תגובה — שינויי פורמט, הוספת headers
- אגרגציית בקשות — בקשת לקוח אחת → בקשות שירות מרובות
- Circuit Breaker — הגנה מפני כשלים מדורגים
- לוגים וטרייסינג — נקודה אחת ללוגי גישה
השוואת כלים
| כלי | סוג | תכונות מפתח |
|---|---|---|
| Kong | Self-hosted / ענן | תוספים ב-Lua/Go, Kubernetes Ingress |
| Traefik | Self-hosted | גילוי אוטומטי ב-Docker/K8s |
| AWS API Gateway | מנוהל | אינטגרציית Lambda, IAM |
| NGINX + Lua | Self-hosted | שליטה מקסימלית |
| Envoy | פרוקסי | gRPC, תרחישים מורכבים |
| Express Gateway | Node.js | מקרים פשוטים |
Kong הוא הטוב ביותר לתרחישים מורכבים עם תוספים מותאמים אישית, Traefik מצטיין באינטגרציית Kubernetes. אנו בוחרים את הכלי לפי המחסן הטכנולוגי שלכם. הניסיון שלנו כולל פרויקטים עם Kong (מעל 50 שירותים) ו-Traefik (קלאסטרים של K8s עד 30 צמתים).
הגדרת Kong
Kong הוא השער ה-self-hosted הפופולרי ביותר:
---
# kong.yaml (декларативная конфигурация)
_format_version: "3.0"
services:
- name: order-service
url: http://order-service:3000
routes:
- name: orders-route
paths: ["/api/orders"]
methods: ["GET", "POST", "PUT", "DELETE"]
- name: user-service
url: http://user-service:3001
routes:
- name: users-route
paths: ["/api/users"]
methods: ["GET", "PUT"]
plugins:
- name: jwt
config:
claims_to_verify: ["exp"]
- name: rate-limiting
config:
minute: 100
hour: 5000
policy: local
- name: request-transformer
config:
add:
headers: ["X-Service-Version:1.0"]
אימות ברמת השער
JWT מאומת בשער, מיקרוסרוויסים מקבלים headers משתמש שכבר אומתו:
// Кастомный middleware на Express Gateway
async function jwtMiddleware(req, res, next) {
const token = req.headers.authorization?.replace('Bearer ', '');
if (!token) return res.status(401).json({ error: 'No token' });
try {
const payload = jwt.verify(token, process.env.JWT_SECRET);
// Прокидываем данные пользователя в заголовках
req.headers['X-User-Id'] = payload.sub;
req.headers['X-User-Role'] = payload.role;
req.headers['X-User-Email'] = payload.email;
next();
} catch {
res.status(401).json({ error: 'Invalid token' });
}
} דוגמת הגדרת Traefik ב-Kubernetes
---
# Traefik IngressRoute
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: api-gateway
spec:
entryPoints:
- websecure
routes:
- match: PathPrefix(`/api/orders`)
kind: Rule
services:
- name: order-service
port: 3000
middlewares:
- name: jwt-auth
- name: rate-limit
- match: PathPrefix(`/api/users`)
kind: Rule
services:
- name: user-service
port: 3001
middlewares:
- name: jwt-auth
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: rate-limit
spec:
rateLimit:
average: 100
burst: 50
period: 1m
תהליך היישום
| שלב | משך | תוצאה |
|---|---|---|
| ביקורת ארכיטקטורה | 1-2 ימים | מפת ניתוב, דרישות אבטחה |
| הגדרת שער בסיסית | 3-5 ימים | ניתוב עובד, אימות JWT |
| הגדרה מתקדמת | 2-3 ימים | הגבלת קצב, circuit breaker, לוגים |
| אגרגציה מותאמת אישית | 1-2 שבועות | נקודות קצה BFF, אופטימיזציית שאילתות |
התמחור מחושב באופן אישי לאחר ביקורת הארכיטקטורה שלכם. בקשו ייעוץ — נעריך את הפרויקט שלכם ללא עלות.
מה כלול ביישום
- עיצוב מדיניות ניתוב ואבטחה
- הגדרת Kong, Traefik או שער ענן עבור התשתית שלכם
- אינטגרציה עם JWT/OAuth2, LDAP או ספק אחר
- הגדרת הגבלת קצב, circuit breaker וניטור
- תיעוד API והדרכות לצוות
- העברת גישה והכשרה למהנדסים שלכם
אנו מספקים גם תמיכה לאחר היישום: שדרוגי גרסאות, אופטימיזציית ביצועים. המהנדסים שלנו מוסמכים ב-Kubernetes ו-Kong, עם ניסיון של 7+ שנים ו-50+ פרויקטים מוצלחים. אנו מבטיחים פעילות יציבה של השער תחת עומס. קבלו ייעוץ לפרויקט שלכם.
משאבים נוספים
למדו עוד על התבנית בויקיפדיה. התיעוד הרשמי של Kong זמין בkonghq.com.







