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

درود دوستان امیدوارم حال دلتون خوب باشه.یه مدتی نبودم ولی با دست پر برگشتم :)یه مسئله ای که برای من سخت جا افتاد، همین API بود. گفتم شاید بتونم برای شما تفهیمش کنم که کار شما آسون بشه :)Application Programming Interfaceاول از همه سوال پیش میاد API چی هست اصلا!! جوابش رو با سوال میدم؛ شما فرض کن یه برنامه نوشتی که میخوای قیمت لحظه ای ارز یا بیتکوین رو در اختیار مخاطبین خودت بذاری. خودت میری یه برنامه مینویسی براش؟منطقا نه! خب پس میری از یه سایتی که کار اصلیش اینه و دارای API هست، اطلاعات مد نظر رو میگیری و میاری تو برنامه یا سایت خودت.خب پس تا الان تعریف API شد اینکه شما با برنامه ای که نوشتی، در اصل داری با برنامه شخص دیگری هم ارتباط میگیری(مثل همین ای پی آی بیتکوین یا ارز ها)یعنی دقیقا User میاد تو سایت شما و درخواست میده که بگید الان قیمت بیتکوین چه مقداره و شما مستقیما میری پیش اون سایت که این اطلاعات رو داره و ازش میپرسید، قیمت بیتکوین چنده‌؟جواب رو به شما میده و نهایتا شما اطلاعات رو میدید به کاربر؛ ساده ش این شد که نقش میانجی(واسطه) رو دارید.بخوایم فنی تر بگیم اتفاقی که میوفته اینه:Client:Send a "GET" HTTP RequestServer:"Process" HTTP RequestSend a Responseیعنی چی حالا! خب وقتی Client مرورگر رو بازمیکنه وارد سایت شما میشه در اصل داره یک درخواست HTTP با متد GET میفرسته به سرور شما.مثلا میگه صفحه محصولات رو میخوام، سرور(Server) این درخواست رو چک میکنه و اگر اوکی باشه در جواب چیزی که میخواد رو به عنوان پاسخ (Response) میده به مرورگر که در این مثال میشه همون صفحه محصولات.خب ولی در این شرایط ما گفتیم خودمون یه سایت داریم که میره اطلاعات مد نظر رو از یه سایت دومی میگیرهدر این صورت پیچیدگی یه مرحله بیشتره! یعنی علاوه بر درخواستی که مخاطب شما به سرور داد، شما هم باید یه درخواست بدید به سایت اصلی و اطلاعات رو بگیرید و نهایتا اطلاعات رو بدید به کاربر نهایی خودتون.بازم ساده تر بگیم:اصلا چرا از API استفاده کنیم؟الان گرسنه شدیم! میتونیم بریم از مغازه هر خرت و پرتی نیاز داریم، بخریم بیاریم خونه و شروع کنیم غذا درست کنیم! خب کار سختیه دیگه مگه نه ؟یا میتونیم بریم رستوران، که یه آشپز حرفه ای داره و هر مواد اولیه ای که نیاز هست بخریم هم، خودش داره!ولی آشپز نمیذاره بریم تو آشپزخونه و به همه چیزش دسترسی داشته باشیم(حالا به دلایل امنیتی یا هرچیزی) مثل باب اسفنجی و آقای خرچنگ که نمیذارن دستور پخت همبرگر خرچنگی لو بره :)))اینجاست که گارسون یا پیشخدمت (Waiter/Waitress) به دادمون میرسه.بیایید فرض کنیم رفتیم یک رستوران؛ نشستیم منتظر گارسون تا بیاد و سفارش ما رو بگیرهاینجا ما مشتری هستیم یعنی دقیقا همون Client/User و مصرف کنندهآشپز دقیقا نقش سرور رو داره، درخواستی از طرف مشتری براش میاد از طریق گارسون هم به دستش میرسهگارسون API هست! چرا‌؟ چون دقیقا نقش واسطه و میانجی رو داره بین مشتری و آشپزیعنی میاد سفارش رو از ما میگیره، تحویل میده به آشپز! آشپز هم طبق درخواست مشتری، غذایی که درخواست کرده رو درست میکنه و میده به گارسون، گارسون هم میاره تحویل مشتری میده.فکر کنم ساده تر از این نمیشه گفت :)))یه مثال ملموس از ای پی آي هم اینه که تو سایت ها میخوای ثبت نام کنی، میتونی از طریق Facebook- Gmail و ... سریعا ثبت نام کنی.HTTP Request Methodبرای اینکه بتونید درک بهتری داشته باشید، نیازه که یه مقداری با پروتوکل های وب آشنا بشیدمهم ترینش همین HTTP هست! همونطور که بالاتر توضیح دادم هر کاری که میکنید به عنوان یک کسی که داره تو وب میگرده، دائما دارید درخواست های HTTP میفرستید به سایت ها.اچ تی تی پی (HTTP) چندین متد داره، پرکاربرد هاشو میگم براتون:GETPOSTPUTPATCHDELETEمتد 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رابط های برنامه نویسی کاربردی مدل های مختلفی هم دارن مثل:SOAPRESTRPC --> 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 رو مطرح کنم و با پایتون روش عملی کار کنیم :)