رابط برنامهنویسی کاربردی (API) راهی برای درخواست خدمات از یک برنامه به برنامه دیگر است. APIها به توسعهدهندگان این امکان را میدهند که از بازسازی ویژگیهای برنامهای که قبلاً وجود دارد، خودداری کنند. API endpoint محلی است که آن درخواستها (که به عنوان API call شناخته میشوند) در آنجا انجام میشود.
اگر آلیس و باب با یکدیگر درحال صحبت باشند، کلمات آلیس به سمت باب و برعکس حرکت میکنند. آلیس کلماتش را به “اندپوینت” مکالمه، یعنی باب، هدایت میکند.
آلیس: “سلام، باب” ———-> باب
به همین ترتیب، یک یکپارچگی API مانند یک مکالمه است. اما به جای گفتن “سلام”، یک کلاینت API چیزی شبیه به “من به دادههایی نیاز دارم” به سرور API میگوید و بدین ترتیب یک API call انجام میدهد. سپس اندپوینت سرور API میگوید: “این هم دادهها”، که به عنوان پاسخ API شناخته میشود. همچنین، API endpoint موجودات فیزیکی مانند آلیس و باب نیستند؛ آنها در نرمافزار وجود دارند، نه در سختافزار.
سرورها و کلاینتهای API
APIها بر روی یک یا چند سرور میزبانی میشوند – کامپیوترهای تخصصی که دادهها را ذخیره کرده و برنامههای نرمافزاری را اجرا میکنند. هر سرور دادهها، محتوا و قابلیتهای نرمافزاری را ازطریق اینترنت به سایر دستگاهها ارائه میدهد. API endpoint تقریباً همیشه بر روی یک سرور میزبانی میشود.
طرف دیگر ارتباط API، کلاینت API است، موجودی که خدمات را از API درخواست میکند. برخی این موجود را “کاربر API” مینامند، حتی اگر بیشتر API callها به صورت خودکار انجام شوند.
چگونه یک کلاینت API endpoint سرور را میشناسد؟
برای اینکه یک API قابل استفاده باشد، باید مستندات داشته باشد. مستندات مشخص میکند که API چه نوع درخواستهایی را میپذیرد، چه قابلیتهایی دارد، چگونه پاسخهایش را فرمت میکند و نقاط پایانی آن کجا هستند. توسعهدهندگان میتوانند مستندات API را مرور کرده و این اطلاعات را در حین ساخت برنامههای خود به کار ببرند.
APIها چگونه از URLها استفاده میکنند؟
نشانهگذاری منبع یکنواخت (URL) برای مقاصد مختلفی در وب استفاده میشود، از جمله برای مکانیابی صفحات وب. به عنوان مثال، URL نسخه انگلیسی آمریکایی این صفحه https://www.cloudflare.com/learning/security/api/what-is-api-endpoint است. زمانی که یک کاربر این URL را در مرورگر خود وارد میکند، مرورگر میداند که این صفحه را از کجا پیدا کند و میتواند آن را بارگذاری کند.
URLها همچنین API endpoint را نشان میدهند. زمانی که آلیس و باب با یکدیگر تلفنی صحبت میکنند، آلیس با شماره تلفن باب با او تماس میگیرد. به همین ترتیب، URL اندپوینت API مانند یک شماره تلفن برای انجام API callها است.
یک سرور API میتواند یک یا چند نقطه پایانی API را میزبانی کند، به این معنی که درخواستها را به URLهای آن اندپوینت میپذیرد و پردازش میکند. کلاینتهای API نیز باید یک URL داشته باشند تا سرور API بداند پاسخها را به کجا ارسال کند، درست مانند اینکه باب و آلیس هر دو نیاز به یک شماره تلفن دارند تا تماسهای تلفنی بین آنها برقرار شود. توسعهدهندگان این URL را هنگام ساخت برنامههای خود تعیین میکنند.
یک URL همیشه شامل پروتکل لایه کاربردی، مانند HTTP، است که برای دسترسی به آن استفاده میشود. بیشتر APIهای وب از HTTP استفاده میکنند، بنابراین این پروتکل در URL اندپوینت API گنجانده میشود.
چگونه API endpoint و کلاینتها احراز هویت میشوند؟
یک API بهخوبی طراحیشده، API callها را از هر کسی نمیپذیرد. این امر باعث میشود سرور API در معرض دریافت دادههای مخرب از مهاجمان قرار گیرد. علاوه بر این، استفاده از API معمولاً هزینهبر است، بنابراین در این موارد سرور API باید بررسی کند که آیا API call از یک مشتری پرداختکننده (paying customer) میآید یا خیر.
به همین دلایل، سرور API باید اطمینان حاصل کند که کلاینت API که درخواست را ارسال کرده، شناخته شده و مورد اعتماد است. این کار از طریق احراز هویت انجام میشود.
احراز هویت فرآیند تأیید هویت است. همانطور که روشهای مختلفی برای یک کاربر انسانی برای احراز هویت در یک سیستم وجود دارد، چهار روش اصلی وجود دارد که API endpoint میتوانند احراز هویت را اعمال کنند:
۱. کلید API: به کلاینت API یک کلید، یا یک رشته منحصر به فرد از کاراکترها اختصاص داده میشود که فقط آنها و سرویس API از آن مطلع هستند. زمانی که کلاینت API یک API call به اندپوینت سرور ارسال میکند، این کلید را شامل میشود تا سرور بداند درخواست از کجا آمده است.
۲. احراز هویت پایه (نام کاربری و رمز عبور): مشابه رویکرد کلید، کلاینت API یک نام کاربری و رمز عبور با سرویس API تنظیم میکند و این اطلاعات را در API callها شامل میشود.
۳. توکن OAuth: به جای اینکه از کلاینت احراز هویت بخواهد، یک سرور API میتواند از یک سرور احراز هویت معتبر با استفاده از پروتکل OAuth توکن احراز هویت دریافت کند.
۴. TLS متقابل: TLS پروتکلی است که یک اتصال معتبر بین کلاینت و سرور هنگام بارگذاری صفحات وب ایجاد میکند. این پروتکل همچنین میتواند هر دو طرف یک یکپارچگی API را احراز هویت کند.
در بسیاری از موارد، TLS متقابل مؤثرترین روش احراز هویت است. از یک سو، این روش هر دو اندپوینت و کلاینت را احراز هویت میکند، نه فقط کلاینت، بنابراین هر دو طرف میتوانند مطمئن باشند که دادهها را از یک منبع معتبر دریافت میکنند. همچنین از کلیدهای خصوصی استفاده میکند که هرگز بین API endpoint به اشتراک گذاشته نمیشود و بنابراین نمیتوانند در حین انتقال رهگیری شوند. از سوی دیگر، کلیدهای API، رمزهای عبور و توکنها میتوانند همگی کپی یا دزدیده شوند.
سپر API کلاودفلر از TLS متقابل برای احراز هویت API endpoint و کلاینتها استفاده میکند و به این ترتیب از هر دو طرف در برابر حملات محافظت میکند. سپر API همچنین چندین ویژگی دیگر را ارائه میدهد.