فراتر از یک پروکسی ساده
در سادهترین حالت، Gateway فقط یک درخواست را به یک سرویس هدایت میکند. اما گاهی یک صفحه در رابط کاربری نیاز به داده از چند سرویس مختلف دارد؛ مثلاً صفحهی جزئیات سفارش نیاز به اطلاعات از سرویس سفارش، سرویس کاربران و سرویس کاتالوگ دارد. اگر کلاینت مجبور باشد سه درخواست جداگانه بزند و نتایج را خودش ترکیب کند، هم کند است و هم منطق کلاینت را پیچیده میکند.
الگوی API Composition (یا Aggregation) این مشکل را حل میکند: Gateway یا یک لایهی میانی، بهطور همزمان از چند سرویس داده میخواند و یک پاسخ ترکیبی و واحد به کلاینت برمیگرداند:
async def get_order_details(order_id):
order, user, product = await asyncio.gather(
fetch_order(order_id),
fetch_user(order.user_id),
fetch_product(order.product_id),
)
return {"order": order, "user": user, "product": product}
الگوی Backend for Frontend
وقتی نیاز کلاینتهای مختلف (اپ موبایل، پنل مدیریت، اپلیکیشن وب) خیلی متفاوت است، الگوی Backend for Frontend (BFF) پیشنهاد میکند بهجای یک Gateway عمومی، برای هر نوع کلاینت یک لایهی ترکیبکنندهی اختصاصی ساخته شود که دقیقاً همان شکل دادهای را که آن کلاینت نیاز دارد آماده میکند. این کار از سنگین شدن بیشازحد یک Gateway واحد با منطق ویژهی هر کلاینت جلوگیری میکند.