۱. رابط های برنامه نویسی کاربردی (API):
یک interface یا رابط مشترک است که، به برنامهها اجازه میدهد با یکدیگر صحبت کنند، بنابراین هر بار که از برنامههایی مانند اینستاگرام استفاده میکنید، و از طریق آن پیام ارسال میکنید یا قیمت سفر را برای تعطیلات بعدی خود بررسی میکنید، در واقع شما دارید از API استفاده میکنید.
امروزه interface های مدرن روی API ها به عنوان فراهم کننده سرویس به مشتریان حساب باز می کنند. ارتباط بین شرکا و تامین کنندگان، و اتصال برنامه های داخلی را فراهم می کنند. API های میتوانند برنامههای کاربردی را ایجاد یا بشکنند. آنها به زیرساختهای اضافی برای ایمنسازی، مقیاسبندی و سرعت بخشیدن احتیاج دارند، در حال حاضر این مسئله بیش از هر زمان دیگری که سازمانها در حال مدرن شدن هستند، دیده میشود. API ها، برنامه های کاربردی یکپارچه بزرگ را به میکروسرویس های مجزا کوچکتر تبدیل می کنند. (شکل ۱)
این میکروسرویسها برای اینکه برنامهها را مقیاسپذیرتر، در دسترستر، و منابع آن را کارآمدتر کنند، بههم متصل هستند. با این حال، نتیجه استفاده از معماری مبتنی بر میکروسرویس با تعداد زیادی فراخوانی API بین مشتریان و میکروسرویسهای زیاد است.
بنابراین، چگونه امنیت ترافیک API را برای یک سیستم توزیع شده می توان مدیریت کرد؟
با نگاهی عمیقتر می توان فهمید که چگونه یک API Gateway میتواند تجربه کاربر و توسعهدهنده یک فروشگاه آنلاین (مثال) را بهبود بخشد. با یک مثال از یک فروشگاه تجارت الکترونیک ساختگی API Gateway را بیشتر توضیح می دهیم: همان طور که در شکل ۲، می توان دید، این فروشگاه تعدادی میکروسرویس دارد مثل Product Info که سرویس ارائه اطلاعات کالا را برای مشتری فراهم می کند و یا سرویس Pricing که سرویس خرید کالا را فراهم می کند و …، همه از طریق یک Web برای مشتریان سرویس خود را ارائه می دهند. که API Gateway قرار است بین Web و میکرو سرویس ها قرار بگیرند و مزایایی را را برای مشتریان و توسعه دهندگان فراهم می کند.(شکل ۲)
دروازههای API در پیادهسازی تست A/B، ذخیرهسازی، مدیریت سهمیههای دسترسی، نظارت بر سلامت API، نسخهسازی API، تست Chaos monkey، کسب درآمد و بسیاری موارد دیگر به ما سود میرسانند.
- امنیت ?️ ، هر بار که یک تماس API انجام می شود، باید با استفاده از آدرس های IP عمومی به خدمات دسترسی پیدا کند. این خطرات را آشکار می کند. با روشن کردن API Gateways، این میکروسرویس ها فقط با استفاده از آدرس های IP خصوصی قابل دسترسی هستند. این منجر به روش امن تر تراکنش داده ها می شود. علاوه بر این، استفاده از API Gateway از داده ها در برابر حملات مخرب و DDoS محافظت می کند.
برای اطمینان از امنیت، گواهی TLS ضروری است، API Gateway با نگه داشتن تمام API های ما در پشت یک IP ثابت یا دامنه و کمک به محافظت از آنها با کلیدها، توکن ها و فیلتر IP، همه آنها را مدیریت می کند.
- احراز هویت، مجوز، و تحمل خطا ?، مهم است که از احراز هویت و مجوز کاربری که وارد برنامه ها می شود اطمینان حاصل شود. API Gateway با یک نقطه ورودی بودن کار را آسانتر میکند و همه الزامات را به راحتی برآورده میکند. بنابراین، فقط به کاربران مجاز اجازه ورود به سیستم و کاربران تأیید شده را می دهد تا تغییرات را ایجاد کنند، بنابراین تحمل خطا به دست می آید.
- تعادل بار و مسیریابی ?، در مورد درخواست های متعدد و افزایش ترافیک، API Gateway به رسیدگی به آن کمک می کند. این کار با ایجاد چندین سرویس و فراخوانی آنها مانند Round-Robin انجام می شود. این می تواند درخواست های مشتری را بر اساس تقسیم بندی کاربر مدیریت و مسیریابی کند. بنابراین کیفیت یا سرعت متفاوتی از محتوا برای کاربران مختلف ارائه می شود.
یک مورد استفاده را در نظر بگیرید که در آن دو میکروسرویس به ترتیب برای بازگرداندن تصاویر/فیلمهای با کیفیت پایین و تصاویر/ویدئوهای با کیفیت بالا برای دسکتاپ و موبایل تعریف شدهاند. در این حالت، میتوانیم یک دروازه API را به گونهای پیکربندی کنیم که یک روتر عمل کند و اگر درخواست از تلفن همراه باشد، آن درخواست را به سرویس تصاویر/ویدئوهای با کیفیت پایین هدایت کند، و اگر درخواست از طرف دسکتاپ، می تواند به سمت سرویس تصاویر/فیلم های با کیفیت بالا هدایت شود. این مسیریابی را می توان بر اساس هدرها، مسیرها و پارامترها و غیره انجام داد.
- عایق، اگر یک یا چند میکروسرویس به برنامه اضافه یا حذف شده باشد، کد مشتری را به روز نمی کنیم. در این صورت باید تغییراتی را در خود دروازه API انجام دهیم تا مطابق میکروسرویس های به روز شده تماس برقرار کنیم.
- معکوس پروکسی و ذخیره سازی، ارائه یک فایل استاتیک (HTML، JS، CSS، فونت ها) توسط یک میکروسرویس بهترین استفاده نیست، در این صورت می توانیم این فایل ها را به دروازه API منتقل کنیم.
یک دروازه API می تواند تمام محتویات ثابت را نگه دارد و می تواند مستقیماً به مشتری سرویس دهد. به طور مشابه، سرویسی را در نظر بگیرید که محصولات پرطرفدار را ارزیابی می کند و این روندها به صورت ساعتی یا روزانه محاسبه می شوند. بنابراین هنگامی که روند برای بقیه زمان محاسبه شد، سرویس به طور مکرر همان پاسخ را برمیگرداند. در این مورد، یک دروازه API دارای یک ویژگی به نام پاسخ کش است، که در آن میتوان به URL و زمان آستانه اشاره کرد که برای آن نیاز به ذخیره پاسخها دارد.
- آداپتور پروتکل،اگر بخواهیم از مزایای پروتکلی مانند سوکت وب یا نسخه جدیدتر HTTP، یعنی HTTP/2 استفاده کنیم، و حتی اگر سرویسهای پشتیبان ما آماده نیستند یا با HTTP/2 یا سوکت وب سازگار نیستند، یک دروازه API میتواند مسئولیت تبدیل پروتکل جدیدتر به قدیمی تر می تواند به عنوان یک آداپتور پروتکل عمل کند.
- کارایی مشتریان یا Client performance،به مشتریان کمک می کند که به جای ارسال درخواست های متفاوت از سمت کاربر به میکروسرویس ها یک درخواست برای API Gateway ارسال می کنند. و به این صورت مشتری راحت می تواند از هر سرویس استفاده کند.
- ترجمه پروتکل یا Protocol Translation، پروتکل بینuser و API Gateway، می تواند با پروتکل سمت میکرو سرویس ها و API Gateway، متفاوت باشد، API Gateway می تواند آنها را ترجمه کندو
دروازه API بخشی از سیستم مدیریت API است. دروازه API تمام درخواست های دریافتی را رهگیری می کند و آنها را از طریق سیستم مدیریت API ارسال می کند که انواع توابع ضروری را مدیریت می کند.
دقیقاً کاری که دروازه API انجام می دهد از یک پیاده سازی به اجرای دیگر متفاوت است. برخی از عملکردهای رایج عبارتند از احراز هویت، مسیریابی، محدود کردن نرخ، صورتحساب، نظارت، تجزیه و تحلیل، خطمشیها، هشدارها و امنیت.
اکثر API های سازمانی از طریق دروازه های API مستقر می شوند. برای دروازههای API معمول است که وظایف مشترکی را که در یک سیستم از سرویسهای API استفاده میشوند، مانند احراز هویت کاربر، محدود کردن نرخ و آمار انجام دهند.
در ابتدایی ترین حالت، یک سرویس API یک درخواست راه دور را می پذیرد و یک پاسخ را برمی گرداند. اما زندگی واقعی هرگز به این سادگی نیست. نگرانی های مختلف خود را هنگام میزبانی API در مقیاس بزرگ در نظر بگیرید.
اگر می خواهید از API های خود در برابر استفاده بیش از حد و سوء استفاده محافظت کنید، پیشنهاد می شود که از یک سرویس احراز هویت و محدودیت نرخ استفاده کنید.
اگر بخواهید بدانید که مردم چگونه از API های شما استفاده می کنند، پیشنهاد می شود که ابزارهای تجزیه و تحلیل و نظارت را به آن اضافه کنید.
مطالعه موردی یک صفحه پیچیده (مثلاً صفحه محصول) یک برنامه تجارت الکترونیک را در نظر بگیرید. اگر به صفحه زیر لیست محصولات آمازون نگاه کنیم، می توانیم اطلاعات زیادی را که برای ارائه توسط این صفحه خاص مورد نیاز است، مشاهده کنیم.
برای اهداف تصویری، بیایید تمام ریزسرویس هایی را که ممکن است برای ارائه صفحه خاص بالا نیاز داشته باشیم، فهرست کنیم.
محصول جستجو، موجودی، حمل و نقل، رتبه بندی و بررسی ها، موتور توصیه، بازرگانان، و امور مالی و بیمه را در نظر بگیرید هفت ریزسرویس متفاوتی هستند که برای ارائه صفحه فوق استفاده می شوند.
بالای هفت میکروسرویس فقط یک فرض برای توضیح مفهوم دروازه API است. در واقعیت، آمازون می تواند تعداد متفاوتی از ریزسرویس ها را داشته باشد.
مشکل
از آنجایی که اگر مشتری بخواهد به این خدمات دسترسی داشته باشد، این میکروسرویس ها به طور جداگانه در سرور دیگری مستقر شده اند، حداقل هفت تماس باید برای یک صفحه درخواست شود.
سوال: اما آیا واقعا رویکرد خوبی است؟
پاسخ: فکر نمیکنم این یک رویکرد توصیهشده باشد، زیرا ما باید هفت تماس مختلف داشته باشیم، که قطعاً بر عملکرد، مصرف منابع، زمان بارگذاری و غیره تأثیر میگذارد. کلاینت نیز به شدت با همه خدمات مرتبط است، و فرض کنید اگر مجبور باشیم میکروسرویس های Reviews و Rating را در دو سرویس مختلف جدا کنید، باید کد مشتری را به روز کنیم. مشتری باید یک تماس برای دریافت نظرات و یک تماس برای دریافت رتبه بندی داشته باشد، که واقعاً بهترین راه برای مقابله با آن نیست.
راه حل: بنابراین، رویکرد توصیه شده چیست؟
این یک دروازه API است.
در این رویکرد، ما یک لایه بین مشتری و میکروسرویس ها داریم به نام دروازه API. این یک سرویس جلویی برای همه میکروسرویس ها است. اکنون هر کلاینتی که بخواهد به میکروسرویس ها دسترسی پیدا کند، مشتری باید با دروازه API تماس بگیرد. اکنون دروازه API به نوبه خود با همه میکروسرویس ها تماس می گیرد و هر پاسخی را که ممکن است نیاز داشته باشیم دریافت می کند. این فرآیند ترکیب API نامیده می شود.
(به طور خلاصه، یک دروازه API بین مشتری و میکروسرویس ها قرار دارد و به عنوان یک دروازه برای همه میکروسرویس ها عمل می کند.)
۲. معرفی چند ابزار متن باز برای فناوری API Gateway :
۲-۱) ابزار Kong Gateway، محبوب ترین دروازه API مبتنی بر ابر منبع باز است که بر روی یک پروکسی سبک وزن ساخته شده است. این ابزار به زبان Lua نوشته شده است که با کمک Nginx اجرا می شود. Kong Gateway یک موتور قالب دارد که به سرعت بخشیدن به زمان رویداد کمک می کند. و تضمین میکند که عملکرد تأخیر و مقیاسپذیری بینظیری را برای همه برنامههای میکروسرویس ما بدون توجه به جایی که اجرا میکنند، ارائه دهد.
شرکت هایی مانند Nasdaq، Honeywell، Cisco، FAB، Expedia، Samsung، Siemens و Yahoo Japan به طور گسترده از دروازه API Kong استفاده می کنند.
برخی از ویژگی های ارائه شده توسط Kong عبارتند از:
میتوانید Kong را بر روی پلتفرم ابری دلخواه خود اجرا کنید.
۲-۲) ابزار Apache APISIX، آپاچی APISIX ابتدا در فناوری ZhiLiu چین متولد شد و در مرحله بعد وارد انکوباتور آپاچی شد و منبع باز شد. مینگ ون، معاون پروژه، بیان میکند که این دروازه API چالشهای مختلفی را که توسط سرویسهای بومی ابری و میکروسرویسها ایجاد میشود، حل میکند.
۲-۳)
۳. معرفی دو شرکت که در ایران در این زمینه خدمات می دهند:
۳-۱) شرکت ارتباطات سیار ایران: اس ام اس به Gateway API، ساده ترین راه برای ارسال پیامک به ایران (جمهوری اسلامی) است. راه اندازی API آسان است، هزینه پایین آن، و به کاربراین امکان را می دهد که برای تمامی مشتریان خود در ایران (جمهوری اسلامی) و سراسر جهان پیامک ارسال کند. همچنین به شرکت هااجازه میدهد تا گزارشهای تحویل دقیق را دریافت کند، لیستها را ایجاد کند، از طریق HLR اعتبارسنجی کند و پیامها یا کمپینهای شخصیشده ارسال کی کند. این میتواند دروازه پیامک ها را به ابزاری مفید برای رایانه مشتریان تبدیل کند.
۳-۲) شرکت پلتکو (شرکت دانش بنیان): Gateway API ارائه می دهد و در این راستا خدماتی را در جهت مدیریت API انجام می دهد. مدیریت API یک راه حل مدیریتی و انعطاف پذیر است که یکپارچه سازی زیر ساخت وب سرویسهای سازمان را انجام میدهد و به مشتریان کمک می کند تا بدانید دقیقاً چه کسی، چه زمانی و چگونه به وب سرویسهای مشتریان دسترسی پیدا میکند. همچنین ابزارهای کاربردی و جذابی در اختیار مدیران و اپراتورها قرار میدهد که باعث بالا رفتن کارایی کل سرویسهای سازمان میشود و از خطاها و اتلاف زمان به طرز چشمگیری جلوگیری میکند. علاوه بر این موارد میزان توسعه پذیری کل وب سرویسها بالا میرود و به سازمان امکان استفاده از وب سرویسهای قدیمی را بدون کد نویسی میدهد. از دیگر خدمات دیگری که Gateway API ارائه می دهد عبارتند از:
[1] https://www.youtube.com/watch?v=hWRRdICvMNs
[2] https://www.redhat.com/en/topics/api/what-does-an-api-gateway-do
[3] https://geekflare.com/api-gateway/
«این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است»