امروزه در تولید نرمافزار کلمهی API بسیار شنیده میشود. API درواقع یک واسط نرمافزاری است که اجازه میدهد دو برنامه بدون دخالت کاربر با یکدیگر ارتباط داشته باشند و مجموعهای از عملکردها و رویهها است. در تصویر ۱ نشان داده شده است که چندین برنامه به یک API متصل شدهاند و به وسیلهی آن اطلاعات را از یک پایگاه داده دریافت میکنند.
حال فرض کنید که یک برنامه قرار است که با چندین API به طورهمزمان در ارتباط باشد. یک راه ساده که به ذهن میرسد آن است که به طور مستقیم برنامهی مورد نظر را به APIها متصل کنیم. این کار معایبی دارد مانند ارسال تعداد زیاد درخواست به هرکدام از APIها که باعث کاهش سرعت برنامه و همچنین پیچیدگی برنامه میشود و مورد بعدی آن است که هر کدام از APIها ممکن است پروتکل مخصوص به خود را داشته باشند که هماهنگ کردن آن پروتکلها نیز دردسرهای خود را دارد. برای حل این مشکلات ابزاری معرفی شده است به نام API Gateway. API Gateway یک ابزار مدیریت API است که میان یک مشتری و مجموعهای از سرویسهای back قرار میگیرد. یک API Gateway مانند یک پروکسی برعکس برای پذیرش تمام فراخوانیهای API عمل میکند. درواقع سرویسهای گوناگون مورد نیاز را برای تحقق آنها تجمیع میکند و نتیجهی مناسب را برمیگرداند. به گونهای میتوان گفت که یک واسط است که این امکان را برای مشتری فراهم میکند تا همزمان با چند API در تماس باشند.
اکثر APIهای سازمانی برروی API Gateway مستقر شدهاند. برای Gateway API کنترل وظایف مشترکی که حول یک سیستم از سرویسهای API مانند احرازی هویت کاربر، rate limit، امارها استفاده میشود، رایج است. در پایهای ترین حالت، یک سرویس API یک درخواست را میپذیرد و یک پاسخ برمیگرداند. اما در زندگی واقعی به این سادگی نیست. هنگام بررسی درخواست و ارسال پاسخ از سمت API، نگرانی هایی وجود دارد مانند:
این چالشها و حل آنها سبب میشود که یک تجربهی ساده و قابل اعتماد در مواجه با تمام پیچیدگی پیشنهاد شود. یک API Gateway درخواست را به چند درخواست تقسیم میکند، به جای درست هدایت میکند و یک پاسخ میسازد و تمام عملیات را پیگیری میکند.
یک Gateway API قسمتی از سیستم مدیریت APIاست. درواقع API Gateway تمام درخواستهای ورودی را قطع میکند و آنها را به سیستم مدیریت API میفرستد که انواع گوناگونی از عملکردهای ضروری را کنترل میکند. کاری که API Gateway دقیقا انجام میدهد با توجه به پیاده سازی فرق خواهد کرد. برخی از عملکردهای مشترک شامل احراز هویت، rate limit، مسیریابی، پرداخت، نظارت، تحلیل، سیاستها و امنیت است.
در سازمانهایی که از شیوه DevOps استفاده میکنند، توسعه دهندگان از میکروسرویسها برای ساخت و استقرار برنامهها در یک راه سریع و تکرار شونده استفاده میکنند. APIها یکی از بهترین و رایجترین راههای ارتباطی میکروسرویسها هستند. علاوه بر این، توسعه مدرن ابری، شامل مدل بدون سرور، برای تامین زیرساخت به APIها نیاز بستگی دارد. شما میتوانید عملکردهای بدون سرور خود را مستقر کنید و با استفاده از یک Gateway API آنها را کنترل نمایید. در اینجا بدون سرور(Serverless) منظور حذف سرور از روند تولید نرمافزار و قرار داد برنامه برروی آن نیست بلکه بدون سرور یک مدل توسعهی ابری است که به توسعه دهندگان این اجازه را میدهد تا بدون آنکه نیاز باشد که سرور را مدیریت کنند، برنامهی خود را بسازند و اجرا کنند. بنابراین کماکان در بدون سرور ما سرور داریم ولی تبدیل به یک انتزاع میشود و دیگر توسعه دهندگان درگیر تنظیم آن نمیشوند.
به طور کلی، چون یکپارچگی و اتصال به یکدیگر مهمتر میشود، بنابراین APIها نیز به همان اندازه اهمیت پیدا میکنند. و چون پیچیدگی API بیشتر میشود و استفاده از آنها رشد میکند پس ارزش یک API Gateway نیز مشخص میشود. در ادامه به توضیح دو سیستم API Gateway خواهیم پرداخت که متن باز بوده و توسعه دهندگان میتوانند رایگان از آن استفاده کنند و آنها را تغییر دهند
یکی از این برنامههای متن باز که سرویس API Gateway را ارائه میدهد Kong Gateway نام دارد که معروف و ابری است و از تمام پلتفرمها نیز پشتیبانی میکند. به زبان برنامهنویسی Lua نوشته شده است و زیرساختهای چند-ابری و ترکیبی را پشتیبانی میکند و برای معماری توزیع شده و میکروسرویسها بهینه شده است. هدف از ایجاد Kong کارکرد، قابل گسترش و قابل حمل بالا است و سبک وزن، سریع و مقیاسپذیر نیز هست. از ویژگیهای این نرمافزار میتوان به load balancing، گزارش لاگ، احراز هویت، rate-limit، تبدیلات، نظارت در لحظه، تشخیص سرویس، کش کردن، تشخیص و بازیابی خطا و خوشهبندی گرهها و عملکردهای بدون سرور اشاره کرد. این نرمافزار از تنظیمات پروکسیها برای سرویسها پشتیبانی میکند و برروی SSL آنها را اجرا میکند، یا از WebSocketها استفاده میکند. او میتواند تعادل بار ترافیک را از طریق جایگزینی سرویسهای upstream، نظارت بر دسترسپذیری سرویسها، تنظیم کند. علاوه براین، Kong با یک واسط خط دستور منتقل میشود که اجازه میدهد تا یک خوشه Kong را از طریق خط دستور کنترل کرد. همچنین، این نرمافزار را با استفاده از افزونهها، قابل گسترش است و میتواند با RESTful API آن برای حداکثر انعطافپذیری مدیریت شود.
نرمافزار متن باز دوم Tyk نام دارد که نرمافزاری قدرتمند، سبک و کامل برای API Gateway است که با زبان Go توسعه داده شده است. این نرمافزار نیز یک نرمافزار ابری است و با کارایی بالا با یک توسعهپذیری آسان و معماری قابل اتصال براساس استانداردهای متن باز است. برای اجرا تنها به Reddis برای ذخیره داده نیاز دارد و به صورت مستقل قابل اجراست. به کاربران اجازه میدهد تا به صورت امن انواع گوناگونی از سرویسها را منتشر و مدیریت کنند که شامل legacy, REST, و GraphQL میشود. از سرویسهایی که Tykدارد میتوان به روشهای احراز هویت، quatas, rate-limit, version control، اعلانات و رویدادها، نظارت، و تحلیلها اشاره کرد. همچنین از تشخیص سرویس، تبدیلات و پایانههای مجازی پشتیبانی میکند و ساخت APIهای ساختگی قبل از انتشار را اجازه میدهد. همچنین از مستندسازی APAI نیز پشتیبانی میکندو یک درگاه توسعه دهنده API نیز پیشنهاد میدهد که مانند یک CMS است که در آن میتوان APIهای مدیریت شده را منتشر کرد و سایر توسعه دهندگان ثبتنام کنند و در APIها وارد شوند و کلیدهای خودشان را مدیریت کنند. نکتهی مهم آنکه تنها یک ورژن از Tyk Api Gateway موجود میباشد و کاملا هم متن باز است که همین سبب میشود تا از تمام امکانات آن به طور کامل بتوان استفاده کرد و دارای دو نسخه community or enterprise نیست.
البته برای برخی از سازمانها که تیم توسعهی تیم نرمافزار ندارند میتوانند از شرکتهایی که این سرویس را ارائه میدهند استفاده کنند و محصول آنها را خریداری کنند. در ایران نیز شرکتهایی هستند که این خدمت را ارائه میدهند که در بخش بعدی به معرفی دو شرکت ایرانی خواهیم پرداخت.
شرکتهایی در ایران هستند که این سرویس را ارائه میدهند مانند شرکت وصل و درسا کلود. شرکت وصل نام سرویس مدیریت API که ارائه میدهد را سورنا گذاشته است. امکاناتی که توسط این سرویس به کاربر ارائه میشود میتوان به موارد زیر اشاره کرد:
درسا کلود نیز یک سرویس API Gateway ابری ارائه میدهد که قادر است APIهای سیستمهای تجاری را مدیریت کند بدون در نظر گرفتن مکان سیستمهای تجاری چه در ابر درسا باشد، مراکز داده محلی یا ابرهای شخص ثالث. این سرویس به عنوان یک سرویس ابری بالع عمل میکند که اجازه دسترسی به خوشههای برنامه Kubernetes را میدهد. Kubernetes یک سیستم هماهنگ کنند کانتینر متن باز است برای خودکارسازی استقرار و مدیریت برنامههای کامپیوتری. این سرویس به طور قابل توجهی قابلیتهای سرویس خوشههای برنامه Kubernetes را بهبود میبخشد و این معماری به عنوان معماری استاندارد برای برنامههای کاربردی اینترنت در مقیاس بزرگ عمل میکند.
برای مدیریت APIها از ابزاری به نام API Gatewayاستفاده میکنیم. این سرویس کمک میکند تا برروی چگونگی استفاده از APIها نظارت داشته باشیم، برای استفاده از آنها محدودیت اعمال کنیم و با یک درخواست از سمت کاربر چندین api را صدا کرد. بنابراین استفاده از چنین سرویسی زمانی که قرار است یک برنامه از چند API استفاده کند ضروری است. نرمافزارهایی هستند که این سرویس را به صورت رایگان و متن باز در اختیار سازمانها و توسعه دهندگان قرار میدهد و میتوانند از آن استفاده کنند مانند Kong Gateway و Tyk. همچنین برای برخی از سازمانها که کوچک هستند و تیم توسعهی نرمافزار ندارند میتوانند از شرکتهایی که این خدمت را به صورت آماده ارائه میدهند استفاده کنند مانند شرکتهای درسا کلود و وصل که این سرویس را در ایران ارائه می دهند
این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است