رابط برنامه نویسی اپلیکیشن(Application Programming Interfaces-API) به تیمهای توسعه نرمافزار کمک میکند تا به سادگی فرآیندهای کسب و کار End-to-End را به کار گرفته و با آنها ارتباط برقرار کنند. نمونههای معمول شامل سبد خرید E-Commerce(تجارت الکترونیک) متصل به درگاه پرداخت، widgetهای نمایش دهنده توییتها یا به روز رسانیهای فیسبوک در یک وب سایت، یا ابزارهایی مانند Slack با اپلیکیشنهای سودمند و همکاری کننده یکپارچه میشوند.
اما APIها کلید وب اپلیکیشنها و وب سرویسها هستند. با این حال، این فرآیندهای End-to-End میتوانند فقط به صورت High-Performing(سریع، قابل اعتماد) باشند که خود APIها به آن وابستهاند. ما در اینجا مفهوم APIها را با این عناوین بررسی خواهیم کرد: چگونه کار میکنند، چرا آنها باید در فرآیندهای تست نرمافزار جای بگیرند، و در آخر به بهترین شیوهها(Best Practice) برای نظارت و تست آنها خواهیم پرداخت.
درباره APIها
رشد فزایندهای در وبسرویسها توسط APIها صورت گرفته است: پروتکلهای مبتنی بر HTTP به طور غیرمستقیم برنامههای کاربردی را قادر میسازند تا اطلاعات را منتقل کرده و به صورت یکپارچه با یکدیگر ارتباط برقرار کنند. این روش به توسعهدهندگان اجازه میدهد تا از تکنولوژی موجود برای کاراتر کردن اپلیکیشنهای خود استفاده کنند.
آمازون(Amazon) یک نمونه قدرتمند از API User است. آمازون APIهایی را برای فروشندگان خود به منظور مدیریت موجودی، پردازش سفارش و حتی مدیریت رشد درآمد به صورت خودکار در نظر گرفته است. APIها برای فروشندگانی که اغلب هزاران محصول را در سایت لیست میکنند این امکان را ساده کرده است تا با استفاده از داشبوردهای سفارشی(Custom-Built) و اپلیکیشنهایی که به همه چیز رسیدگی میکنند(از هشدار اتمام اجناس تا ردیابی به روز رسانی خودکار دادهها برای حمل و نقل)، به اطلاعات کسب و کار خود برسند.
علاوه بر این APIها یک فناوری پایهای برای اینترنت اشیاء(IoT ) هستند که وسایل معمولی مانند لوازم خانگی، اتومبیلها و گوشیهای هوشمند را به سرویسهای مبتنی بر ابر(Clod-Based Services) که قابلیتهای آنها را کنترل و اِعمال میکند، متصل مینماید.
نحوه کارکرد APIها
APIها به دو مولفه اصلی بستگی دارند: اول: encapsulation و انتقال داده. دوم: امنیت. دادههای API شامل درخواست و پاسخ API است. دادهها در یک قالب خاص به صورت XML یا JSON، ساختاربندی شدهاند. انتقال داده و امنیت عبارتند از API و تبادل دادهها با درخواستها و پاسخهای پردازش شده بر اساس وبسرویسی که مورد استفاده قرار گرفته است، مانند: SOAP یاREST. هدرهای HTTP، کوکیها یا پارامترهای Query String که داده را به همان صورت مبادله شده امن میکنند.
SOAP، REST و JSON قابلیت توسعهپذیری را به APIها ارائه میدهند و آنها را با برنامههای دیگر صرف نظر از زبان استفاده شده در آنها سازگار مینمایند. به عنوان مثال، Instagram و فیسبوک دو پلتفرم رسانههای اجتماعی مختلف با Functionaهای منحصر به رابطهای مربوط به خود هستند. اگر چه این دو برنامه مستقل هستند اما هر دو آنها امکان برقراری ارتباط درونی با استفاده از APIها را دارند. از این رو، کاربر میتواند با استفاده از حساب کاربری فیسبوک خود به Instagram وارد شده و عکسها را در هر دو پلتفرم به اشتراک بگذارد.
نمونههایی از API Monitoring
اغلب تسترهای نرمافزار نگران این موضوع هستند که وبسایتها و اپلیکیشنهای Mission-Critical در دسترس باقی بمانند و و تحت ترافیک سنگین همچنان کار کنند، و علاوه بر این به نام تجاری و نه کسب درآمدشان خللی وارد نشود. ما در این زمینه حجم زیادی از بررسیهای موشکافانه را مشاهده میکنیم بویژه در دورههایی که ترافیک سنگین است مانند فصول تعطیلات.
در حالی که نظارت بر بارگذاری صفحه و زمانهای پاسخ و زیرساخت اینترنت که از وبسایتهای مدرن و وب اپلیکیشنها پشتیبانی میکنند حیاتیست، اما بسیاری از اینها، مخصوصا در فضای تجارت الکترونیک، وابستگی شدیدی به APIها دارند، که اولین تعاملات خریداران را تحت تاثیر قرار میدهد. این موارد میتوانند شامل این APIها باشند: جستجو در سایت، ادغام کاتالوگ محصول، شخصیسازی، و موتورهای مقایسه قیمت و توصیهها.
ورود اطلاعات کارت اعتباری و انتخاب حمل و نقل کالا همچنان نیاز به فراخوانی بیشتر API دارد. آیا میخواهید پس از اتمام یک معامله، خرید خود را در رسانههای اجتماعی به اشتراک بگذارید؟ در این حالت دوباره APIها کپی میشوند. خرابی یا کاهش سرعت در هر کجا در طول این زنجیره میتواند تجربه مشتری شما را خراب کرده و برای شما هزینهبر باشد. این APIها باید به طور منظم به عنوان بخشی از استراتژی نظارتی سایت E-Commerce شما تحت تست و نظارت قرار گیرند.
API Monitoring در موبایل اپلیکیشنها که به APIها برای تحویل و مصرف داده وابسته هستند نیز بسیار مهم است. بدون APIها، موبایل اپلیکیشنها چیزی بیش از یک رابط لمسی نرم و لطیف نیستند، که در واقع قادر به انجام هیچ کاری نیستند و عایدی خاصی تولید نمیکنند. از آنجایی که بسیاری از کاربران برنامه موبایل به منظور کسب اطلاعات مربوط به خریدهای آتی از فروشگاه(به صورت آنلاین یا حضوری) در حال مرور(Brows) محصولات روی برنامه هستند، Performance ضعیف API در برنامه میتواند هزینههای زیادی را چه به صورت آنلاین و چه به صورت آفلاین برای کسب و کار آینده سازمان در برداشته باشد.
اهمیت تستAPI
وبسایتها و برنامههای مدرن برای گسترش و ایجاد Functionality غنی با بسیاری از سرویسهای Third-Party همکاری می کنند. همه این سرویسها شامل API نیستند. برای مثال: ابزارهای ردیابی تبدیل اغلب در سایت ها به عنوان تگ های جاوا اسکریپت بدون دخالت API جاسازی شده اند.
تمام سرویسهای Third-Party چه بر APIها تکیه داشته باشند چه نداشته باشند، باید به طور کامل تحت تست و نظارت قرار گیرند، زیرا تمام چیزی که برای کاهش سرعت و یا حتی سخت کردن کار تصور میشود، یک عامل کند و غیر قابل اطمینان است. عوامل متعددی برای کاهش API Performance وجود دارند، از جمله: Endpointهای API که خرابی(Down-Time) را تجربه میکنند؛ باگهای Integration که باعث بروز خطاها و وقفهها میشوند؛ API Authentication که بیش از حد معمول طول بکشد؛ API Serviceهایی که به اندازه کافی برای مدیریت درخواستهای ورودی و پاسخهای خروجی قوی نیستند؛ و تاخیر در فراخوانیهای API، که میتوانند گلوگاههای Performance را ایجاد کرده و یا بیفزایند.
از آنجایی که فرآیندهای وابسته به API اغلب از اپلیکیشنهای مشتری و تولید درآمد(و در کل Mission-Critical) پشتیبانی میکنند، نظارت و تست APIها یک امر ضروریست. موارد زیر را در نظر بگیرید:
- هنگامی که یک خریدار آنلاین یک سفارش در یک سایت تجارت الکترونیک ثبت میکند، درگاه پرداخت برای تأیید اطلاعات کارت اعتباری کاربر از APIها استفاده میکند. اگر آن API که گزینههای پرداخت در سایت را Integrate میکند دچار مشکل شود، نه تنها منجر به یک سبد خرید رها شده میگردد، بلکه نتایج نومید کنندهای که به دلیل تجربه منفی کاربر حاصل شده، روی سر شما هوار میشود.
- اگر یک سایت کسب و کاری بر یک ویجت جستجو که به صورت Third-Party استفاده میشود متکی باشد و API مربوط به اجرای این ویجت هم دچار مشکل شود، کاربران نمیتوانند محصول را پیدا کنند. این نیز میتواند موجب ناراحتی کاربر و تاثیر منفی بر کسب و کار شود.
- برای سایتهایی که به منظور اتومات کردن مدیریت اموال از API استفاده میکنند، یک مشکل در API Performance میتواند موجب تاخیر در اجرای سفارش شود که به تمام مراحل پردازش سفارش به طور آبشاری و به طبع آن بر درآمد سایت تأثیر میگذارد.
- تعداد فراخوانیهای API در دستگاه های IoT بالاتر است زیرا آنها بر به روز رسانی اطلاعات به صورت Real-Time تکیه میکنند، بنابراین حتی یک تاخیر ناچیز میتواند به سرعت مانع Performance مناسب شود.
سناریوهایی که در بالا روی آنها بحث کردیم روشن میسازد که هنگام ایجاد استراتژی APM-Asset Performance Management(مدیریت Performance دارایی) نمیتوانید نظارت بر API را نادیده بگیرید و این برای هر نوع برنامهای که از API ها استفاده میکند صادق است.
اگر شما یک ارائه دهنده API هستید، استراتژی مانیتورینگ API شما باید موارد زیر را الزاما در نظر داشته باشد:
- Availability یا در دسترس بودن – APIها باید بالا باشند و در هر زمان از روز اجرا شوند. مسائل مربوط به دسترسی میتواند Performance برنامه را کاهش داده و کاربر نهایی را تحت تاثیر قرار دهد.
- Security یا امنیت – نظارت بر API میتواند برای تست Reliability تراکنشهای API مورد استفاده قرار گیرد و بایستی API Authentication را مدیریت کند تا به این ترتیب در راستای حصول اطمبنان از تبادل امن دادهها و اینکه این تبادلات توسط رباتهای دادهکاوی درخواست نشده است به شما کمک کنند.
- Benchmarking – دادههای جمعآوری شده توسط ابزار نظارت باید برای تجزیه و تحلیل، جامع و آسان باشند. این موضوع باید به Benchmark کردن بهرهوری API شما در مقایسه با رقبا کمک کند. Benchmarking یک چشمانداز بهتر از API Performance را ارائه میدهد، بنابراین میتوانید اطمینان حاصل کنید که این API با دیگر ارائه دهندگان API قابل قیاس است.
- SLA – ابزار مانیتورینگ به شما هشدار میدهد که یک تخریب Performance یا قطع عملیات حادث شده است یا خیر. نظارت فعلانه به شما کمک میکند تا مشکلات را سریعتر شناسایی نموده و حل کنید و بدین ترتیب از نقض SLA جلوگیری نمایید.
اگر شما برنامههایی اجرا میکنید که چندین API را استفاده میکنند، نظارت بر هر APIای که شما استفاده میکنید به اندازه نظارت بر اپلیکیشن مهم است. هر API Integrationای باید به طور مداوم برای هرگلوگاه Performance تست شود.
API ها چگونه نظارت میشوند؟
بخشهای متعددی برای نظارت بر API ها وجود دارند و به راهکار نظارت مورد استفاده و ویژگیهای ارائه دهنده آن بستگی دارد. نظارت بر دسترسپذیری(Availability) یکی از ویژگیهای اساسی است که در هر راهکار مانیتورینگ میتوانید به آن دست یابید که عبارتست از: اجرای تستها در فرکانسهای(تکرارهای) تعریف شده برای تعیین اینکه آیا API Endpoint قابل دسترسی است یا خیر و بازگرداندن پاسخ. این تستها هشدارهایی را در صورت خرابی یا کاهش Performance در بر دارند، به طوری که شما میتوانید مشکلات و مسائل را سریعتر حل و فصل کنید.
نظارت بر Endpointهای API همیشه یک فرآیند ساده نیست؛ اکثر فراخوانیهای API نیاز به Authentication برای ایمنسازی تبادل دادهها دارند و این امر نیاز به پارامترهای بیشتری برای همراهی با HTTP Request دارد. راهکار نظارتی که شما استفاده میکنید باید توان شبیهسازی تراکنشهای پیچیده API را داشته باشد، که تنها در صورتی امکان پذیر است که تستها با موارد زیر پیکربندی شوند:
- Request Headerها – برای شبیهسازی یک تراکنش API این موضوع مهم است که API مذبور شامل Headerهای درخواستی که فراخوانی API را تشکیل میدهند، باشد. این موضوع HTTP-Request را تعریف میکند، که آیا Request مذبور POST یا Get است و آیا نیازمندی Authentication است یا خیر. علاوه بر این تعریف میکند که آیا هر یک هر یک از دادهها باید در طول Session ذخیره شوند یا خیر.
- Authentication – اکثر Endpointهای API برای حصول اطمینان از Reliability دادهها، ایمنسازی میشوند. شبیهسازی چنین تراکنشهایی از API نیامند ارسال یک نام کاربری و رمز عبور در HTTP-Request است. بنابراین راهکار نظارت باید از Basic HTTP Authentication پشتیبانی کند.
بهترین شیوهها برای تست API
از آنجا که APIها، فرآیندهای Core را در بسیاری از اپلیکیشنها اجرا میکنند، هنگام تحلیل Performance کلی اپلیکیشن، باید یک نقطه کانونی اصلی باشند. اگر یک کسب و کار بر روی یکپارچگی APIها متکی باشد یا به مشتریان اجازه دهد که به اطلاعاتشان از طریق یک API دسترسی داشته باشند، به یک راهکار تست نیاز دارید که چشمانداز ۳۶۰ درجهای از فرایندهایی که برنامه را تشکیل می دهند ارائه دهد.
- ابتدا تَبهای روی API Performance Functionality را با استفاده از تستهای API حفظ کنید. این تستها میتوانند برای نظارت بر مشکلات سرعت و دسترسپذیری ستاپ شوند، و دادههای جمعآوری شده در طول زمان نیز قادر هستند برای تحلیل این گرایشات Performance استفاده شوند.
- تست کردن دسترسپذیری به تنهایی کافی نیست. بیشتر تراکنشهای API شامل تبادل دادهها میشوند. بنابراین لازم است اطمینان حاصل شود که دادهها قابل اعتمادند. علاوه بر این سازمانها میتوانند این موضوع را که آیا APIها بواسطه اعتبارسنجی(Validating) ورودیها به درستی کار میکنند یا خیر را تست کرده و اطمینان حاصل کنند که دادهها در فرمت مناسب ساختاربندی شدهاند.
- ابزارهای تست API خود دارای APIهایی هستند، که دادههای تولید شده خود را قادر میسازند تا با سیستمهای نظارت بر Performanceقادرند دادههای تولید شده خود را با سیستمهای نظارت بر Performance اپلیکیشن بزرگتر یکپارچه شوند.
شیوههای مناسب دیگر برای تست API عبارتند از:
- Continuous Testing روی API Endpointها به منظور تضمین دسترسپذیری: کنترل دقیق بر روی API Endpointها سریعا به تشخیص وقفهها یا مسائل مربوط به Performance کمک میکند. این امر تاثیرات بر کاربران نهایی را به حداقل میرساند.
- Performance Testing بر استقرارهای جدید برای یافتن مشکلات(قبل از آنکه کاربران آنها را بیابند) تاثیر میگذارد: هنگام اجرای امکانات(Feature) جدید به عنوان بخشی از انتشار، اندازهگیری تاثیر بر یکپارچگی API موجود ضروریست. اگر تغییرات ایجاد شده در برنامه با APIهایی که استفاده میکنید کار نمیکنند، ممکن است برنامه به شدت کند شده و یا حتی Crash کند.
- تمام وابستگیهای API برنامه را برای حصول اطمینان از عدم تخریب Performance تست کنید: زمانی که شما APIهای متعددی در اپلیکیشن خود دارید و یا APIهایی ارائه دادهاید که با اپلیکیشنهایی که از APIهای متعدد استفاده میکنند، یکپارچه شدهاند، به شدت توصیه میشود که وابستگیهای API را به دلیل اینکه به طور مداوم تمایل به Update شدن یا ارتقا دارند، به طور منظم تست شوند.
- اطمینان حاصل کنیدکه SLA را وادار به استفاده از نظارت بر API کردهاید: هر چه سریعتر بتوانید مسائل مربوط به Performance را تشخیص دهید، سریعتر میتوانید آن را رفع کنید. حل شدن سریعتر مسائل باعث میشود از نقض SLA اجتناب شود.
نتیجهگیری
اپلیکیشنها نه تنها API ها را ارائه میدهند، بلکه بواسطه APIها با اپلیکیشنهای مختلف دیگر نیز ادغام میشوند. وقتی که ما در مورد استراتژی ایدهآل APM صحبت میکنیم، نظارت بر چنین ادغامهای پیچیدهای ضروریست. APM باید شامل راهکارهای مانیتورینگ API باشد که نه تنها Endpointهای API را کنترل میکند، بلکه عملکرد تمام APIهایی را که توسط اپلیکیشن مورد استفاده قرار می گیرند را نیز ارزیابی مینماید. این کار تجزیه و تحلیل جامع Performance اپلیکیشن را فراهم میآورد که هر Function یا Processای بوسیله اپلیکیشن اداره میشود.
در نهایت، تست API قبل،در طی و پس از پیادهسازی، برای حصول اطمینان از دسترسپذیری، سریع بودن و ایمن بودنشان و یا حتی درست کار کردنشان امری لازم و حیاتیست. همانطور که میدانیم، “یک زنجیر تنها به اندازه ضعیفترین پیوندش، قوی است”. این مهم است که APIها را در ابتکارات تست نرمافزار بیشتر وارد کنیم.