مجتبی مرادی
مجتبی مرادی
خواندن ۱۰ دقیقه·۳ سال پیش

مقدمه‌ایی بر API Gateway

مقدمه

در این پست قصد داریم که مفهوم API Gateway، مزایا و معایب آن، معرفی یک الگو، ابزار های موجود در این زمینه و شرکت‌هایی که در ایران این خدمات را محیا می‌کنند را معرفی کنیم.

میکروسرویس‌ها

طبق تعریف گارتنر: ”میکروسرویس یک مؤلفه کاربردی، محصور سازی شده، با حداقل وابستگی(Coupling) که قابل استقرار و مقیاس پذیر مستقل است.“ هدف میکرو سرویس‌ها تجزیه برنامه به میکروسرویس‌ها/ماژول‌های با حداقل وابستگی به یکدیگر است. برخلاف برنامه‌های کاربردی یکپارچه که در آن ماژول‌ها به‌شدت به یکدیگر وابسته شده‌اند و به عنوان یک تکه ماژول بزرگ و منفرد مستقر می‌شوند. میکروسرویس‌ها به دلایل زیر مفید خواهند بود:

· هر میکروسرویس را می توان مستقل از خدمات دیگر میکروسرویس‌ها در برنامه مستقر، ارتقا، مقیاس، نگهداری و راه‌اندازی مجدد کرد.

· توسعه چابک و استقرار چابک با یک تیم متقابل عملکردی مستقل.

· انعطاف پذیری در استفاده از فناوری ها و مقیاس پذیری.

· سرویس‌های مختلف با پیوند آزاد بر اساس نیازهای خاص خود مستقر می‌شوند که در آن هر سرویس دارای مدلAPI دقیق خود برای ارائه خدمات به مشتریان مختلف (وب، موبایل وAPIهای دیگر) است.

ارتباطات در میکروسرویس ها
ارتباطات در میکروسرویس ها


بیایید با یک مثال ارزش API Gateway را مشخص کنیم.

بیایید تصور کنیم که در حال ساخت یک فروشگاه آنلاین هستید که از الگوی معماری Microservice استفاده می کند و صفحه جزئیات محصول را پیاده سازی می کنید. شما باید چندین نسخه از رابط کاربری جزئیات محصول را توسعه دهید:

  • رابط کاربری مبتنی برHTML5/JavaScript برای مرورگرهای دسکتاپ و موبایل HTML توسط یک برنامه وب سمت سرور تولید می شود.
  • کلاینت های بومی اندروید و آیفون (این کلاینت ها از طریق API های REST با سرور تعامل دارند)
  • علاوه بر این، فروشگاه آنلاین باید جزئیات محصول را از طریق یک REST API برای استفاده توسط برنامه‌های شخص ثالث فراهم کند.
    رابط کاربری جزئیات محصول می تواند اطلاعات زیادی را در مورد یک محصول نمایش دهد.
  • به عنوان مثال، صفحه جزئیات Amazon.com برای نمایش کتاب POJOs in Action: به صورت زیر است:
  • اطلاعات اولیه کتاب مانند عنوان، نویسنده، قیمت و غیره.
  • سابقه خرید شما برای کتاب
  • دسترسی
  • گزینه های خرید
  • موارد دیگری که اغلب با این کتاب خریداری می شوند
  • سایر اقلام خریداری شده توسط مشتریانی که این کتاب را خریده اند
  • نظرات مشتریان
  • رتبه بندی فروشندگان

از آنجایی که فروشگاه آنلاین از الگوی معماری Microservice استفاده می کند، داده های جزئیات محصول در چندین سرویس پخش می شود. مثلا،

  • خدمات اطلاعات محصول - اطلاعات اولیه در مورد محصول مانند عنوان، نویسنده
  • خدمات قیمت گذاری - قیمت محصول
  • خدمات سفارش - سابقه خرید برای محصول
  • خدمات موجودی - در دسترس بودن محصول
  • خدمات بررسی - نظرات مشتریان …

در نتیجه، کدی که جزئیات محصول را نمایش می‌دهد باید اطلاعاتی را از همه این خدمات دریافت کند.

در اینجا یک سوال به وجود می‌آید:

چگونه مشتریان یک برنامه مبتنی بر میکروسرویس به خدمات فردی دسترسی دارند؟

در حالی که فکر می کنیم مشتری مستقیماً با هر یک از میکروسرویس های مستقر شده ارتباط برقرار می کند، چالش های زیر باید در نظر گرفته شود:

