رابطهای برنامهنویسی کاربردی (API) به برنامهها این امکان را میدهند تا ازطریق ارسال و دریافت درخواستهای API، به رد و بدل کردن اطلاعات بپردازند.
API چگونه کار میکند؟
رابطهای برنامهنویسی کاربردی به برنامههای نرمافزاری این امکان را میدهند تا با ارسال و دریافت درخواستهای رابط برنامهنویسی کاربردی (API Calls) یا درخواستهای اطلاعاتی با یکدیگر ارتباط برقرار کنند. این درخواستها توسط یک کلاینت رابط برنامهنویسی کاربردی (API Client) ایجاد و توسط اندپوینت رابط برنامهنویسی کاربردی (API Endpoint) دریافت میشوند. همچنین، برای تبادل اطلاعات بین APIها، توسعهدهندگان باید مستندات رابط برنامهنویسی کاربردی را ارائه دهند که انواع درخواستهایی که API میتواند بپذیرد، موارد استفادهای که برای آن طراحی شده و نیز هرگونه شرایط مانند پروتکلها، طرحوارهها و الزامات امنیتی که طرفهای دیگر ملزم به رعایت آنها هستند را توضیح دهد. از سوی دیگر، درخواستهای API امکان اشتراکگذاری قابلیتها را بدون اینکه توسعهدهندگان مجبور به بازنویسی توابع برای هر برنامه بهصورت جداگانه باشند، فراهم میکنند. علاوه بر این، بدون APIها، توسعهدهندگان نمیتوانستند به سادگی قابلیتها را در برنامههای مختلف تکرار کرده یا دادهها را از دیگر اپلیکیشنها، سرویسها و ارائهدهندگان درخواست کنند.
API چیست؟
API، رابطی است که به برنامههای نرمافزاری امکان میدهد تا دادهها و قابلیتها را به اشتراک بگذارند. درهمین راستا، این روش ارتباطی به بهبود عملکرد اکثر برنامههای مدرن وب کمک میکند. برای مثال، تصور کنید که شخصی، یک برنامه طراحی میکند که لیستهای پخش موسیقی کلاسیک را براساس حال و هوا (Mood) شنوندگان شخصیسازی میکند. این توسعهدهنده بهجای وارد کردن دستی هزاران قطعه موسیقی برای پر کردن این لیستها، میتواند از یک رابط برنامهنویسی کاربردی استفاده کند که به یک منبع موسیقی خارجی متصل است و از این طریق، در وقت، هزینه و چالشهای توسعه صرفهجویی میکند. در ادامه، لازم به ذکر است که موارد استفاده از API تقریبا نامحدود است، به نحویکه آنها خدمات ابری (کلاود) را به هم، متصل، از پایگاه دادهها، درخواست، برنامههای موبایل را بهطور خودکار، بهروزرسانی، محتوا را به دستگاههای مختلف منتقل، قیمت پرواز و گزینههای تحویل غذا را تجمیع میکنند و بسیاری موارد دیگر را به سرانجام میرسانند.
کلاینت API چیست؟
کلاینت API که گاهی «کاربر» نیز نامیده میشود، نرمافزاری است که درخواست رابط برنامهنویسی کاربردی را ارسال میکند. براین اساس، قبل از تعامل با API Endpoint، کلاینت API باید هویت خود را تأیید کند. این منظور به جلوگیری از سوءاستفادههای احتمالی مهاجمان از رابطها برنامهنویسی کاربردی برای انجام حملات سرویسدهی توزیعشده یا دیداس (DDoS) یا سایر اقدامات مخرب کمک میکند. در ادامه، معمولاً تأیید هویت ازطریق یکی از چهار روش یک رشته کاراکتر (کلید API)، ترکیب نام کاربری و رمز عبور، توکن احراز هویت OAuth یا TLS دوطرفه، انجام میشود. همچنین، استفاده از روشهای قوی تأیید هویت یکی از راههای محافظت از APIها دربرابر حملات است.
API Endpoint چیست؟
اندپوینت رابط برنامهنویسی کاربردی درخواست API را دریافت کرده و اطلاعات درخواست شده را بازمیگرداند. براین پایه، هم کلاینتها و هم API Endpointها به نرمافزارهایی اشاره دارند که بر روی سرورها، میزبانی میشوند. سرورهای API نیز ممکن است چندین نقطه پایانی را میزبانی کنند که هرکدام دارای یک شناسه منبع یکنواخت (URI) برای قرارگیری توسط کلاینت API هستند. گفتنی است که معمولاً این URI یک آدرس اینترنتی (URL) است که به موقعیتهای اینترنتی مانند یک وبسایت اشاره دارد.
API Schema چیست؟
طرحواره رابط برنامهنویسی کاربردی مجموعهای از متادیتاها است که شرایطی را که یک API Call باید رعایت کند تا معتبر شناخته شود، تعریف میکند. این مشخصات در همین حال ممکن است شامل جزئیاتی مانند هدف اندپوینت، روش HTTP و سایر الزامات تعیینشده توسط توسعهدهندگان باشد. درنتیجه، وقتی یک درخواست رابط برنامهنویسی کاربردی ازسوی کلاینت ارسال میشود، باید شرایطی که در طرحواره مشخص شده را رعایت کند و تنها در این صورت، Endpoint API میتواند اطلاعات درخواستی را بازگرداند. برای توضیح بیشتر، تصور کنید که شخصی درحال برنامهریزی برای یک مهمانی است. او در دعوتنامه خویش مشخص میکند که تنها مهمانانی که گلهای مریم زرد آوردهاند، پس از مهمانی کارت تشکر دریافت خواهند کرد. دراین راستا اگر یکی از میهمانها تصمیم به آوردن گلهای قرمز رز به مهمانی بگیرد، پس از اتمام مهمانی، کارت تشکری دریافت نخواهد کرد. بنابراین، بهطور مشابه، یک Call API که شرایط تعیینشده توسط Schema API را رعایت نکند، پاسخی دریافت نخواهد کرد.
API Call چگونه عمل میکند؟
مشابه خود رابطهای برنامهنویسی کاربردی، درخواستهای این نوع از رابطها براساس مشخصات تعیینشده در مستندات API متفاوت هستند. بهشکل کلی، یک Call API از سه مرحله اصلی پیروی میکند:
- کلاینت API درخواست رابط برنامهنویسی کاربردی را آغاز یا درخواست اطلاعات ارسال میکند. بنابراین، کلاینت API باید درخواست را مطابق با پروتکل و طرحواره تعیینشده توسط Endpoint API فرمت کند.
- اندپوینت رابط برنامهنویسی کاربردی، درخواستی را دریافت میکند. سپس اِندپوینت به تأیید هویت کلاینت API پرداخته و Schema API را اعتبارسنجی میکند. امر مذکور به اطمینان از این موضوع کمک میکند که الف) درخواست از منبع تأییدشدهای میآید و ب) شرایط درخواست برآورده شده است.
- درنهایت، Endpoint API اطلاعات درخواستشده را به کلاینت API بازمیگرداند و طرحواره API نوع پاسخهایی که ممکن است به کلاینت ارسال شود را تعیین میکند.
دراین حال، برای توضیح عمیقتر Call API، مقاله «Call API چیست؟» را مطالعه بفرمایید.
رابطهای برنامهنویسی کاربردی از چه پروتکلها و معماریهایی استفاده میکنند؟
در ادامه، APIها با پروتکلهای مختلفی پشتیبانی میشوند. از طرفی، یک پروتکل، روشی برای ارتباط در شبکه است و به API میگوید که چگونه درخواستها و پاسخها را قالببندی کند. نوع پروتکل API که استفاده میشود نیز بستگی به اهداف رابط برنامهنویسی کاربردی برای آن توسعه یافته، موارد استفادهای که خدمت میکند و محدودیتهایی که داشته، دارد. درهمین راستا، دو پروتکل رایج API، پروتکل دسترسی ساده به شیء (SOAP) و فراخوانی روشمحور از راه دور (RPC) هستند. همچنین، انتقال حالت نمایشی (REST)، یک معماری نرمافزاری است که اغلب با پروتکلهای ذکرشده مقایسه میشود.
- SOAP، روشی استاندارد برای ارسال و دریافت درخواستها بین APIهایی را که از سیستمعاملها و معماریهای مختلف استفاده میکنند، فراهم میکند. از طرف دیگر، پروتکل مذکور با پروتکل انتقال ابرمتن (HTTP)، پروتکل انتقال فایل (FTP)، پروتکل ساده انتقال ایمیل (SMTP) و دیگر پروتکلهای لایه کاربردی سازگار است. لازم به ذکر است که پروتکل دسترسی ساده به شیء فقط میتواند دادهها را به کلاینتهای API با استفاده از زبان نشانهگذاری قابلگسترش (XML)، بازگرداند.
- RPC، یکی از سادهترین و قدیمیترین روشهای ارتباط میان رابطهای برانامهنویسی کاربردی است. این پروتکل از طرفی با آغاز یک فراخوانی روشمحور از راه دور عمل میکند که طی آن یک کلاینت، یک عملکرد را از سرور راه دور، درخواست میکند. براین اساس، تفاوت اصلی بین RPC و SOAP/REST این است که فراخوانی روشمحور از راه دور به انجام اقدامات خاص (یا توابع) کمک میکند، درحالیکه SOAP/REST برای دریافت منابع (یا دادهها) استفاده میشود.
- REST نیز به یک معماری انتقال حالت نمایشی اشاره دارد که تا حدی نحوه قالببندی درخواستهای رابط برنامهنویسی کاربردی را تعیین میکند. بهطور خلاصه، REST به یک کلاینت اجازه میدهد تا منابع را از یک سرور درخواست کند و سرور موردنظر، اطلاعات را در وضعیت فعلی آن بازمیگرداند. قابل ذکر است که APIهای REST اغلب از پروتکل HTTP برای قالببندی درخواستها و پاسخها استفاده میکنند، اما با FTP، SMTP و سایر پروتکلها نیز سازگاری دارند. آنها همچنین میتوانند دادهها را به کلاینتهای API در قالبهای مختلفی ازجمله XML، نشانهگذاری شیء جاوا اسکریپت (JSON) و زبان نشانهگذاری ابرمتن (HTML) بازگردانند.
آیا APIها درمعرض خطرات امنیتی هستند؟
مانند هر آنچه که به یک شبکه متصل است، APIها نیز درمعرض سوءاستفاده و بهرهبرداری قرار دارند. درهمین حال، حملات رایج رابطهای برنامهنویسی کاربردی شامل موارد زیر است:
- حملات مبتنی بر احراز هویت: احراز هویت یک بخش حیاتی از اطمینان از این نکته است که Calls API از منابع قانونی ارسال و دریافت میشوند. با این وجود، مهاجمان میتوانند با دور زدن این اقدامات، حملاتی را انجام دهند، مانند رهگیری توکنهای احراز هویت، سرقت کلیدهای API و یا استفاده از روشهای دیگر برای به دست آوردن اعتبارنامههای محرمانه.
- استفاده از آسیبپذیریها: آسیبپذیریهای API همانند نقصهای سطح مجوز اشیاء، نقصهای احراز هویت کاربر، افشاء بیش از حد دادهها و دیگر موارد موجود در ۱۰ الزام امنیتی برتر API از OWASP به نقصهایی در API اشاره دارند که ممکن است به مهاجمان اجازه دسترسی بدونمجوز را بدهند. درنتیجه، مهاجمان با استفاده از این نقصها میتوانند نقض دادهها را انجام داده یا از رابطهای برنامهنویسی کاربردی برای انجام حملات پیچیدهتر استفاده کنند.
- حملات DDoS: مهاجمان ممکن است با حجم زیاد ترافیک به APIها حمله کنند تا خدمات آنرا مختل نمایند یا بهطور کامل متوقف کنند.
درهمین راستا، دروازه رابط برنامهنویسی کاربردی کلاودفلر (API Cloudflare) به کاهش این حملات کمک میکند، به این شکل که این کار با ارائه احراز هویت قوی، اسکن میزان بارهای درخواست برای دادههای حساس، اعتبارسنجی Schema API و شناسایی و جلوگیری از سوءاستفاده از API انجام میشود.