ویرگول
ورودثبت نام
Future Vision
Future Vision
خواندن ۵ دقیقه·۲ سال پیش

معرفی فریمورک blacksheep در پایتون

blacksheep framework
blacksheep framework


بنظر شما سریع ترین فریم‌ورک وب در پایتون کدام است؟

شاید برخی با شنیدن این سوال، ذهنشون بره سمت Django و FastAPI و یا Flask !

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

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

مباحث پیشرو:

  • تاریخچه و معرفی
  • امنیت
  • ویژگی ها
  • بنچمارک ها
  • یک کد نمونه از این فریمورک
  • نتیجه گیری


تاریخچه و معرفی

این فریم‌ورک در سال 2018 توسط آقای RobertoPrevato با هدف مقیاس و سرعت بالا در کنار سادگی ارائه شد. 2 سال قبل از انتشار این فریم‌ورک یعنی در سال 2016 مقاله ای تحت عنوان uvloop: Blazing fast Python networking ارائه شد که به معرفی uvloop منجر شد. خب شاید اینجا براتون سوال پیش بیاد که uvloop چیه؟ uvloop یک drop-in replacement یا به اصطلاح یک جایگزین کننده برای event loop در asyncio هست که سرعت event loop هارو 2 الی 4 برابر بیشتر میکنه! خود asyncio به خودی خود باعث افزایش سرعت در کد های ما میشه حالا فک کنید این سرعت 2 الی 4 برابر بیشتر بشه چی میشه 8)....

بسیار خب حالا بریم یکم از خود این فریم‌ورک بگیم

فریم‌ورک blacksheep یک فریم‌ورک مبتنی بر async در پایتون است. استفاده از قابلیت async در کنار uvloop و پشتیبانی از وب سرور های asynchronous مانند uvicorn باعث شده تا این فریم‌ورک به یک فریمورک قدرتمند و پر سرعت تبدیل بشه و به عنوان یکی از Web Framework های مدرن امروزی شناخته بشه!

این فریم‌ورک، یک فریم‌ورک general-purpose است که یعنی میشه با استفاده از این فریمورک انواع مختلف سایت ها و وب اپلیکیشن رو پیاده سازی کرد و توسعه داد. این فریم‌ورک پر قدرت سادگی خوشو از میکرو فریم‌ورک Flask به ارث برده و در قدرت از فریم‌ورک ASP.NET الهام گرفته!

این فریم‌ورک در ابتدا شامل یک وب سرور HTTP داخلی بود، اما این مورد از این فریم‌ورک حذف شد و به جای اون سعی شد تا با وب سرورهای HTTP ASGI یا همون async خودمون سازگار بشه که بالاتر هم بهش اشاره شد. این کار باعث شد تلاش برای بهبود این فریم‌ورک بیشتر بشه و تمرکز فقط بر روی بهبود عملکرد و اضافه کردن قابلیت های بیشتر به این فریم‌ورک بشه و این روند باعث اضافه شدن پشتیبانی از HTTP2 شد.

امنیت

یکی از مؤلفه های مهم در حوزه ی تکنولوژی و مخصوصا حوزه ی وب ایجاد امنیت در اون حوزه هست. در بخش بک اند وب اگه ما به صورت دستی بخواییم تمام پارامتر های امنیتی رو رعایت کنیم ممکنه زمان زیادی رو از ما بگیره و همچنین ممکنه ما به درستی نتونیم اون پارامتر هارو رعایت کنیم. اینجاست که یسری متخصص اومدن و فریم‌ورک هایی رو نوشتن و تمام این پارامتر هارو درون این فریم‌ورک ها رعایت کردن تا خیال مارو تا حدودی از پیاده سازی بحث امنیت راحت کنند اما نباید چون دیگه اون پارامتر ها از قبل برامون ایجاد شدن یسری مباحث رو رعایت نکنیم! خب سرتونو درد نمیارم :)

ما گفتیم که تو فریم‌ورک ها یسری از پارامتر های امنيتی اعمال شدند..در این فریم‌ورک قضیه یکم فرق داره!