1- در مواردی که میکروسرویس APIهای ریز دانه را در معرض دید مشتری قرار می دهد، مشتری باید از هر میکروسرویس درخواست کند. در یک صفحه معمولی، ممکن است برای انجام درخواست، چندین سفر رفت و برگشت سرور مورد نیاز باشد. به عنوان مثال، همانطور که در بالا توضیح داده شد، مشتری که به جزئیات یک محصول نیاز دارد، باید داده‌ها را از خدمات متعدد واکشی کند.

2- پروتکل ارتباطی متنوع (مانند gRpc، thrift، REST، AMQP و غیره) موجود در میکروسرویس‌ها، پذیرش همه آن پروتکل‌ها را برای مشتری چالش برانگیز و حجیم می‌کند.

3- عملکردهای دروازه مشترک (مانند احراز هویت، مجوز، ورود به سیستم) باید در هر میکروسرویس پیاده سازی شود.

4- ایجاد تغییرات در میکروسرویس ها بدون ایجاد اختلال در اتصال مشتری مشکل خواهد بود. به عنوان مثال هنگام ادغام یا تقسیم سرویس‌های ریز، ممکن است نیاز به کدگذاری مجدد بخش مشتری باشد.

5- عملکرد شبکه برای انواع مختلف مشتریان متفاوت است. به عنوان مثال، یک شبکه تلفن همراه به طور معمول بسیار کندتر است و تاخیر بسیار بالاتری نسبت به یک شبکه غیر همراه دارد. و البته، هر WAN بسیار کندتر از یک LANاست. این بدان معناست که یک کلاینت تلفن همراه بومی از شبکه ای استفاده می کند که ویژگی های عملکردی بسیار متفاوتی نسبت به LANمورد استفاده توسط یک برنامه وب سمت سرور دارد. برنامه وب سمت سرور می‌تواند چندین درخواست برای سرویس‌های پشتیبان ارائه دهد بدون اینکه تأثیری بر تجربه کاربر داشته باشد، در حالی که به عنوان یک مشتری تلفن همراه فقط می‌تواند تعداد کمی را انجام دهد.

6- تعداد نمونه های سرویس و مکان آنها (میزبان + پورت) به صورت پویا تغییر می کند.

7- پارتیشن بندی به خدمات می تواند در طول زمان تغییر کند و باید از مشتریان پنهان شود.

راه حل چالش‌های مطرح شده توسط API Gateway برطرف می‌شود.

معرفی API Gateway

یک API Gateway لایه‌ایی است که در مقابل یک API(رابط برنامه‌نویسی کاربردی) قرار می‌گیرد و یک نقطه ورودی برای APIهای Back-end و میکروسرویس‌های تعریف شده (که می‌توانند داخلی و خارجی باشند) است.
API مخفف Application Program Interface است. مجموعه ای از دستورالعمل ها، پروتکل ها و ابزارها برای ساخت برنامه های نرم افزاری است و نحوه تعامل اجزای نرم افزار را مشخص می کند.
در جلوی API ها، دروازه به عنوان محافظ عمل می کند، امنیت را اعمال می کند و مقیاس پذیری و در دسترس بودن بالا را تضمین می کند. به بیان ساده، API Gateway تمام درخواست‌های API را از مشتری دریافت می‌کند، تعیین می‌کند که کدام سرویس‌ها مورد نیاز هستند، و آنها را در یک تجربه یکپارچه و یکپارچه برای کاربر ترکیب می‌کند.
API Gateway همچنین مسئول مسیریابی درخواست، ترکیب و ترجمه پروتکل است. تمام درخواست های ارسال شده توسط مشتری از طریق دروازهAPI انجام می شود. پس از آن، API Gateway درخواست ها را به میکروسرویس مناسب هدایت می کند. API Gateway درخواست را به یکی از دو روش زیر رسیدگی می کند:

1- درخواست ها را به سرویس مربوطه روت یا پروکسی کرد.

2-گسترش(Fan out) یک درخواست به چندین سرویس.


یک API Gatewayمی تواند برای هر مشتری یک API سفارشی ارائه کند. همچنین بین دو پروتکل مانند HTTP، WebSockets و پروتکل های Web-Unfriendly که به صورت داخلی استفاده می شوند، ترجمه می شود.

به عنوان مثال نمونه محبوب API Gateway Netflix API Gatewayاست. خدمات پخش Netflixدر صدها نوع مختلف دستگاه مانند تلویزیون، ست تاپ باکس، گوشی های هوشمند، تبلت ها و غیره در دسترس است. این سرویس تلاش می کند یک API یک اندازه برای سرویس پخش خود ارائه دهد.

همانطور که گفته شد، برای رسیدگی به چالش های ذکر شده در بالا، یک لایه اضافی (API Gateway) معرفی شده است که بین مشتری و سرور قرار می گیرد و به عنوان یک درخواست مسیریابی پروکسی معکوس از مشتری به سرور عمل می کند.

