فست ای پی آی ⚡️ FastAPI

بیشتر از یکسال است که با FastAPI کار میکنم برای همین توی این پست قراره از تجربه ایی که با کار کردن باهاش داشتم براتون بگم. خب FastAPI یک فریم ورک پایتون هست که بر روی Starlette که یک فریم ورک یا ابزار ASGI است بنا شده یا نوشته شده. من از این به بعد در این نوشته بهش "فست" هم میگم. Fast API یک فریمورک متن باز تحت وب نوشته شده با پایتون می باشدخب اگر توسعه دهنده پایتون هستید حتما قبلا در مورد جنگو یا فریم ورک فلسک شدید و یا شاید حتی کار هم کردید. خیلی فریم ورک ها با زبان پایتون نوشته شده یکی دیگه از این فریم ورک ها Starlette است که توسعه دهندگانش ASGI framework/toolkit مینامندش. خیلی فریم ورک سبک و خوبیه اما متاسفانه کار کردن باهاش کمی سخته و باید کلی ابزار براش ساخته میشد و این ابزارهای هم غالبا با هم ممکن بود هماهنگ نباشند. یک آقایی با سیبیل های تاب دار به اسم سباستین رمیرز از کشور کلمبیا که بعدش مهاجرت هم کردند به آلمان اومد آنچه را که خودش استفاده کرده بود و کارش را آسان کرده بود با دیگران به اشتراک گذاشت و حاصلش شد کدهای اوپن سورس فریم ورک جدید به نام FastAPI که امروز طرفداران زیادی پیدا کرده و اخیرا هم تعداد ستاره های ریپوزیتوری گیت هابش از فلسک بیشتر شده است. یه مصاحبه هم سکوئیا باهاش داره که شرح داستان زندگیش از زبان خودش هست. سباستین رمیرز سعی کرد این ابزارها را به هم ربط بده و سعی کرد از بهترین ترکیب ها استفاده کنه و به عبارتی همه چیزهای خوب رو کنار هم جمع کنه مثلا اومد از pydantic یا استاندارهای OpenAPI و یا JSON Schema استفاده کرد حتی اومد بعدش تمپلیت اینجین محبوب Jinja هم توی داکیومنتش قرار داد و توضیح داد چطوری به جای خروجی JSON خروجی HTML تولید بکنید. حتی تو بخش سکوریتی کلاس OAuth2PasswordBearer رو ایجاد کرد که به راحتی بشه توکن ها را بدون فراخوانی میدلورهای روی Starlette بگیریم در واقع همه چیز رو خیلی ساده تر کرد. و اگر بخوام کلی تر بگم Starlette را کرد فوندانسیون و قسمت های مختلف رو با بهترین ابزارها روی آن بنا کرد و ما امروز به این میگیم فست ای پی آی . 🚀 فست ای پی آی برای چه کاری میتونه استفاده بشه ؟شما با فست میتونید به راحتی REST API بسازید که در واقع نوعی از WebAPI است. و بوسیله RESTAPI ها میتونی بک اند سرویس ها و سایتها را بسازی البته میتونی با استفاده از تمپلیت اینجین خود وب سایت رو هم بسازی. اگر RESTAPI داشته باشی میتونی به هر فرانتی متصلش کنی اعم از اپلیکیشن موبایل یا اپلیکشنهای وب تک صفحه ایی مثلا با React یا VUE.js یا ... حتی میتونی به یک سرویس دیگه متصلش کنید و یا حتی باهاش مایکروسرویس درست کنید. ✅ مزایای فست ای پی آی چیست ؟ به نظرم مهمترین مذیتش سرعت بالا است چون روی استارلت بنا شده که داره از asyncio استفاده میکنه. از داکیومنتش راضی هستم خیلی بهتر از هر کتابی توضیح داده و کاملا میشه بهش اعتماد کرد. شاید قبلا میگفتند پشتیبانی خوبی نداره اما الان خیلی بهتر شده مخصوصا اینکه خیلی ها اخیرا به سمت فست اومدند و ما هم یک گروه تلگرامی به نام فست ای پی آی فارسی راه انداختیم که میتونید عضوش بشید و مشکلات خودتون رو مطرح کنید (البته با رعایت قوانین گروه 😬 ). ❌ معایب فست ای پی آی چیست ؟ در صورت عدم پیاده سازی معماری صحیح احتمال اینکه کدتون زود اسپاگی بشه و احساس کنی همه چیز تو هم رفته زیاد است مخصوصا اگر OOP هم خوب رعایت نکنی یا اصول برنامه نویسی فانکشنال رو صحیح اعمال نکنی.برخی میگند راهنمایی و آموزش کمتری براش موجوده که منم این حرف رو قبول دارم ولی برای من اینجوری نبوده چون خیلی بستگی به تجربیبات برنامه نویسی یک فرد در گذشته داره و این که چقدر با مفاهیم نرم افزار از قبل آشناست. در کل فست چیزی نیست که یه مبتدی بدون مربی و منتور روش برنامه نویسی بکنه و بهتره که روی زبان پایتون تسلط خوبی داشته باشی وگرنه تو چاله هایی میوفتی که خروج از اونها شما رو به چاه هدایت میکنه. خود فست ای پی آی چیزه خاصی نداره وقتی که پروژه بزرگ میشه و از ابزارهای زیادی استفاده میکنید در صورت عدم پیاده سازی ساختار درست دچار مشکل میشی حتما این مقاله رو بخونید خیلی مفید هست . 🔖 تجارب شخصی در استفاده سعی کردم پایتون ذن را مبنا قرار بدم و با این وجود خیلی کدهای پیچیده نزدم . در فست معماری حرف اول را میزند چون برای خلاف فریم ورک هایی مثل جنگو که نظر گرا هستند فست unopinionated هست یعنی نظر سازنده برای پیاده سازی تحمیل نشده است اما پیشنهاداتی داده شده که اگر در ابتدای راه هستید بهتره که بر اساس اونها جلو بروید.معماری تمیز را فراموش نکنید. به KISS و DRY و YAGNI احترام بگذارید. من توی اولین پروژه ها خیلی زوایای معماری را تغییر دادم تا بهترین معماری برای کار خودم رو پیدا کنم چیزی که خودم باهاش راحتتر باشم توی این مسیر توضیحات آقای Leonardo Giordani خیلی کمک‌م کرد مخصوصا این ویدیو که تو EuroPython 2022 بوده و تقریبا از همه جدیدتره. سعی نکنید همه چیز را از اول بسازید و البته سعی کنید اول از همون ابزارهایی که معرفی شده و جواب داده شده استفاده کنید و البته کدی رو که نمیدونید چکار میکنه اصلا وارد کد بیس نکنید مشکلات دیگه ایی بعدا بروز میکنه که دیباگ کردن اونها سخته (این توصیه تقریبا کلی بود و فقط مخصوص این فریم ورک نیست)کد ببینید و کد ببینید و زیاد هم ببینید چون بهتون خیلی دید بهتری توی پیاده سازی میده و حتما هم کدهاتون رو بدید کس دیگه ایی بازبینی (review) کنه . فکر میکنم اکثر چیزا رو گفتم ولی ممکنه خیلی از سوالات شما هنوز پاسخ داده نشده باشه پس حتما جستجو کنید و یا اگر شما هم تجربه دیگری دارید حتما برام بنویسید.