رابط برنامه نویسی کاربردی یا API (Application Programming Interface)

درود دوستان امیدوارم حال دلتون خوب باشه.

یه مدتی نبودم ولی با دست پر برگشتم :)

یه مسئله ای که برای من سخت جا افتاد، همین API بود. گفتم شاید بتونم برای شما تفهیمش کنم که کار شما آسون بشه :)

Application Programming Interface
Application Programming Interface


اول از همه سوال پیش میاد API چی هست اصلا!! جوابش رو با سوال میدم؛ شما فرض کن یه برنامه نوشتی که میخوای قیمت لحظه ای ارز یا بیتکوین رو در اختیار مخاطبین خودت بذاری. خودت میری یه برنامه مینویسی براش؟

منطقا نه! خب پس میری از یه سایتی که کار اصلیش اینه و دارای API هست، اطلاعات مد نظر رو میگیری و میاری تو برنامه یا سایت خودت.

خب پس تا الان تعریف API شد اینکه شما با برنامه ای که نوشتی، در اصل داری با برنامه شخص دیگری هم ارتباط میگیری(مثل همین ای پی آی بیتکوین یا ارز ها)

یعنی دقیقا User میاد تو سایت شما و درخواست میده که بگید الان قیمت بیتکوین چه مقداره و شما مستقیما میری پیش اون سایت که این اطلاعات رو داره و ازش میپرسید، قیمت بیتکوین چنده‌؟

جواب رو به شما میده و نهایتا شما اطلاعات رو میدید به کاربر؛ ساده ش این شد که نقش میانجی(واسطه) رو دارید.

بخوایم فنی تر بگیم اتفاقی که میوفته اینه:

Client:

Send a "GET" HTTP Request

Server:

"Process" HTTP Request
Send a Response


یعنی چی حالا! خب وقتی Client مرورگر رو بازمیکنه وارد سایت شما میشه در اصل داره یک درخواست HTTP با متد GET میفرسته به سرور شما.

مثلا میگه صفحه محصولات رو میخوام، سرور(Server) این درخواست رو چک میکنه و اگر اوکی باشه در جواب چیزی که میخواد رو به عنوان پاسخ (Response) میده به مرورگر که در این مثال میشه همون صفحه محصولات.

خب ولی در این شرایط ما گفتیم خودمون یه سایت داریم که میره اطلاعات مد نظر رو از یه سایت دومی میگیره

در این صورت پیچیدگی یه مرحله بیشتره! یعنی علاوه بر درخواستی که مخاطب شما به سرور داد، شما هم باید یه درخواست بدید به سایت اصلی و اطلاعات رو بگیرید و نهایتا اطلاعات رو بدید به کاربر نهایی خودتون.

بازم ساده تر بگیم:

اصلا چرا از API استفاده کنیم؟

الان گرسنه شدیم! میتونیم بریم از مغازه هر خرت و پرتی نیاز داریم، بخریم بیاریم خونه و شروع کنیم غذا درست کنیم! خب کار سختیه دیگه مگه نه ؟

یا میتونیم بریم رستوران، که یه آشپز حرفه ای داره و هر مواد اولیه ای که نیاز هست بخریم هم، خودش داره!

ولی آشپز نمیذاره بریم تو آشپزخونه و به همه چیزش دسترسی داشته باشیم(حالا به دلایل امنیتی یا هرچیزی) مثل باب اسفنجی و آقای خرچنگ که نمیذارن دستور پخت همبرگر خرچنگی لو بره :)))

اینجاست که گارسون یا پیشخدمت (Waiter/Waitress) به دادمون میرسه.

بیایید فرض کنیم رفتیم یک رستوران؛ نشستیم منتظر گارسون تا بیاد و سفارش ما رو بگیره

اینجا ما مشتری هستیم یعنی دقیقا همون Client/User و مصرف کننده

آشپز دقیقا نقش سرور رو داره، درخواستی از طرف مشتری براش میاد از طریق گارسون هم به دستش میرسه

گارسون API هست! چرا‌؟ چون دقیقا نقش واسطه و میانجی رو داره بین مشتری و آشپز

یعنی میاد سفارش رو از ما میگیره، تحویل میده به آشپز! آشپز هم طبق درخواست مشتری، غذایی که درخواست کرده رو درست میکنه و میده به گارسون، گارسون هم میاره تحویل مشتری میده.

فکر کنم ساده تر از این نمیشه گفت :)))

یه مثال ملموس از ای پی آي هم اینه که تو سایت ها میخوای ثبت نام کنی، میتونی از طریق Facebook- Gmail و ... سریعا ثبت نام کنی.


HTTP Request Method