به طور خلاصه، دقیقاً به عنوان مدیریت API عمل می کند، اما مهم است که مدیریت API را با API Gateway اشتباه نگیرید.

Microservice API Gateway
Microservice API Gateway


قابلیت های API Gateway

  • مسیریابی

گیت‌وی با احاطه کردن سیستم زیربنایی و جدا شدن از مشتریان، یک نقطه ورودی واحد را برای مشتری فراهم می‌کند تا با سیستم میکروسرویس ارتباط برقرار کند.

  • احراز هویت و مجوز
  • ادغام کشف خدمات
  • ذخیره پاسخ
  • سیاست ها، قطع کننده مدار و QoS
  • محدود کردن نرخ
  • تعادل بار
  • ثبت، ردیابی، همبستگی
  • هدرها، رشته های پرس و جو و تبدیل ادعاها
  • لیست سفید IP
  • ثبت متمرکز (شناسه تراکنش در سرورها، ثبت خطا)
  • ارائه دهنده هویت، احراز هویت و مجوز
  • امنیت
  • ترکیب و پردازش API
  • مدیریت سهمیه های دسترسی
  • نظارت بر سلامت API
  • نسخه سازی

مزایای API Gateway

  • مهمترین مزیت API Gateway این است که ساختار داخلی برنامه را محصور می کند.
  • به جای فراخوانی سرویس خاص، مشتری مستقیماً با دروازه API صحبت می کند.
  • این تعداد رفت و برگشت بین مشتری و برنامه را کاهش می دهد.
  • کد مشتری را ساده می کند.
  • تلاش‌های کدنویسی را کاهش می‌دهد، برنامه را کارآمدتر می‌کند، خطاها را به طور همزمان کاهش می‌دهد.
  • برای هر نوع کلاینت یک API خاص ارائه می کند.
  • پشتیبانی از DevOps و Serverless

چگونه یک دروازه APIاز DevOps و محیط های بدون سرور پشتیبانی می کند

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

معایب API Gateway

  • نیاز به قوانین مسیریابی دارد.
  • احتمال یک نقطه شکست وجود دارد.
  • خطر پیچیدگی به دلیل همه قوانین API در یک مکان است.

الگوی Backend for Frontend (BFF)

این یک تغییر از الگوی API Gatewayاست. به جای یک نقطه ورودی واحد برای مشتریان، چندین دروازه را بر اساس مشتری ارائه می دهد. هدف این است که APIهای متناسب با نیازهای مشتری را ارائه دهیم و بسیاری از نفخ های ناشی از ساخت APIهای عمومی برای همه مشتریان را از بین ببریم.

الگوی Backend For Frontend (BFF)
الگوی Backend For Frontend (BFF)


اما سوال اصلی اینجاست که به چند BFFنیاز داریم؟

مفهوم اصلی BFF توسعه پشتیبان‌های خاص برای هر تجربه کاربری است. دستورالعمل فیل کالکادو «یک تجربه، یک BFF» است. اگر الزامات در بین کلاینت‌ها (کلاینت IOS، کلاینت اندروید، مرورگر وب و غیره) به طور قابل توجهی متفاوت باشد و زمان بازاریابی یک پروکسی یا API مشکل ساز شود، BFFها راه حل خوبی هستند. همچنین باید توجه داشت که طراحی پیچیده تر نیاز به یک راه اندازی پیچیده دارد.

ابزار

ابزار Apigee:

ابزار Apigee یکی از ابزارهای مدیریت API برتر است که برای هر برنامه کاربردی، سیستم ضبط و اینترنت اشیا قابل استفاده است. این راه حل نرم افزاری به شما امکان طراحی، ایمن سازی، تجزیه و تحلیل و مقیاس بندی API ها را می‌دهد. برای گفتن بیشتر، Apigee شما را قادر می سازد API های خود را به طور کامل کنترل کنید و نحوه عملکرد سیستم را نظارت کنید.

از جمله ویژگی های Apigee:

  • ابزار Apigee در ارائه راه حل ها در قالب یک پروکسی، عامل یا ترکیبی کمک می کند.
  • برای توسعه، Apigee استفاده از داده ها و ابزارها را با هدف ساخت برنامه های جدید مبتنی بر ابر ساده می کند.
  • توسعه دهندگان می توانند برنامه های کاربردی را به تنهایی ایجاد و ارائه کنند.
  • کمک به اندازه گیری و ردیابی. این ابزار تجزیه و تحلیل هایی را بر روی ترافیک API ارائه می دهد که به تنظیم و نظارت بر علائم مهم اثربخشی مانند KPI کمک می کند.

