از زمانیکه ساخت و توسعۀ نرمافزارها آغاز شده، سالهای زیادی میگذرد و تیمهای توسعه دهنده همواره در این حرفه پیشرفت نموده و بهتر شدهاند. فناوریها و الگوهای معماری زیادی در این سالها ظهور نمودهاند که هرکدام متناسب با انواع خاصی از کاربردها هستند. میکروسرویس، یکی از این الگوهای معماری است که از دنیای طراحی دامنه محور، تحویل مداوم، اتوماسیون پلتفرم و زیرساخت، سیستمهای مقیاسپذیر و برنامهنویسی چند زبانه پدید آمده است.
آقای رابِرت سی. مارتین در کتاب توسعۀ نرمافزار چابک: اصول، الگوها و کاربرد، اصطلاح اصل مسئولیت واحد (Single-responsibility principle) را چنین مطرح میکند:
چیزهایی را که به دلایل یکسان تغییر میکنند را در یکجا جمعآوری کنید و چیزهایی را که به دلایل مختلف تغییر میکنند از هم جدا کنید.
معماری میکروسرویس، در واقع با استفاده از همین رویکرد، آن را به سرویسهای با کوپلینگ ضعیف گسترش میدهد که میتوانند بهطور مستقل توسعه، استقرار و نگهداری شوند. هر یک از این سرویسها وظیفهای مجزا را بر عهده داشته و میتوانند از طریق APIهای ساده با سرویسهای دیگر ارتباط برقرار کنند تا یک مسئلۀ کسبوکار پیچیدهتر را حل کنند.
اما استفاده از معماری میکروسرویس با مشکلات و چالشهایی همراه است که از جملۀ آنها میتوان به عدم هماهنگی سرویسها با پروتکلهای ارتباطی، نیاز به پیادهسازی عملیات درگاهی (مثل ورود، خروج و غیره) در هر سرویس، کاهش سرعت پاسخ و بالارفتن بار سرور اشاره نمود. برای حل این مشکلات، یک لایۀ اضافی بین مشتری و سرور قرار میگیرد و بهعنوان یک پاسخگوی درخواست مسیریابی معکوس از مشتری به سرور عمل میکند که به آن درگاه API گفته میشود.
در این پست قصد داریم تا شما را با درگاه API آشنا کنیم و برخی ابزارهای متنباز مرتبط را آن را معرفی نماییم. همچنین برخی شرکتهای ایرانی ارائه دهندۀ خدمات درگاه API نیز در انتها معرفی خواهند شد.
درگاه API در واقع یک الگوی نرمافزاری است که در مقابل یک رابط برنامهنویسی نرمافزار (API) یا گروهی از زیرسرویسها قرار میگیرد تا درخواستها، تحویل دادنیها و خدمات را تسهیل کند. نقش اصلی درگاه API این است که بهعنوان یک نقطۀ ورودی واحد، تعاملات بین برنامهها، دادهها و خدمات سازمان و مشتریان داخلی و خارجی را استانداردسازی نماید.
با توضیحاتی که داده شد، شاید کمی بحث پیچیده شده باشد. بگذارید با یک مثال ادامه بدهیم. فرض کنید که میخواهید یک نرمافزار فروشگاه آنلاین بسازید؛ برنامۀ شما باید ویژگیهایی مثل لیست کالاها، سفارش دادن، جزئیات کالاها و غیره داشته باشد. بنابراین چنین برنامهای باید سرویسهایی نظیر سرویس کالا، سرویس سفارش، سرویس قیمتگذاری، سرویس کاربران و غیره را به همراه خود داشته باشد.
به چنین معماری در یک نرمافزار، معماری میکروسرویس گفته میشود که در آن دادهها در چندین سرویس پخش میشوند. فرض کنید در این نرمافزار، صفحۀ اصلی را باز کردهاید و یک کالا را جستجو میکنید. رابط کاربری برنامه، لیستی از دادههای کالاها، دادههای نظرات مشتریان، دادههای موجودی و غیره را برای نمایش صفحۀ فهرست کالاها نیاز دارد. بنابراین قطعه کُدی که چنین دادههایی را برای کاربر فراهم میکند، نیاز دارد تا سرویسهای مربوطه مثل سرویس کالا، سرویس سفارش و غیره را فراخوانی نماید.
اما این نوع معماری، دارای مشکلات متعددی است:
برای فهم بهتر درگاه API میتوان از شکل زیر کمک گرفت. در شکل زیر یک معماری کلی از نرمافزاری فرضی نشان داده شده است که در سمت چپ آن کاربران و در سمت راست، سرویسهای نرمافزار نشان داده شدهاند. میان این دو لایه، یک درگاه API وجود دارد که بهعنوان یک نقطۀ واحد، به درخواستهای کاربران پاسخ میدهد و پاسخهای سرویسها را هدایت مینماید.
یک درگاه API، انعطافپذیری را برای استفاده از پروتکلهای کاملاً مستقل فراهم میکند و به میکروسرویسها اجازه میدهد تا بهراحتی با یکدیگر ارتباط برقرار کنند. درگاههای API به توسعهدهندگان اجازه میدهند تا به عملکردهای زیرمجموعهای از معماری به روشهای مختلف دسترسی داشته باشند، بدون اینکه نقاط پایانی را بهطور عمومی در معرض دید عموم قرار دهند. درگاههای API مزایای متعددی دارند که میتوان از جملۀ آنها به موارد زیر اشاره کرد:
همچنین استفاده از درگاه API معایبی نیز بههمراه دارد:
در این قسمت به چهار ابزار متنباز برتر در زمینۀ درگاه API اشاره میشود.
ابزار Kong Gateway محبوبترین درگاه API اَبری متنباز است که به زبان Lua نوشته شده و با کمک Nginx اجرا میشود. این ابزار در واقع قالبی است که به سرعت بخشیدن به زمان رویداد کمک نموده و تضمین میکند که عملکرد تأخیر و مقیاسپذیری بینظیری را برای همۀ برنامههای میکروسرویسها بدون توجه به مکان اجرا، ارائه دهد.
شرکتهایی مانند Nasdaq ،Honeywell ،Cisco ،FAB ،Expedia ،Samsung ،Siemens و Yahoo Japan بهطور گسترده از درگاه API Kong استفاده میکنند. برخی از ویژگیهای ارائه شده توسط Kong عبارتند از: احراز هویت، کنترل ترافیک، تجزیه و تحلیل، ورود به سیستم، قابلیت توسعه با استفاده از معماری پلاگین.
برای دریافت اطلاعات بیشتر میتوانید به قسمت مستندات یا آدرس وبسایت Kong Gateway مراجعه نمایید.
ابزار Apache APISIX ابتدا در شرکت ZhiLiu چین متولد شد و سپس وارد اَنکوباتور Apache شد و تبدیل به یک ابزار متنباز گردید. مینگ وِن که معاون این پروژه است، بیان میکند که APISIX چالشهای مختلفی را که توسط سرویسهای بومی و میکروسرویس اَبری ایجاد میشود، حل میکند. ابزار Apache APISIX توسط شرکتهایی مانند 360، HelloTalk ،NetEase ،TravelSky و بسیاری دیگر استفاده میشود.
ابزار Apache APISIX مبتنی بر Nginx و etcd و دارای مسیریابی پویا و بارگذاری داغ (Hot Loading) است که مخصوصاً برای مدیریت API تحت سیستم میکروسرویس مناسب است.
برای دریافت اطلاعات بیشتر میتوانید به آدرس وبسایت Apache APISIX مراجعه نمایید.
ابزار Ocelot یک درگاه API مبتنی بر دات نِت است. هدف این پروژه استفاده از دات نِت و میکروسرویسهای در حال اجرا یا معماری سرویسگرا است که نیاز به یک نقطۀ ورود واحد به سیستم خود دارد. با این حال، با سرویسی که از پروتکل HTTP استفاده نموده و روی هر پلتفرمی که ASP.NET Core پشتیبانی میکند، اجرا میشود. Ocelot ویژگیهای استانداردی مانند مسیریابی، احراز هویت، محدود کردن نرخ، حافظۀ پنهان، تعادل بار و غیره را ارائه میدهد. همچنین این برنامه از رمزگذاری، ارسال هِدِر میزبان و Swagger پشتیبانی نمیکند.
برای دریافت اطلاعات بیشتر میتوانید به دایرکتوری گیتهاب ابزار Ocelot مراجعه نمایید.
ابزار Goku در واقع یک زیرمجموعه از پروژۀ EOLINK Inc است. این ابزار یک درگاه میکروسرویس مبتنی بر Golang است که مسیریابی پویا با کارایی بالا، هماهنگی خدمات، کنترل دسترسی API و غیره را امکان پذیر میکند. ابزار Goku یک رابط گرافیکی و سیستم پلاگین برای آسانتر کردن پیکربندی و توسعۀ راحتتر را فراهم میکند. جدا از ویژگیهای استاندارد، Goku ویژگیهایی مثل خوشهبندی، بهروزرسانی، هشداردهی، گزارشگیری و غیره را ارائه میدهد.
برای دریافت اطلاعات بیشتر میتوانید به دایرکتوری گیتهاب ابزار Goku مراجعه نمایید.
در این قسمت دو شرکت ایرانی که خدمات درگاه API را ارائه میدهند، آورده شدهاند.
این شرکت کار خود را از سال 1398 توسط تعدادی از صاحبنظران در حوزۀ رایانش اَبری آغاز نمود و سپس در سال 1400 با نام سیستم خبره درسا به ثبت رسید که نام تجاری آن اَبر درسا است.این شرکت ماموریت خود را تبدیل شدن به پلتفرم اول رایانش ابری در منطقۀ خاورمیانه بیان نموده و سرویسهای مختلفی از جمله مدیریت و درگاه API را به مشتریان خود ارائه میدهد.
برای کسب اطلاعات بیشتر راجع به سامانۀ درگاه ابری API و آشنایی بیشتر با شرکت سیستم خبره درسا، میتوانید به آدرس وبسایت آن مراجعه کنید.
شرکت وصل در سالهای گذشته تلاش نموده است تا با برنامهریزیهای استراتژیک، بلندمدت و تفکری متفاوت، خود را بهعنوان یکی از فعالان حوزۀ فناوری اطلاعات کشور معرفی نماید. در این راستا پلتفرم معرفی شده توسط این شرکت، سورِنا نام دارد که خدمات متفاوتی مانند مدیریت چرخۀ APIها، انعطافپذیری و امنیت را برای میکروسرویسها ایجاد مینماید.
برای کسب اطلاعات بیشتر راجع به سامانۀ سورنا و آشنایی بیشتر با شرکت وصل، میتوانید به آدرس وبسایت آن مراجعه کنید.
بهطور خلاصه، درگاه API یک پروکسی معکوس است که میکروسرویسها را بهعنوان API ارائه میدهد. یک درگاه API همچنین به حداقلسازی خطرات احتمالیِ در معرض قرار دادن عمومی خدمات باطنی سرویسها و منابع داده بهطور مستقیم، کمک می کند. استفاده از درگاه API باعث میشود کُد نوشته شده تمیزتر و سادهتر باشد، تأخیر به حداقل برسد و احراز هویت و رمزگذاری سادهتر شود.
درصورتیکه نیاز به اطلاعات بیشتری در این سبک از معماری دارید، میتوانید کتاب کریس ریچاردسون به نام الگوی میکروسرویسها را مطالعه کنید. همچنین مستندات سرویسهای اَبری Azure شرکت مایکروسافت نیز حاوی اطلاعات جالب و آموزندهای هستند که پیشنهاد میشود آنها را مطالعه نمایید.
این مطلب بهعنوان پاسخ برای بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهید بهشتی نوشته شده است که امیدوارم از آن استفاده برده باشید.
[1] Ali, A. (2021, January 18). 14 Open Source and Managed API Gateway for Modern Applications. Geekflare.
[2] H. (2018, June 22). The What, Why, and How of a Microservices Architecture. Medium.
[3] Martin, R. C., Rabaey, J. M., Chandrakasan, A. P., Nikolić, B., Newkirk, J. W., & Koss, R. S. (2003). Agile Software Development. Pearson Education.
[4] Montgomery, J. (2021, March 30). API gateway. WhatIs.Com.
[5] Nadaduru, L. N. (2021, October 25). What is an API Gateway - FAUN Publication. Medium.
[6] Schiesser, M. (2019, January 10). What is an API Gateway? - Glasnostic Blog.
[7] Shah, B. (2021, October 14). Microservices Design - API Gateway Pattern - Dev Genius. Medium.
[8] Siahaan, J. N. (2019a, September 8). API Gateway Part 1 - Easyread. Medium.
[9] Siahaan, J. N. (2019b, September 8). API Gateway Part 2 - Easyread. Medium.
[10] Why Use API Gateway? Pros & Cons | Knowledge Base. (2021, January 13). Dashbird.
[11] ابر درسا. (2021, December 2). سرویس Api Gateway ابری.
[12] سورنا (API Management) | شرکت وصل. (2021). شرکت وصل.