برای اینکه بتونید درک بهتری داشته باشید، نیازه که یه مقداری با پروتوکل های وب آشنا بشید

مهم ترینش همین HTTP هست! همونطور که بالاتر توضیح دادم هر کاری که میکنید به عنوان یک کسی که داره تو وب میگرده، دائما دارید درخواست های HTTP میفرستید به سایت ها.

اچ تی تی پی (HTTP) چندین متد داره، پرکاربرد هاشو میگم براتون:

  • GET
  • POST
  • PUT
  • PATCH
  • DELETE

متد GET

خب اولی GET هست. درخواست برای گرفتن چیزی هست از اسمش هم مشخصه

یعنی شما اومدی سایت ویرگول و رو این پست من کلیک کردید ( یک ریکوئست HTTP با متد GET به سرور سایت ویرگول فرستادید )

متد POST

بعدی POST هست. اینم اسمش روش هست‌؛ وقتی که شما یک پست مینویسید و انتشار میدید یا وقتی در سایتی فرمی رو پر میکنید، وقتی که گزینه ارسال، ثبت یا هرچیز مشابه رو میزنید، با متد POST درخواستی به سرور میفرستید! ولی ایندفعه اطلاعاتی از سرور نمیخواید بلکه اطلاعاتی بهش دادید تا ثبت بشه.

اطلاعات اگر با متد GET ارسال بشه، در اصل تو بخش URL سایت به صورت Query-String فرستاده میشه که میتونیم واضح ببینیمش.

یعنی میگیم:

https://www.google.com/search?q=api

بخش بالا از علامت سوال به بعد یک کوئری استرینگ هست که با متد گت فرستاده شده

الان گفتیم گوگل جان برو بخش سرچ کردن و API رو پیدا کن برامون

برا همین وقتی اطلاعات مهمی داریم میدیم نباید از متد GET استفاده کنیم! بجاش از POST استفاده میکنیم و اطلاعات دیگه تو URL رد و بدل نمیشه، بجاش تو بدنه HTTP Request ذخیره میشه که امن هست.

متد PUT

در اصل همون POST هست، اما برای موقعی که اطلاعات وجود داره و میخواد از اول کاملا ویرایش بشه

فرض کنید یک اطلاعاتی وارد کردیم در یک سایتی، حالا میخوایم عوضشون کنیم

متد PATCH

این هم مثل PUT اما فرق اصلیش در اینه که برای Partial-Update استفاده میشه!

یعنی دیگه نیاز نیست تمام اطلاعات وارد شده از قبل رو آپدیت کنیم، فقط میخوایم یه بخشی از اطلاعات قبلی رو عوض کنیم.

متد DELETE

از اسم این مشخصه صرفا درخواستی هست برای حذف کردن اطلاعاتی که قبلا وجود داشته.


انواع API

رابط های برنامه نویسی کاربردی مدل های مختلفی هم دارن مثل:

  • SOAP
  • REST
  • RPC --> gRPC

هرکدوم اینا میتونن یه پست مجزا باشن، پس واقعا از حوصله این بخش کارمون خارجه

احتمالا بعدتر برای هرکدوم یه پست بذارم :)

ولی الان در این حد بدونید که SOAP و RPC پروتوکل هستند ولی REST یک معماری.

هرکدوم اینها روشی برای نوشتن و ساختن API هستند! قطعا هرکدوم مزیت ها و کاستی هایی دارن!

وقتی با API اطلاعاتی رد و بدل میشه بین مخاطب و سرور، در یک قالب اطلاعاتی باید داده قرار بگیره دیگه

اگه با JSON یا XML و ... آشنا باشید کارمون آسون تره!

معمولا SOAP برای کارهایی که امنیت حیاتیه زیاد استفاده میشه، مثل کار ها بانکی

و سازگار ترین قالب جا به جایی اطلاعاتش هم (Data Interchange) ایکس ام ال (XML) هست.

اصولا معماری REST پرکاربرد ترینه تو وب برای API ها. سازگار ترین (Data Interchange) هم براش JSON

هست که یک دیتا استراکچر هست که از زبان برنامه نویسی جاوا اسکریپت بوجود اومده.

بعدی gRPC یعنی (Google Remote Procedure Call) هست که برای ساختن API استفاده میشه و سازگارترین قالب جا به جایی اطلاعاتش (Data Interchange) براش چیزیه به اسم Protobuff یا اسم

کاملش Protocol buffer.


خب همینجا مبحث رو تموم میکنیم

امیدوارم مفید واقع بشه براتون؛ خوشحال میشم اگه پیشنهادی داشتید بگید و سوالاتتون رو بپرسید

سعی میکنم تو پست های آتی این مباحث انواع API رو مطرح کنم و با پایتون روش عملی کار کنیم :)