وقتی با دنیای توسعه ی وب آشنا میشی، بعد از چند وقت متوجه این میشی که ساخت وبسایت فقط یک بخش از ماجراست. در حال حاضر بیشتر اپلیکیشن ها از اپ موبایل گرفته تا پنل های مدیریت و سیستم های هوش مصنوعی ، نیاز دارن اطلاعاتشون رو از سرور بگیرن.
تصور کن یک سایت معمولی با html , css ساختی همه چی خوبه تا اینکه تصمیم میگیری برای سایتت اپلیکیشن موبایل بسازی ، یا اطلاعات رو بصورت json به یک سایت vue یا react بفرستی ، یک پنل مدیریتی مستقل بسازی یا بین چند سیستم مختلف داده جابجا کنی. اینجاست که یچیزی رو کشف میکنی به اسم Api. و اگر جنگو کار کرده باشی میرسی به فریمورک قدرتمند Django Rest.
اگر این اسم رو اولین بار هست که میشنوی شاید فکر کنی این یک چیز کاملا جدا از جنگو باشه یا استفاده ازش سخت باشه ، اما دقیقا برعکسه ، جنگو رست اومده تا ساخت Api رو از یک کار پیچیده تبدیل به یک کار امن ، پیشرفته و سریع کنه.
توی این مقاله میخایم بیشتر راجب این فریمورک آشنا بشیم و به این سوالات جواب بدیم : جنگو رست چیه؟ چه قابلیت ها و کاربردهایی داره؟
Api چیست؟
قبل از اینکه بخوایم با جنگو رست فریمورک آشنا بشیم باید بدونیم که Api چیه؟
Api یا Application Programming Interface یک رابط کاربری هست که اجازه میده دو برنامه مختلف بدون اینکه از کار های داخلی هم خبر داشته باشن با هم ارتباط بگیرن.
به نقل از ویکی پدیا ، Api واسط برنامه نویسی نرم افزار کاربردی یا ای پی ای (Application Programming Interface) که به صورت خلاصه به آن واسط بین یک کتابخانه یا سیستم عامل و برنامه هایی است که از آن تقاضای سرویس میکنند.
REST چیست؟
REST مخفف Representational State Transfer , مجموعه قوانینی برای طراحی Api است.
استفاده از افعال استاندارد
REST میگه بیا این ارتباط با سرور رو استاندارد و ساده نگه داریم و از HTTP استفاده کنیم. برخی متد های HTTP : GET , PUT , POST , DELETE
آدرس منحصر به فرد
در REST هر داده ای یک منبع حساب میشه، و یک آدرس url مشخص داره.
/users/ : لیست کاربران
/users/1234 : فقط کاربر شماره 1234
/article/45/ : فقط مقاله 45
Stateless : مهم ترین قانون
یعنی سرور هیچ اطلاعاتی از درخواست های قبلی شما نگه نداره و هر درخواست کامل و مستقل باشه. مثلا : درخواست ۱ : من علی هستم ، رمز عبورم ۱۲۳۴ ، ایا مدیر هستم؟
پاسخ سرور : بله شما مدیر هستید ( بلافاصله شما را فراموش میکند)
درخواست ۲ :(چند ثانیه بعد) لطفا لیست کاربران را من بده
پاسخ سرور : شما اجازه دسترسی ندارید!
شما باید در درخواست دوم دوباره خودتان را کامل معرفی میکردید: من علی هستم رمز عبورم ۱۲۳۴، لطفا لیست کاربران را به من بده
چرا این اتفاق میفته؟ چون سرور لازم نیست چیزی رو بخاطر بسپره و اگه سرور شلوغ شد میشه سرور جدید اضافه کرد بدون اینکه اطلاعات قبلی پاک بشه .
پس REST یک معماری ساده و استاندارد هست که میگه : از افعال استاندارد استفاده کن، برای هر چیز یک آدرس داشته باش و چیزی از درخواست های قبلی رو به خاطر نسپار(stateless)
Api هایی که از این قوانین پیروی میکنند RESTFUL هستند.
به نقل از ویکی پدیا ،REST سبک معماری نرمافزاری است که مجموعه ای از محدودیتها را برای استفاده در ایجاد خدمات وب تعریف میکند. سرویسهای وب که مطابق با سبک معماری REST، به نام خدمات وب RESTful هستند، قابلیت همکاری بین سیستمهای رایانه ای در اینترنت را فراهم میکنند. یک وب سرویس RESTful به سیستمهای متقاضی اجازه میدهد تا با استفاده از یک مجموعه یکسان و از پیش تعریف شده از عملیات بدون حالت، به بازنماییهای متنی از منابع وب دسترسی پیدا نموده و آنها را دستکاری کنند. انواع دیگر خدمات وب، مانند سرویسهای وب SOAP، مجموعه عملیات دلخواه خود را در معرض نمایش قرار میدهند. منبع
جنگو رست فریمورک (DRF) چیست؟
جنگو رست ابزاری کامل و قدرتمنده که روی جنگو نصب میشه و اجازه میده Api های قدرتمند و حرفه ای با کمترین کد بنویسیم.
جنگو رست کارش اینه که داده های اپلیکیشن یا همون مدل های دیتابیس رو بگیره و به فرمت json تبدیل کنه تا هر اپلیکیشن دیگه ای بتونه ازش استفاده کنه.
جنگو رست چگونه کار میکند؟ (معماری جنگو رست)
توی این مقاله با خود فریمورک جنگو و معماریش آشنا شدیم ، دیدیم که معماری جنگو MVT هست، معماری جنگو رست دقیقا همینجوری عمل میکنه اما یچیز جدید به اسم Serializers این وسط اضافه میکنه.
سریالایزر چیه؟
وقتی میخایم از از Api هامون در اپلیکیشن دیگه ای مثلا اپ موبایل استفاده کنیم، آبجکت پایتون نمیتونه برای اپلیکیشن موبایل قابل فهم باشه اون فقط متن ساده ی json میفهمه.
سریالایزر نقش مترجم رو ایجاد میکنه و دو تا کار انجام میده:
۱.سریالایز کردن (serialization) : وقتی داده از سرور به اپ میره: ما بهش یک آبجکت پیچیده ی پایتون میدیم مثلا اطلاعات کامل یک کاربر از دیتابیس رو میدیم و سریالایزر اون رو ترجمه میکنه و به یک فرمت متنی ساده و قابل فهم json تبدیل میکنه.
۲.اعتبار سنجی سریالازر (وقتی داده از اپ به سرور میاد) : مثلا در اپ موبایل بخش ثبت نام کاربران رو داریم ، وقتی کاربر اطلاعات ثبت نام رو میفرسته ، سریالایزر اول اون رو چک میکنه (validation) و میبینه آیا ایمیلی که کاربر فرستاده معتبره؟ آیا پسوردش به اندازه کافی قوی هست ؟ آیا فیلد های اجباری پر شدن؟
اگر همه چیز درست بود اون متن json ترجمه معکوس میشه و به یک ابجکت پایتون تمیز تبدیل میشه تا جنگو بتونه اون رو توی دیتابیس ذخیره کنه.
چرا از Django REST Framework استفاده کنیم؟
سوال مهمی که وجود داره اینه مگه با خود جنگو نمیشه json برگردوند؟ قطعا با جنگو میشه این کار رو انجام داد اما باید کلی کد تکراری نوشت ، امنیت رو هم خودت باید مدیریت کنی و اعتبارسنجی ها هم خودت انجام بدی ، در حالی که جنگو رست میاد خودش این کار هارو به صورت بسته بندی شده انجام میده، دلایل مهمی که باید از جنگو رست استفاده کنیم :
۱.سریالایزرهای قدرتمند : همونطور که گفتیم با این بخش خیلی راحت میتونیم فیلد هارو اعتبارسنجی کنیم و تعیین کنیم کدوم فیلد ها از مدل دیتابیس چطور اعتبارسنجی بشن و چطور نمایش داده بشن.
۲.احراز هویت و مدیریت دسترسی (Authentication and permissions) : جنگو رست سیستم احراز هویت خودش رو داره که خیلی راحت میتونی به پروژت اضافه کنی ، همچنین میتونی سیستم دسترسی (permission) دقیقی تعریف کنی. مثلا : اگر یک سایت وبلاگی داشته باشی که توش مقاله میزاری ، تعیین کنی فقط کاربران بتونن مقالات رو ببینن ، و برای ساخت مقاله فقط کاربران لاگین شده بتونن این کار رو بکنن و فقط نویسنده خود مقاله بتونه مقاله خودش رو ویرایش کنه.
۳.viewsets و routers : بجای این که بیایم برای لیست مقالات و جزئیات مقاله و آپدیت یا حذف مقاله ویوهای جداگانه بنویسیم فقط یدونه viewset تعریف میکنیم . این برمیگره به همون اصل خودت رو تکرار نکن جنگو.
و در نهایت یک router میاد و به صورت اتومات تمام اون ۵ ادرس url استاندارد رو برات میسازه
۴.صفحه بندی (pagination) و (throttling): اگه ما یک میلیون مقاله داشته باشیم ، api نباید تمام مقاله های مارو برگردونه این کار بار سنگینی رو روی سرور ما میندازه ، برای همین از pagination استفاده میکنیم و درخواست هارو صفحه بندی میکنیم.
همچنین میتونیم throttling بزاریم تا یه کاربر نتونه در دقیقه هزار بار به Api درخواست بفرسته و سرور رو از کار بندازه.
مقایسه جنگو رست با دیگر فریمورک های Api
جنگو رست در برابر FastApi : بزرگترین رقیب جنگو رست قطعا FastApi هست که یک فریمورک مدرن ، فوق العاده سریع و متمرکز فقط بر ساخت Api هست و بر پایه قابلیت های جدید پایتون مثل Async.
کی بریم سراغ Drf : اگر یک پروژه جنگو از قبل داریم ، اکر نیاز به یک ادمین پنل داریم ، اگر به orm قدرتمند و اکوسیستم کامل مثل احراز هویت جنگو نیاز داریم ، انتخاب مناسبی برای ما میتونه باشه.
کی بریم سراغ FastApi : اگر میخایم میکروسرویس بسازیم و سرعت و عملکرد برامون اولیت داره FastApi انتخاب مناسبی هست.
جنگو رست و Node.js : نود جی اس بیشتر برای کار های ریل تایم و عملیات ورودی و خروجی زیاد عالیه ، اما جنگو رست به خاطر سینتکس تمیز پایتون و هماهنگی عمیق با orm و دیتابیس انتخاب مناسبی برای Api های داده محور میتونه باشه.
جمع بندی
جنگو به تنهایی خودش برای ساخت وبسایت عالیه، اما با توجه به نیاز امروز که اپلیکیشن های موبایل ، فرانت های جدا مثل React و میکروسرویس ها حرف اول رو میزنن ما به یک فریمورک قدرتمند نیاز داریم.
جنگو رست قطعا یک انتخاب عالی میتونه برای ما باشه چون دقیقا مثل جنگو یک ابزار همه چیز تمام هست و به ما اجازه میده روی منطق کسب و کارمون تمرکز کنیم ، نه درگیری با پروتکل های پیچیده و کد های تکراری.
نظرات کاربران (0)