مقدمه

در این فصل از دوره با استفاده از جنگو و فریمورک REST چند تا web API میسازیم که رفته رفته به پیچیدگی شون اضافه میشه. جنگو یک فریمورک محبوب بر پایه زبان پایتون هستش که خودش به قسمت های چالش برانگیز در ایجاد وبسایتهای جدید رسیدگی میکنه که از جمله این قسمت ها میشه به: احراز هویت، اتصال به دیتابیس، منطق کاری، امنیت و ... اشاره کرد. همچنین پکیج های شخص ثالث(third-party packages) زیادی برای وجود دارند که قابلیت های دیگری رو به جنگو اضافه میکنن و در این بین، فریمورک REST جنگو یکی از مهمترین ها هستش و این امکان رو برای توسعه دهنده به وجود میاره که بتونه هر پروژه جنگویی رو به یک web API قدرتمند تبدیل کنه.
کمپانی های بزرگی از قبیل: Instagram, Mozilla و Pinterest از جنگو و فریمورک REST جنگو استفاده میکنن اما این دلیل نمیشه که افراد مبتدی نتونن باهاشون کار کنن چون رویکرد " batteries-included" جنگو، بخش ععمده ای از پیچیدگی های کار رو پوشش میده و امکان توسعه ایمن و سریع رو فراهم میکنه.
در انتهای این فصل از دوره شما قادر خواهید بود که web API هایی رو با کمترین میزان کد و در کمترین زمان ممکن ایجاد کنید.

چرا API ها

رابط برنامه نویسی اَپلیکیشن یا API(Application Programming Interface) ، روشی برای شرح چگونگی ارتباط مستقیم دو کامپیوتر با همدیگه هستش. معماری غالب web API های حاضر در شبکه جهانی وب با عنوان REST(REpresentaional State Transfer) شناخته میشه که در ادامه فصل پوشش میدیم.
در سال 2005، وقتیکه جنگو برای اولین بار عرضه شد، اکثر وبسایتها از یک پایگاه کد یکپارچه و بزرگ تشکیل شده بودند. بطوریکه: Model ها و view ها و url های بک-اِند با template های فرانت-اِند ترکیب شده بودن تا لایه نمایشی صفحات وب رو کنترل کنند.
اما امروزه رویکرد رایجی که اکثر وبسایتها اتخاذ میکنن رویکرد " API-first " هستش که رسما بک-اِند رو از فرانت-اِند جدا میکنن. اینطوری وبسایتها میتونن از یک فریمورک اختصاصی جاوااسکریپت مثل React یا Vue برای فرانت-اِند استفاده کنن؛ این دو فریمورک در سالهای 2013 و 2014 عرضه شدند.
در حالیکه با گذر زمان فریمورک های فرانت-اِند نهایتا جایگزین میشن، اما API بک-اِند سرجاش میمونه و نیاز به بازنویسی خاصی پیدا نمیکنه. یکی دیگه از مزیت هاش اینه که یک API به تنهایی میتونه چندین فرانت-اِند که با زبانها و فریمورک های متفاوتی نوشته شدند رو پشتیبانی کنه؛ برای مثال از JavaScript برای فرانت-اِند های وب و از Java برای اَپلیکیشن های اَندروید و از Swift برای اَپلیکیشن های iOS استفاده میشه که یک وبسایت جنگو با یک رویکرد یکپارچه سنتی نمیتونه از این فرانت-اِند های مختلف پشتیبانی کنه، اما در حضور یک API داخلی هر سه مورد میتونن با دیتابیس بک-اِند ارتباط برقرار کنن.
یکی دیگه از مزیت های رویکرد " API-first " اینه که هم میشه بصورت داخلی و هم بصورت خارجی ازش استفاده کرد، به نحوی که وبسایتهای در حال رشد میتونن با ایجاد یک API خارجی این امکان رو برای پکیج های شخص ثالث بوجود بیارند تا بتونن اَپلیکیشن های اَندروید و iOS خودشون رو بسازند.
از معایب اصلی رویکرد " API-first " در مقایسه با یک اَپلیکیشن سنتی جنگو اینه که نیازمند پیکربندی بیشتری هستش. البته در این فصل از دوره میبینید که به لطف فریمورک REST جنگو، قسمت عمده پیچیدگی های پیکربندی حذف شدن و بهشون رسیدگی شده.