در Apigee چهار طرح قیمت گذاری را ارائه می دهد - Evaluation، Standard، Enterprise و Enterprise Plus. طرح ارزیابی بدون هزینه است.


ابزار MuleSoft:

ابزار MuleSoft یکی دیگر از ابزارهای درجه یک مدیریت API برای یکپارچه سازی برنامه ها است. همچنین مدیریت و ساخت APIهای عالی را ارائه می دهد. به علاوه، از همان ابتدا راه حل هایی را برای ایجاد یک شبکه برنامه پیشنهاد می کند.

چنین راهکارهایی به شما در مدیریت کاربران و تحلیل ترافیک دریافتی کمک می کند. آنها همچنین شامل سیاست هایی هستند که امنیت API را ارتقا می دهد و سیستم شما را از حملات سایبری جلوگیری می کند.

برخی از ویژگی های اساسی آن عبارتند از:

  • پلتفرم یکپارچه API
  • به ایجاد انجمنی کمک می‌کند که بتوانید از آن برای تشویق مشارکت کنندگان و همکاری با توسعه دهندگان دیگر استفاده کنید

ابزار MuleSoft یک گزینه آزمایشی رایگان را پیشنهاد می کند تا بتوانید ابزارها را کاوش کرده و آنها را در محل کار مشاهده کنید. در میان قیمت گذاری پیشنهادی، طرح طلا، پلاتین و تیتانیوم وجود دارد.

ابزار Knog

ابزار Kong از راه‌حل‌های سراسری برای شرکت‌هایی که بر حل مشکلات برنامه کاربردی تمرکز دارند، پشتیبانی می‌کند. ابزار Kong Gateway و Kong Enterpriseمی توانند به شما در کنترل و مدیریت API ها کمک کنند. آخرین مورد نیز یک ابزار منبع باز است.

برخی از ویژگی های Kong عبارتند از:

  • مدیریت تیم ها و محیط توسعه یکپارچه
  • مجموعه ای از افزونه ها که قابلیت های ابزار را گسترش می دهند.
  • مقیاس پذیری، چیزی که به ویژه برای سازمان هایی با حجم کاری قوی مهم است.

می توانید Kong Gateway را به صورت رایگان دانلود کنید. برای نسخه Enterprise، می توانید یک نسخه آزمایشی نرم افزار رایگان درخواست کنید.

شرکت های ایرانی ارائه دهنده خدمات در حوزه API Gateway

شرکت وصل

پلتفرم مدیریت API سورنا توسعه‌دهندگان را قادر می‌سازد تا برنامه‌هایی مرتبط با سامانه‌های داخلی سازمان/سرویس‌دهنده طراحی و پیاده‌سازی نمایند. همچنین APIها در تکنولوژی‌های مختلف نظیر اینترنت اشیا، رایانش ابری و داده‌های حجیم نقشی کلیدی را ایفا می‌نماید. پلتفرم مدیریت API سورنا پایداری، امنیت و پشتیبانی ویژهای ارائه می‌کند تا شرکت‌های طرف ثالث، همکاران، شرکا و حتی توسعه‌دهندگان آزاد بتوانند با آسودگی خیال و اطمینان از آنها استفاده نمایند.

شرکت درسا

این شرکت نیز یکی از شرکت‌هایی است که سرویس API Gateway ابری را ارائه می‌دهد.

جمله‌ی پایانی

یک API بی فایده است مگر اینکه با کیفیت ثابت ارائه شود. یک Gateway برای کمک به اطمینان از عملکرد عالی، در دسترس بودن بالا و مقیاس پذیری الاستیک API ها از طریق امکان دادن به شرکت ها برای شروع تحویل با خدمات پشتیبانی یکسان، از جمله مدیریت ترافیک، تحول و یکپارچه سازی سیستم، حیاتی است.

«این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است»

مراجع

https://www.axway.com/en/products/api-management/gateway

https://www.redhat.com/en/topics/api/what-does-an-api-gateway-do#support-for-devops-and-serverless-environments

https://microservices.io/patterns/apigateway.html

https://www.javatpoint.com/introduction-to-api-gateways

https://blog.devgenius.io/microservices-design-api-gateway-pattern-980e8d02bdd5

https://www.softwaretestinghelp.com/api-management-tools/

https://medium.com/young-app-platform/top-10-api-gateways-for-api-management-to-try-in-2020-2488d03c0952

https://dorsacloud.com/

http://vasl.ir/platform/api-management/

api gatewaymicroserviceمعماری_نرم_افزار_بهشتیapiBackend For Frontend
شاید از این پست‌ها خوشتان بیاید