مشکل: کلاینت با دهها سرویس مواجه میشود
وقتی سیستم شما از دهها میکروسرویس تشکیل شده، اگر اپلیکیشن موبایل یا فرانتاند بخواهد مستقیماً با هرکدام از این سرویسها ارتباط برقرار کند، پیچیدگی زیادی به کلاینت تحمیل میشود: باید آدرس هر سرویس را بداند، با هر سرویس جداگانه احراز هویت کند و در صورت تغییر ساختار داخلی سیستم (مثلاً ادغام یا تقسیم یک سرویس)، کد کلاینت هم باید تغییر کند.
API Gateway یک نقطهی ورودی واحد بین کلاینتها و مجموعهی میکروسرویسها قرار میدهد. کلاینت فقط با Gateway صحبت میکند و Gateway مسئول است درخواست را به سرویس داخلی درست هدایت (route) کند:
کلاینت → API Gateway → سرویس کاتالوگ
→ سرویس سفارش
→ سرویس کاربران
مزایای اصلی Gateway
علاوه بر مسیریابی، Gateway معمولاً وظایف مشترک بین سرویسها را نیز متمرکز میکند: احراز هویت و اعتبارسنجی توکن، محدود کردن نرخ درخواست (Rate Limiting)، فشردهسازی پاسخ، لاگ متمرکز درخواستها و حتی cache کردن پاسخهای پرتکرار. این کار باعث میشود منطق تکراری از هر سرویس داخلی حذف شود و در یک مکان واحد مدیریت شود. ابزارهای رایج برای این منظور شامل Kong، NGINX، Traefik و Amazon API Gateway هستند؛ در پروژههای کوچکتر حتی میتوان یک Gateway ساده با NGINX یا یک اپلیکیشن سبک نوشت.