این فریم‌ورک از یک سیاست امنیتی به نام Cross-Origin Resource Sharing یا به اختصار CORS تبعیت میکنه. خب این CORS چی هس حالا؟ CORS روشی رو تعریف می‌کنه که در اون مرورگر و سرور می‌تونن برای تعیین این که آیا اجازه دادن به درخواست cross-origin ایمن هس یا خیر، تعامل داشته باشن. این امکان آزادی و عملکرد بیشتری را نسبت به درخواست‌های کاملا یکسان فراهم می‌کنه، اما امن‌تر از اجازه دادن به همه درخواست‌های cross-origin هس! CORS یک سازوکار مبتنی بر HTTP-header عه که به سرور اجازه میده هر origins (دامنه، scheme یا پورت) رو که مرورگر باید از طریق اون اجازه بارگیری منابع به جز منبع خودشو بده، نشان بده. هم چنین به سازوکاری متکی هس که به وسیله اون مرورگرها یک درخواست «preflight» رو به سرور میزبان منبع متقابل میده تا بررسی کنن که آیا سرور درخواست واقعی را مجاز می کنه یا نه. در این درخواست «preflight»، مرورگر header هایی را می فرستد که نشان دهنده متد HTTP  و header هایی است که در درخواست واقعی از آن استفاده می شود. برای اطلاعات بیشتر این مقاله رو مطالعه کنید.



ویژگی ها

خب بریم یکمی از قابلیت های این فریم‌ورک رو مرور کنیم :

  • پشتیبانی از معماری MVC
  • پشتیبانی از نسخه 3 Yaml و Json
  • آپدیت شده بر اساس آخرین نسخه های پایتون و همچنین پشتیبانی از پایتون نسخه 3.10
  • سازگاری با وب سرور های ASGI
  • پشتیبانی از Routing
  • پشتیبانی از WebSocket
  • پشتیبانی از exception ها
  • پشتیبانی داخلی از احراز هویت JWT
  • قابل ادغام با Jinja2
  • پشتیبانی از Sessions
  • پشتیبانی از HTML5
  • پشتیبانی از dataclasses
  • دارای کلاس TestClient برای ساده سازی تست های برنامه

بنچمارک ها:

در ادامه چندتا از benchmark های صورت گرفته بین فریمورک های پایتون رو ببینیم :

طبق بنچمارک های موجود این فریم‌ورک سرعت قابل توجهی داره!

قابلیت دریافت 500000 هزار request در ثانیه و ارسال نزدیک به 100000 هزار response در ثانیه!!

Community :

این فریم‌ورک نسبت به فریم‌ورک های Django و FastAPI نسبتا Community کوچیکتر ولی رو به رشدی دارد که ممکن است در آینده بزرگتر شود.

Example Code :

تو تصویر پایین یک کد ساده رو میبینید که با استفاده از این فریم‌ورک نوشته شده که یک route رو ایجاد میکنه

و یک Hello World به علاوه ی زمان جاری سیستم را بر اساس منطقه زمانی و بر اساس استاندارد ISO 8601 رو بر میگردونه



نتیجه گیری

خب دوستان سعی کردم تو این مقاله به معرفی یکی از فریم‌ورک های کمتر شناخته شده نسبت به جنگو و بقیه موارد رو بپردازم..البته دقت کنید دوستان که این فریم‌ورک با همه ویژگی ها و قدرتی که داره کامیونیتی کوچیک تری نسبت به مثلا جنگو یا FastAPI داره و اگه به مشکلی در این فریم‌ورک بخورید ممکنه اشکال یابی اون زمان بر بشه همچنین منابع یادگیری این فریم‌ورک نسبت به بقیه کمه که خب اینم بخاطر جدید بودن و نو ظهور بودن این فریم‌ورک هس..سعی کنید از چیزی که رسمی و معروفه و کامیونیتی بزرگی داره استفاده کنید و اگرم به این فریم‌ورک علاقه مند شدید میتونید تو یه روز تعطیل یا یه روزی که بیکارید برید داکیومنتشو بخونید و یاد بگیرید

در ادامه لینک repo این فریمورک و همچنین لینک مربوط به داکیومنت این فریمورک رو قرار میدم.


Github repo :

Neoteroi/BlackSheep: Fast ASGI web framework for Python (github.com)

Documentation :

BlackSheep (neoteroi.dev)

لینک مفید:

Comparison of new Python web frameworks - DeepSource


در آخر تشکر میکنم از کسایی که این مقاله رو تا انتها خوندن :)

پایتونpythonweb frameworkframework
سلام اسم من مصطفئ‌ست، علاقه مند به زبان پایتون و یادگیری چیز های جدید.
شاید از این پست‌ها خوشتان بیاید