رابط برنامهنویسی کاربردی مجموعهای از قوانین است که به یک برنامه نرمافزاری اجازه میدهد تا دادهها را به برنامه نرمافزاری دیگری منتقل کند. APIها به توسعهدهندگان این امکان را میدهند که از کارهای تکراری جلوگیری کنند؛ به جای اینکه عملکردهای موجود در برنامهها را دوباره بسازند، میتوانند آنها را در برنامههای جدید خود با فرمت درخواستهایی که API نیاز دارد، ادغام کنند. API به معنای “رابط” است و به نوعی تعامل بین دو چیز اشاره دارد. به عنوان مثال، یک دستگاه خودپرداز (ATM) دارای یک رابط – صفحه نمایش و چندین دکمه – است که به مشتریان اجازه میدهد با بانک خود تعامل داشته و خدماتی مانند برداشت وجه را درخواست کنند. به همین ترتیب، API نحوه تعامل یک نرمافزار با برنامه دیگری برای دریافت خدمات مورد نیاز را فراهم میکند.
فرض کنید جنیفر وبسایتی را ایجاد میکند که به مسافران کمک میکند تا قبل از رفتن به محل کار، ترافیک بزرگراهها را بررسی کنند. جنیفر میتواند زمان و هزینه زیادی را صرف راهاندازی یک سیستم پیچیده ردیابی بزرگراه کند تا این اطلاعات را به کاربران وبسایت خود ارائه دهد. اما این قابلیتها قبلاً وجود دارند، زیرا طرفهای خارجی چنین سیستمهایی را ایجاد کردهاند. به جای اینکه دوباره چرخ را اختراع کند، وبسایت جنیفر از API ارائهشده توسط یک سرویس ردیابی بزرگراه خارجی استفاده میکند. اکنون جنیفر میتواند بر روی ساخت سایر جنبههای وبسایت تمرکز کند.
API call چیست؟
API call، که به عنوان درخواست API نیز شناخته میشود، پیامی است که به یک API ارسال میشود و استفاده از آن را فعال میکند. به مثال قبلی برگردیم؛ جنیفر وبسایت خود را به گونهای طراحی میکند که وقتی بارگذاری میشود، به طور خودکار یک API call به سرویس ردیابی بزرگراه ایجاد کند. پاسخ از آن سرویس به وبسایت بازمیگردد و به آن اجازه میدهد تا آخرین اطلاعات ترافیک بزرگراه را نمایش دهد. API callها باید طبق الزامات API فرمتبندی شوند تا کار کنند. الزامات API به عنوان “طرح” آن شناخته میشود. طرح همچنین انواع پاسخهایی را که به هر درخواست ارائه میشود، توصیف میکند.
فرض کنید یک مسافر از وبسایت جنیفر برای بررسی ترافیک بزرگراه ۱۹۲ استفاده میکند. وبسایت یک API call برای ارائه این اطلاعات ارسال میکند – پیامی که میگوید “بزرگراه ۱۹۲”. سرور API سرویس ردیابی بزرگراه این پیام را دریافت کرده و با زمانهای سفر در بزرگراه ۱۹۲ پاسخ میدهد. تصور کنید طرح API به این صورت باشد:
درخواست API | پاسخ API |
“بزرگراه ۱۹۲” | زمانهای سفر در بزرگراه ۱۹۲ |
“بزرگراه ۲۱۷” | زمانهای سفر در بزرگراه ۲۱۷ |
“بزرگراه ۲۲۵” | زمانهای سفر در بزرگراه ۲۲۵ |
(توجه داشته باشید که این یک مثال بسیار سادهشده است – درخواستها، پاسخها و طرحهای واقعی API پیچیدهتر هستند.)
حال فرض کنید وبسایت جنیفر یک درخواست API برای “بزرگراه ASDFGHJ” ارسال کند. این درخواست معتبر نیست زیرا مطابق با طرح API نیست که فقط نامهای واقعی بزرگراهها را مجاز میشمارد. سرور قادر نخواهد بود به چنین درخواستی پاسخ قابل استفادهای ارائه دهد.
API endpoint چیست؟
اندپوینت، انتهای یک کانال ارتباطی است. API endpoint محلی است که پاسخ API از آنجا منشا میگیرد. در مثال، کلاینت اتصال API وبسایت جنیفر است و اندپوینت، سروری است که API را میزبانی میکند. API callهای جنیفر باید به یک URL خاص (URL یک آدرس وب است، مانند www.cloudflare.com/learning) که سرور API مسئول آن است، ارسال شوند تا پاسخ دریافت کنند.
ادغام API چیست؟
ادغام API ترکیب دو یا چند برنامه است که از APIها استفاده میکنند. ادغام API این امکان را فراهم میکند که یک برنامه از قابلیتهای برنامه دیگری بهرهمند شود، درست همانطور که ترکیب یک تیم فروش و یک تیم بازاریابی در یک دفتر به این دو تیم اجازه میدهد تا با هم کار کرده و از تلاشهای یکدیگر بهرهبرداری کنند. ادغامهای API همچنین به طور معمول برای همگامسازی دادهها بین دو برنامه یا پایگاهداده استفاده میشوند.
API وب چیست؟
هر چیزی که شامل کد کامپیوتری باشد میتواند یک API داشته باشد، از سیستمعاملها گرفته تا کتابخانههای نرمافزاری. API وب به طور خاص برای استفاده توسط برنامههای تحت وب طراحی شده است که از طریق اینترنت قابل دسترسی هستند. APIهای وب برای اینترنت مدرن بسیار مهم هستند. تقریباً تمام برنامههای کاربرمحور به APIها برای عملکرد خود وابستهاند (نه فقط وبسایت جنیفر!). فلسفههای کامل توسعه نرمافزار به استفاده از APIها وابستهاند – یکی از این فلسفهها JAMstack است که JAM به معنای JavaScript، APIها و نشانهگذاری است. مثال دیگری معماری میکروسرویسها است که از APIها برای فراخوانی عملکردهای مختلفی که یک برنامه را تشکیل میدهند، استفاده میکند. حتی برنامههایی که بدون این رویکردها ساخته شدهاند معمولاً به APIها وابستهاند.
APIهای SOAP و REST چیست؟
APIهای SOAP و REST دستههای مختلفی از APIها را توصیف میکنند. SOAP (پروتکل دسترسی ساده به اشیاء) نوعی پروتکل است. APIهای SOAP، رابطهای برنامهنویسی کاربردی هستند که فقط از پروتکل SOAP استفاده میکنند. REST (انتقال وضعیت نمایشی) یک سبک معماری برای خدمات وب است. یک API REST هر API است که با استفاده از معماری REST ساخته شده باشد. بر خلاف APIهای SOAP، رابطهای برنامهنویسی کاربردی با هر پروتکلی کار میکنند. بیشتر APIهای امروزی APIهای REST هستند.
آیا APIها خطرات امنیتی را معرفی میکنند؟
همانطور که اجازه دادن به یک شخص برای استفاده از یک برنامه خطر سوءاستفاده از آن برنامه را به همراه دارد، یک API نیز خطر سوءاستفاده از خدمات را توسط یک کلاینت API به همراه دارد. علاوه بر این، درخواستهای API وب از طریق اینترنت منتقل میشوند و میتوانند مانند هر انتقال داده دیگری در شبکه، مورد حمله قرار گیرند، جعل شوند یا تغییر یابند.
امنیت API، عملی است که به محافظت از APIها در برابر حملات و سوءاستفادهها میپردازد. با توجه به اهمیت APIها برای اینترنت مدرن، امنیت API یک جزء اساسی از امنیت برنامههای وب است. اقدامات امنیتی کلیدی API شامل موارد زیر است:
- محدود کردن نرخ: کلاینتهایی که درخواستهای API زیادی ارسال میکنند، میتوانند API را برای سایر کلاینتها کُند یا خراب کنند. محدود کردن نرخ، سقفی برای تعداد درخواستهای API که میتواند از یک API endpoint معین در یک بازه زمانی مشخص بیاید، تعیین میکند.
- حفاظت در برابر DDoS: مشابه محدود کردن نرخ، حفاظت در برابر حملات انکار خدمات توزیعشده (DDoS) به جلوگیری از حملات DDoS کمک میکند که هدف آنها خسته کردن یا غرق کردن یک API با تعداد زیادی درخواست است که به طور همزمان ارسال میشود.
- احراز هویت: احراز هویت API endpoint و کلاینتها برای اطمینان از اینکه درخواستهای API از منابع معتبر میآیند و نه از مهاجمان، مهم است. TLS متقابل (mTLS) یکی از مؤثرترین اشکال احراز هویت API است.
- اعتبارسنجی طرح: اگر یک درخواست API با طرح API مطابقت نداشته باشد، API ممکن است به روشهای غیرمنتظرهای واکنش نشان دهد – به عنوان مثال، با افشای دادههای محرمانه. اعتبارسنجی طرح به یک API این امکان را میدهد که چنین درخواستهایی را رد کند.