چند روز قبل یک مطلب به اسم What is an API? In English, please خوندم که تصمیم گرفتم ترجمهاش را اینجا بنویسم. این مطلب یک توضیح ساده برای API است. تا اینکه هرشخصی بتونه کلیت این موضوع را درک کنه.
قبل از اینکه برنامه نویس بشم، API به نظرم یک مدل آبجو میومد.
ولی حالا دیگه زیاد از این اصطلاح استفاده میکنم. اخیرا هم توی یک «بار» سفارشش دادم. اما جواب متصدی بار ۴۰۴ بود: «منبع یافت نشد.»
من آدمهای زیادی را ملاقات میکنم. که در حوزه تکنولوژی یا سایر فیلدها کار میکنند. که اکثرا اطلاعاتی مبهم و غیرصحیح در مورد این اصطلاح رایج دارند.
به صورت فنی API به معنی Application Programming Interface یا به فارسی «رابط برنامهنویسی کاربردی» است. بیشتر شرکتهای تکنولوژی برای استفاده مشتریان یا استفاده داخلی کارمندانشون، برای سرویسشون API درست کردند.
اما شما چطور API را به فارسی میتونید توضیح بدید؟ و آیا معنی آن فراتر از چیزی است که در بحث توسعه و کسب و کار استفاده میشه؟ اول بیاید کمی عقبتر بریم و ببینیم خود وِب چطور کار میکنه.
وقتی من در مورد وب فکر میکنم، یک شبکه بزرگ از سرورهای متصل به هم را تصور میکنم.
هر صفحهی وب یک جایی و روی یک سرور راه دور ذخیره شده. این سرور راه دور یک موجود عجیب و غریب نیست. اون فقط یک نوع کامپیوتر است که برای پاسخ دادن به درخواستهای شما بهینه سازی شده.
برای روشنتر شدن شما باید بگم که شما میتوانید یک سرور را روی لپتاپتان راه اندازی کنید و کل صفحات یک وبسایت اینترنتی را روی آن قرار دهید.
زمانی که شما www.virgool.io را داخل مرورگرتان وارد میکنید، درخواست شما به سرور راه دور ویرگول ارسال میشه. زمانی که مرورگر شما پاسخ درخواستش را گرفت، کدهای ویرگول را تفسیر میکنه و صفحه را به شما نشان میده.
برای مرورگر (که به عنوان کلاینت هم شناخته میشه)، سرور ویرگول یک API است. این به این معنی است که هر زمان شما صفحهای را باز میکنید، با API یک سرور راه دور ارتباط برقرار میکنید.
حواستون باشه که API همون سرور راه دور نیست. بلکه بخشی از اون سرور است که وظیفه دریافت درخواستها و جواب دادن بهشون را داره.
احتمالا شنیده باشید که شرکتها API خودشون را به عنوان یک محصول به مشتریان میفروشن. به عنوان مثال Weather Underground امکان دسترسی و استفاده از API خودش را به بقیه سرویسها میفروشه.
سناریو احتمالی: در سایت شما کاربر میتواند یک زمان جلسه را ست کند و شما میخواهید به مشتریتون این امکان را بدید که به صورت اتوماتیک با کلیک روی دکمه نهایی یک رویداد در Google Calendar خودش ایجاد کنه.
استفاده از API: ایده به این شکل خواهد بود که سرور سایت شما به صورت مستقیم با گوگل در ارتباط خواهد بود و درخواست ایجاد یک قرار ملاقات جدید را به آن اعلام میکند. پس از آن سرورِ شما پاسخ گوگل را دریافت میکند، آن را پردازش کرده و در مرورگر به شما نشان میدهد.
مثلا با یک پیغام با محتوای «قرار جلسه با موفقیت در تقویم شما ثبت شد»
در روش جایگزین، حتی مرورگر شما میتواند بدون نیاز به همکاری با سرور سایتتان به صورت مستقیم با سرور گوگل ارتباط برقرار کند.
چطور API سرویس Google Calendar میتونه با API بقیه سرورها متفاوت باشه؟
به صورت فنی، تفاوت در فرمت درخواستها و پاسخهایی است که میگیریم.
برای نمایش سایت، مرورگر در انتظار دریافت کدهای HTML سایت میماند و همزمان API سرویس Google Calendar دیتای مورد نیاز را ارسال میکند (معمولا در فرمت json).
اگر سرور وبسایت شما درخواست API را ایجاد کند، آن وقت سرور در نقش کلاینت قرار میگیرد (مثل مثال چند خط بالاتر که مرورگر زمانی که میخواست سایت را باز کند در نقش کلاینت قرار میگرفت).
از دید کاربران، API آنها را قادر میسازد که کاری که میخواهند را بدون ترک کردن وبسایت انجام دهند.
اکثر سایتهای مدرن به کمک API از چند سرویس دیگر کمک میگیرند. اکثر نیازهای سایت را میتوان به کمک یکی از این سرویسهای دیگر برطرف کرد. این روش (استفاده از API) بسیار سادهتر و قابل اطمینانتر است.
امروزه یک روش مرسوم برای تیمهای توسعه این است که کدهای برنامه و سایت را بین چندین سرور مختلف تقسیم کنند و از طریق API با همدیگر هماهنگ کنند که به آن مایکرو سرویس میگویند.
برای نتیجه گیری، وقتی یک سایت به مشتریان خود API میدهد یعنی اینکه آنها یک سری URLهای مختلف ساختهاند که شما با باز کردن هر کدام (صدا زدن) یک سری دیتای خام دریافت میکنید. این دیتاها فقط متن هستند.
شاید سوال بپرسید که آیا میشه این درخواستها را با مرورگر هم باز کرد؟ جواب شما بله است. همانطور که انتقال اطلاعات در بستر HTTP در قالب متن است.
به عنوان مثال شما میتوانید API سایت Github را مستقیما در مرورگرتان و حتی بدون نیاز به یک توکن باز کنید. در اینجا خروجی json که شما در زمان باز کردن API صفحه یک کاربر دریافت میکنید را میبینید:
https://api.github.com/users/petrgazarov
{ "login": "petrgazarov", "id": 5581195, "avatar_url": "https://avatars3.githubusercontent.com/u/5581195?v=4", "gravatar_id": "", "url": "https://api.github.com/users/petrgazarov", "html_url": "https://github.com/petrgazarov", "followers_url": "https://api.github.com/users/petrgazarov/followers", "following_url": "https://api.github.com/users/petrgazarov/following{/other_user}", "gists_url": "https://api.github.com/users/petrgazarov/gists{/gist_id}", "starred_url": "https://api.github.com/users/petrgazarov/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/petrgazarov/subscriptions", "organizations_url": "https://api.github.com/users/petrgazarov/orgs", "repos_url": "https://api.github.com/users/petrgazarov/repos", "events_url": "https://api.github.com/users/petrgazarov/events{/privacy}", "received_events_url": "https://api.github.com/users/petrgazarov/received_events", "type": "User", "site_admin": false, "name": "Petr Gazarov", "company": "@clauseHQ ", "blog": "https://twitter.com/PetrGazarov", "location": "NYC", "email": null, "hireable": null, "bio": null, "public_repos": 24, "public_gists": 1, "followers": 67, "following": 59, "created_at": "2013-10-01T00:33:23Z", "updated_at": "2018-05-02T04:12:41Z" }
مرورگر شما به راحتی میتواند آن را نشان دهد. شما میتوانید به راحتی از json های مشابه در کد خود استفاده کنید و از هر کدام از بخشهای این جواب در کد خود استفاده کنید.
برای جمع بندی نهایی چند مثال دیگر از کاربردهای API میزنیم.
اپلیکیشن میتواند انواع مختلفی باشد.
اساسا هر تکه از نرم افزار که میتواند از محیط اصلی جدا شده و در محیط دیگری کار کند میتوانید یک A از API باشد.
اگر از یک کتابخانه خارجی در تکه کد خود استفاده میکنید. بعد از اینکه آن را به کد خود اضافه کردید دیگر یک قسمت از برنامه شما خواهد شد. به عنوان یک تکه کد مجزا، این کتابخانه یک API دارد که آن را قادر میسازد تا با قسمتهای دیگر برنامه تعامل داشته باشد.