آشنایی با API Gateway


خیلی دوست دارم بنویسم؛ نمیدونم چرا مغزم پیر شده و مثل قدیما دیگه ایده‌ای واسه نوشتن به ذهنم نمیرسه؛ دیگه بعد از کلی کلنجار رفتن با خودم، تصمیم گرفتم درمورد موضوع API Gateway ها بنویسم.

از اونجایی که خودم توی شرکت آسا درگیر زیرساخت مربوط به این حوزه هستم، جدا از Knowledge Sharing، خوشحال میشم تجربیات بقیه همکارانانم در دیگر سازمان ها رو هم بدونم؛ اینکه زیرساخت و تکنولوژی و معماریشون به چه شکلی هستش و خلاصه خوشحال میشم درمورد این موضوع باهم گپ و گفتی داشته باشیم.

شما در سازمانتون، ممکنه به عنوان یک SRE ویا توسعه‌دهنده، درگیر زیرساخت‌های مربوط به API Gateway‌ها بشید؛ مباحث مربوط به این حوزه خیلی گسترده شده و با توجه به استفاده از این کانسپت در معماری‌های میکروسرویس، ساختارهای فروش API و دیگر بیزینس‌ها، آشنایی با این محصول‌ها و بسترها میتونه یک موضوع بسیار مهم و کلیدی باشه؛ جدا از مباحث مربوط به خود APIها و API Gatewayها، تمامی موارد زیرساختی دیگه در حوزه دواپس و SRE مثل Scaling، مانیتورینگ، Logging، توسعه و نگه‌داری بروی Orchestratorها مثل کوبرنتیز، ارائه و پیاده‌سازی راهکاری‌های HA و FT برای افزایش Reliability و استفاده از CI/CD در بخش‌های مختلف توسعه و پابلیش API‌ها، میتونه موارد درگیر کننده‌ی شما باشه.

پس پیشنهاد میکنم به عنوان توسعه‌دهنده ویا SRE، حتما درمورد این مفهوم مطالعه داشته باشید و اگر تجربه و دانش دیگری‌هم دارید، باهام به اشتراک بذارید و اگر علاقه‌مندید، درمورد کارهایی که انجام دادیم و به شکل جزئی‌تر درمورد تجربیاتی که کسب کردیم، صحبت کنیم و بنویسیم!


شاید یکسری از بچه ها ندونن که API Gateway چیه، پس میشه گفت:

به شکل مختصر، API Gateway ها یک HTTP server/proxy هستن که به شکل یک دیوار در جلوی APIهای سیستمتون قرار میگیرند و یک محل متمرکزی رو واستون فراهم میکنن که بتونید APIهارو مدیریت، امن، Route و محدود کنید؛ ساختار این API Gateway ها به شکلی هستش که معمولا نیازمند این هستند که مقیاس‌پذیر باشن و برای زیرساخت APIهای ما پرفورمنس بالا و HA فراهم سازند.

بستر API Gateway های مدرن معمولا open-source/open-core هستش، به عنوان مثال، KONG یکی از معروفترین API Gatewayها، بروی بستر NginX ساخته شده و Express API بر اساس Node.js Express.

گرچه قابل ذکره که یکسری API Management/Gateway های Cloud-based هم داریم که Cloud Provider هایی مثل AWS، G Cloud و Azure ارائه میدن و خیلی هم خفنن؛ ولی خب متاسفانه ما توی ایران دسترسی به این سرویس‌ها نداریم :)

از کارهایی که با یک API Gateway میتونید انجام بدید، میتونیم موارد زیر رو بهشون اشاره کنیم:

  • Authentication & Rate Limiting
  • Downstream & Upstream Load Balancing
  • Isolation
  • Caching
  • CORS Policies
  • Data Validation & Transformation
  • API Canary Release/Versioning
  • API Analytics(Business and Technical Based)
  • Data Aggregation(in Advanced ones!)
  • Logging / Monitoring
  • Monetization (همون فروش API)
  • Traffic Control
  • Write Plugins for doing crazy stuff!

جدای این فیچرها، یکسری چیزهای دیگه هم میتونه در اختیارتون قرار بده؛ مثل:

  • سازگاری بسیار خوب با معماری‌های Cloud-native و Microservice
  • مقیاس‌پذیری بسیار بالا
  • قابلیت پیاده‌سازی به شکل Centralized و Decentralized
  • قابلیت Integration و سازگاری برای توسعه و تست با بستر CI/CD

قابلیت سازگاری با:

  • سرویس‌های SOAP Based
  • سرویس‌‎های gRPC Based
  • سرویس‌های مبتنی بر GraphQL
  • سرویس های مبتنی بر WebSocketها

و قطعا، سرویس‌های مبتنی بر REST



قطعا ابزارها و محصولات مختلفی از کمپانی‌های مختلف برای این مفهوم وجود داره که مشخصا هیچکدوم، همه فیچرهایبالارو به شکل یکجا و از پیش آماده نداره؛ از شناخته‌شده ترین ابزارها، میشه موارد زیر رو نام برد:

  • KONG
  • WSO2 (API Manager & Microgateway)
  • Ocelot

و ده‌ها مورد کوچیک و بزرگ دیگه.

گرچه قابل اشارست که بنا به Stack، دانش، زیرساخت، معماری و هدف هرسازمان، ممکنه سراغ هرکدوم از این ابزارها بریم و از امکاناتشون استفاده کنیم، ممکنه برای Internal Usage امون یک API Gateway داخلی و برای فروشمون، External Gateway جداگونه داشته باشیم و برای هرکدوم، ساختار و کلاسترینگ و تکنولوژی جداگونه‌ای رو دنبال کنیم؛ با ابزارها، Message Brokerها و سرویس‌های مختلف ترکیبشون کنیم و در نهایت خروجی مدنظرمون برای بیزینس رو ایجاد کنیم.

در نهایت خوشحال میشم نظری درمورد این موضوع داشتید باهام به اشتراک بذارید و از همدیگه چیزی یاد بگیریم!

ارادتمند / سجاد غفاریان