Django REST Framework

هزاران اَپلیکیشن شخص ثالث وجود دارند که قابلیت های دیگه ای رو به جنگو اضافه میکنن و شما میتونید لیست کاملی ازشون رو در Django Packages مشاهده کنید. اگر چه در بین همه ی این پکیج ها، فریمورک REST جنگو بطور قطع خفن ترینشون هستش. چون ویژگی های زیادی داره، قابل سفارشی سازیه، تست شده و بشدت مستندات کاملی داره. همچنین این فریمورک تقلید هدفمندی از بسیاری از رویه های رایج جنگو هستش که منجر به تسریع روند یادگیریش میشه.

چرا این فصل رو در دوره ی یادگیری جنگو داریم؟

این فصل از دوره به دلیل فقدان منابع آموزشی مناسب برای افرادی که به تازگی با فریمورکِ REST جنگو آشنا شدن، تدارک دیده شده. اکثر منابع آموزشی فرض رو بر این میگذارن که همه ی مخاطب هاشون همه چیز رو درباره ی API, HTTP و ... میدونن و دیگه تمرکز خودشون رو روی اصل ماجرا میذارن و همین امر باعث میشه تا افراد مبتدی نتونن به درستی با مطالب ارتباط برقرار کنن که در نتیجه نقاط ابهامی در آینده خواهند داشت. ما در این فصل مطمئن میشیم که همچین چیزی پیش نیاد.
بخش دوم این فصل از دوره مقدمه ای برای API ها و پروتکل HTTP هستش که به نوعی زیر بنای کلی کار ماست. در بخش های سوم و چهام با ایجاد یک وب سایت کتابخانه ای، به بررسی و مرور تفاوت های جنگو و فریمورک REST جنگو میپردازیم. در بخش پنجم یک web API با عنوان " Todo " ایجاد میکنیم و به تشریح endpoint ها به همراه لیست کاملی ازشون میپردازیم. این بخش همچنین شامل CORS(Cross Origin Resource Sharing) هم میشه.
بخش ششم نقطه ی شروع ایجاد یک web API با عنوان " Blog " خواهد بود که قراره از یک مدل کاربری سفارشی سازی شده در کنار یک قابلیت CRUD(Create-Read-Update-Delete) استفاده کنه. بخش هفتم روی مجوز ها، نحوه صحیح محدود کردن دسترسی ها، و ایجاد یک کلاس مجوز دهی سفارشی سازی شده تمرکز داره. در بخش هشتم روی احراز هویت کاربران کار میکنیم و endpoint هایی رو به منظور ثبت نام، ورود/خروج، بازیابی رمز عبور و تایید رمز عبور بازیافت شده طراحی میکنیم. در بخش نهم با viewset ها و router ها کار میکنیم که به نوبه خود اجزای توکاری هستن که میزان کد لازم برای طراحی یک endpoint استاندارد رو کاهش میدن. بخش دهم شمای کلی و مستند سازی رو پوشش میده و بخش یازدهم به استقرار آنلاین پروژه اختصاص داره.

جمع بندی

جنگو و فریمورک REST جنگو یک رویه قدرتمند و کامل برای ایجاد web API ها هستند. در انتهای این فصل از دوره شما قادر خواهید بود تا API هایی رو به هر پروژه جنگویی اضافه کنید یا web API های اختصاصی خودتون رو به روش صحیح و با استفاده از ابزار های مدرن از صفر بسازید. پس کار رو با هم شروع میکنیم!