Ninja Learn | نینجا لرن
1.27K subscribers
95 photos
36 videos
11 files
306 links
یادگیری برنامه نویسی به سبک نینجا 🥷
اینجا چیزایی یاد میگیری که فقط نینجاهای وب‌ بلدن 🤫

📄 Send me post: https://t.iss.one/NoronChat_bot?start=sec-fdggghgebe

👥 ɢʀᴏᴜᴘ: https://t.iss.one/+td1EcO_YfSphNTlk
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
سلامتی آزادی سلطان 🍾
🍾41
💎 هدر X-Powered-By 💎

فرض کن یه ماشین خیلی خوشگلی داری. روی این ماشین یه برچسب کوچولو هست که نوشته "ساخت ایران". این برچسب به همه میگه که ماشینت ایرانیه.

هدر X-Powered-By هم دقیقا همین کارو برای وبسایت ها انجام میده. این هدر یه برچسب کوچولوئه که به همه میگه این وبسایت با چه زبان/فریمورکی ساخته شده.

مثلاً ممکنه بنویسه "ساخته شده با وردپرس" یا "ساخته شده با جاوا اسکریپت".


چرا مهمه؟

خب، این برچسب کوچولو یه دردسر کوچولو هم داره!

هکرها با دیدن این برچسب میتونن بفهمند که وبسایت با چه زبان یا فریمورکی ساخته شده. بعدش میرن سراغ اون زبان یا فریمورک و دنبال یه در کوچولو میگردن که بتونن ازش وارد وبسایت بشن و اطلاعات مهم رو بدزدن.


مثال:

فرض کن یه وبسایت فروشگاهی با وردپرس ساخته شده.

یه هکر با دیدن هدر X-Powered-By میفهمه که این وبسایت با وردپرس ساخته شده.

بعدش میره تو اینترنت و دنبال یه راه برای هک کردن وردپرس میگرده. اگه این راه رو پیدا کنه، میتونه وارد وبسایت بشه و اطلاعات کارت های اعتباری مشتری ها رو بدزده.


چه کار کنیم که امنیت وبسایتمون بیشتر بشه؟

1⃣ این هدر رو مخفی کنیم: خیلی از زبان ها و فریمورک هایی که برای ساخت وبسایت استفاده میشن، این امکان رو بهمون میدن که این هدر رو مخفی کنیم. با این کار هکرها نمی تونن بفهمند که وبسایتمون با چه نرم افزاری ساخته شده.

2⃣ زبان/فریمورک مون رو همیشه آپدیت کنیم: هر زبان و فریمورکی ممکنه ایرادهایی داشته باشه. توسعه دهنده ها با آپدیت کردن این ایرادها رو برطرف میکنن. پس اگه زبان و فریمورکمون رو همیشه آپدیت کنیم، هکرها نمیتونن از این ایرادها برای هک کردن وبسایتمون استفاده کنند.

3⃣ از فایروال استفاده کنیم: فایروال مثل یه نگهبان برای وبسایتمون عمل میکنه. فایروال جلوی حملات هکرها رو میگیره و اجازه نمیده که به وبسایتمون آسیب برسونن.

☑️ خلاصه داستان:
هدر X-Powered-By یه برچسب کوچولوئه که به هکرها اطلاعات میده. برای اینکه وبسایتمون امن باشه باید این برچسب رو مخفی کنیم، زبان/فریمورک مون رو آپدیت کنیم و از فایروال استفاده کنیم.

🔴 نکته مهم:
امنیت وبسایت فقط به این هدر ختم نمیشه. خیلی چیزای دیگه هم هست که باید بهشون توجه کرد. مثلاً استفاده از رمزهای عبور قوی، بکاپ گرفتن از اطلاعات وبسایت و...

سوالی دارید بپرسید 🌹
👍82
پست فردا راجب پکیج debug toolbar باشه؟
👍14😁21
#fun


Iran be like 😂

@ninja_learn_ir
🤣102😱2👍1
📕کتاب REST API Design Rulebook

📌 فصل اول: معرفی (Introduction)

📍پارت: اول

#کتاب

💎 سلام به دنیای اینترنت 💎

وب از یه گروه به اسم "داده‌گیری و کنترل" توی سازمان تحقیقاتی اروپا برای فیزیک هسته‌ای (CERN) در ژنو، سوئیس شروع شد.
این ماجرا از وقتی شروع شد که یه برنامه‌نویس کامپیوتر یه ایده هوشمندانه برای یه پروژه نرم‌افزاری جدید به ذهنش رسید.
توی دسامبر ۱۹۹۰، برای اینکه به اشتراک‌گذاری اطلاعات راحت‌تر بشه، "تیم برنرز-لی" یه پروژه غیرانتفاعی رو شروع کرد که اسمش رو "WorldWideWeb" گذاشت.
بعد از حدود یک سال کار مداوم روی پروژه‌اش، برنرز-لی اینا رو اختراع و پیاده‌سازی کرد:
• شناسه منبع یکتا (URI)، یه فرمت که به هر سند وب یه آدرس یکتا میده.
• پروتکل انتقال ابرمتن (HTTP)، یه زبان پیام‌محور که کامپیوترها می‌تونن ازش برای ارتباط توی اینترنت استفاده کنن.
• زبان نشانه‌گذاری ابرمتن (HTML)، برای نمایش اسناد اطلاعاتی که حاوی لینک‌هایی به اسناد مرتبط هستن.
• اولین سرور وب.
• اولین مرورگر وب، که برنرز-لی اسمش رو هم "WorldWideWeb" گذاشت و بعداً به "Nexus" تغییر داد تا با خود وب اشتباه گرفته نشه.
• اولین ویرایشگر HTML به صورت WYSIWYG (یعنی چیزی که می‌بینی همونه که دریافت می‌کنی)، که توی خود مرورگر ساخته شده بود.

در ۶ آگوست ۱۹۹۱، تیم برنرز-لی توی اولین صفحه وب نوشت:
"WorldWideWeb (W3) یه ابتکار برای بازیابی اطلاعات هایپرمیدیا توی یه منطقه وسیع هست که هدفش دسترسی عمومی به یه دنیای بزرگ از اسناد هست."
از همون لحظه، وب شروع به رشد کرد، گاهی به‌صورت تصاعدی. طی پنج سال، تعداد کاربران وب به ۴۰ میلیون نفر رسید. یه زمانی بود که این تعداد هر دو ماه دو برابر می‌شد. همون "دنیای اسناد" که برنرز-لی توصیف کرده بود، واقعاً در حال گسترش بود.

در واقع، وب خیلی سریع و بزرگ شده بود و به سمت فروپاشی می‌رفت. ترافیک وب از ظرفیت زیرساخت اینترنت فراتر می‌رفت. علاوه بر این، پروتکل‌های اصلی وب به طور یکسان پیاده‌سازی نشده بودن و پشتیبانی از کش‌ها و واسطه‌های تثبیت‌کننده نداشتن. با این رشد سریع، مشخص نبود که آیا وب می‌تونه با این تقاضای روزافزون سازگار بشه یا نه.

@ninja_learn_ir
👌9👍32🔥1
💎 ابزار Django debug toolbar 💎
امروز می‌خوایم دربارهٔ یه ابزار فوق‌العاده برای دیباگ کردن توی پروژه‌های جنگویی صحبت کنیم: Django Debug Toolbar. این ابزار می‌تونه بهتون کمک کنه تا جزئیات دقیق درخواست‌ها، کوئری‌های پایگاه داده، قالب‌ها و خیلی چیزای دیگه رو ببینید و مشکلات پروژه‌تون رو سریع‌تر پیدا و برطرف کنید. توی این پست قراره قدم به قدم نحوهٔ نصب و استفاده از این ابزار رو توضیح بدم. 🚀


1. نصب Django Debug Toolbarبرای شروع، باید Django Debug Toolbar رو نصب کنید :
این ابزار به‌راحتی از طریق pip قابل نصب هست. کافیه ترمینال رو باز کنید و این دستور رو وارد کنید: 💻

pip install django-debug-toolbar


با این کار، پکیج مورد نیاز نصب میشه.

2. اضافه کردن به تنظیمات پروژه  :
حالا باید Django Debug Toolbar رو به تنظیمات پروژهٔ جنگوییتون اضافه کنید. برای این کار، فایل settings.py رو باز کنید و این کدرو رو به تنظیمات اضافه کنید: 🛠️

اضافه کردن به INSTALLED_APPS:
INSTALLED_APPS = [
    ...
    'debug_toolbar',
]


اضافه کردن به MIDDLEWARE:

MIDDLEWARE = [
    ...
    'debug_toolbar.middleware.DebugToolbarMiddleware',
]


با این کار، Django Debug Toolbar به پروژه‌تون اضافه می‌شه و میتونید ازش استفاده کنید. 🎉
3. تنظیم آیپی‌های مجازبرای اینکه این ابزار بتونه توی مرورگر نمایش داده بشه، باید آیپی‌هایی که برای دیباگ تولبار مجاز هستن رو تنظیم کنید. معمولاً برای توسعه توی لوکال از 127.0.0.1 استفاده می‌کنیم. بنابراین، این خط رو به settings.py اضافه کنید: 🌐

INTERNAL_IPS = [
    '127.0.0.1',
]


این تنظیمات به تولبار میگه که فقط وقتی از این آیپی درخواست میاد، نمایش داده بشه. 👀

4. اضافه کردن URLهای مربوطه حالا باید URLهای مربوط به Django Debug Toolbar رو به پروژه‌تون اضافه کنید. برای این کار، فایل urls.py رو باز کنید و این خطوط رو اضافه کنید: 🌍

django.conf import settings
from django.conf.urls import include
from django.urls import path

if settings.DEBUG:
    import debug_toolbar
    urlpatterns = [
        path('__debug__/', include(debug_toolbar.urls)),
    ] + urlpatterns


این کار باعث می‌شه که وقتی پروژه توی حالت DEBUG هست، تولبار فعال بشه و URLهای مربوط به اون هم در دسترس باشن. 🔧

5. استفاده از Django Debug Toolbar حالا دیگه کارمون تمومه! کافیه سرور جنگو رو دوباره راه‌اندازی کنید و یکی از صفحات پروژه‌تون رو باز کنید. اگه همه چیز درست پیش رفته باشه، یه نوار ابزار (Toolbar) در سمت راست صفحه نمایش داده می‌شه.
این نوار ابزار اطلاعات خیلی مفیدی دربارهٔ درخواست HTTP، کوئری‌های پایگاه داده، قالب‌ها، تنظیمات و موارد دیگه بهتون نشون میده.

مثلاً با استفاده از این ابزار می‌تونید ببینید چه کوئری‌هایی به پایگاه داده زده شده، چقدر زمان برده و جای بهینه‌سازی داره یا نه.
همچنین میتونید اطلاعات مربوط به درخواست‌ها و پاسخ‌های HTTP رو به‌دست بیارید و از نحوهٔ پردازش درخواست‌ها در سمت سرور مطلع بشید. 🔍

جمع‌بندی
فهمیدیم Django Debug Toolbar ابزاری قدرتمنده که میتونه خیلی بهتون کمک کنه تا پروژه‌هاتون رو بهینه تر کنید و مشکلات رو سریع‌ تر پیدا کنید.
پیشنهاد میکنم حتماً امتحانش کنید و ببینید چقدر کارتون رو راحت‌تر می‌کنه. 💪

دراینده یه ویدیو هم درمورش ضبط میکنیم

امید وارم براتون مفید بوده باشه :)

@ninja_learn_ir
👍104
📕 کتاب REST API Design Rulebook

📌 فصل اول: معرفی (Introduction)

📍پارت: دوم

#کتاب

💎 معماری وب 💎

در اواخر سال ۱۹۹۳، "روی فیلدینگ"، یکی از بنیان‌گذاران پروژه سرور HTTP آپاچی، نگران مشکل مقیاس‌پذیری وب شد.
بعد از تحلیل، فیلدینگ متوجه شد که مقیاس‌پذیری وب تحت تأثیر یه سری محدودیت‌های کلیدی قرار داره. اون و دیگران تصمیم گرفتن که با یه رویکرد عملیاتی، وب رو بهبود بدن: باید همه این محدودیت‌ها رو به‌صورت یکسان برآورده کنن تا وب بتونه به گسترش خودش ادامه بده.
فیلدینگ این محدودیت‌ها رو به شش دسته تقسیم کرد و به مجموعه این دسته‌ها "سبک معماری وب" گفت:

۱. کلاینت-سرور (Client-server)
۲. رابط یکپارچه (Uniform interface)
۳. سیستم لایه‌ای (Layered system)
۴. کش (Cache)
۵. بدون حالت (Stateless)
۶. کد به‌صورت درخواستی (Code-on-demand)

1️⃣ کلاینت-سرور (Client-server)
موضوع اصلی محدودیت‌های کلاینت-سرور در وب، جداسازی وظایف است. وب یک سیستم مبتنی بر کلاینت-سرور است که در آن کلاینت‌ها و سرورها نقش‌های مجزا و مشخصی دارند. این بخش‌ها می‌توانند به‌صورت مستقل پیاده‌سازی و مستقر شوند، با استفاده از هر زبان یا فناوری، به شرطی که با رابط یکنواخت وب سازگار باشند.

2️⃣ رابط یکپارچه (Uniform interface)
تعاملات بین اجزای وب، یعنی کلاینت‌ها، سرورها و واسطه‌های مبتنی بر شبکه، به یکنواختی رابط‌هایشان بستگی دارد. اگر هر یک از این اجزا از استانداردهای تعیین‌شده خارج شوند، سیستم ارتباطی وب دچار اختلال می‌شود.
اجزای وب در چارچوب چهار محدودیت رابط یکنواخت که فیلدینگ شناسایی کرده است، به‌طور سازگار با هم کار می‌کنند:

1- شناسایی منابع
2- دستکاری منابع از طریق نمایه‌ها
3- پیام‌های خودتوصیفی
4- هایپرمدیا به عنوان موتور حالت برنامه (HATEOAS)


1- شناسایی منابع
هر مفهوم مجزای مبتنی بر وب به عنوان یک منبع شناخته می‌شود و می‌تواند با یک شناسه یکتا، مثل URI، مورد خطاب قرار گیرد. برای مثال، یک URI خاص مثل https://www.google.com منحصراً به مفهوم ریشه‌ی یک وبسایت خاص اشاره دارد.

2- دستکاری منابع از طریق نمایه‌ها
کلاینت‌ها نمایه‌های منابع را دستکاری می‌کنند. یک منبع مشخص می‌تواند به شکل‌های مختلف برای کلاینت‌های مختلف نمایه شود. مثلاً، یک سند ممکن است به‌صورت HTML به یک مرورگر وب نمایش داده شود و به‌صورت JSON به یک برنامه خودکار. ایده کلیدی این است که نمایه‌ها راهی برای تعامل با منبع هستند، اما خود منبع نیستند. این تمایز مفهومی اجازه می‌دهد که منبع به روش‌ها و فرمت‌های مختلف نمایه شود بدون اینکه شناسه‌اش تغییر کند.

3- پیام‌های خودتوصیفی (Self-descriptive)
وضعیت مورد نظر یک منبع می‌تواند در پیام درخواست کلاینت نمایه شود. وضعیت کنونی منبع ممکن است در پیام پاسخ سرور که بازمی‌گردد، نمایش داده شود. به‌عنوان مثال، یک ویرایشگر صفحه ویکی ممکن است از پیام درخواست برای انتقال یک نمایه که پیشنهاد یک بروزرسانی صفحه (وضعیت جدید) برای یک صفحه وب مدیریت‌شده توسط سرور است، استفاده کند. سرور تصمیم می‌گیرد که درخواست کلاینت را بپذیرد یا رد کند.

4- هایپرمدیا به عنوان موتور حالت برنامه (HATEOAS)
نمایش وضعیت یک منبع شامل لینک‌هایی به منابع مرتبط هست. لینک‌ها مثل نخ‌هایی هستند که وب رو به هم متصل می‌کنن و به کاربرا این امکان رو می‌دن که به صورت معنادار و هدفمند بین اطلاعات و برنامه‌ها حرکت کنن. وجود یا نبودن یه لینک روی یک صفحه، بخش مهمی از وضعیت فعلی اون منبعه.

3️⃣ سیستم لایه‌ای (Layered system)
محدودیت‌های سیستم لایه‌ای این امکان رو می‌ده که واسطه‌های مبتنی بر شبکه مثل پروکسی‌ها و درگاه‌ها، به‌صورت شفاف بین کلاینت و سرور مستقر بشن و از رابط یکنواخت وب استفاده کنن. به‌طور کلی، یه واسطه مبتنی بر شبکه برای یه هدف مشخص ارتباط کلاینت و سرور رو رهگیری می‌کنه. این واسطه‌ها معمولاً برای اجرای امنیت، کش کردن پاسخ‌ها و متعادل کردن بار ترافیکی استفاده می‌شن.

4️⃣ کش (Cache)
کش کردن یکی از مهم‌ترین محدودیت‌های معماری وب هست. محدودیت‌های مربوط به کش به سرور وب می‌گن که باید قابلیت کش شدن داده‌های هر پاسخ رو مشخص کنه. کش کردن داده‌های پاسخ می‌تونه به کاهش تأخیر احساس‌شده توسط کاربر، افزایش دسترسی‌پذیری و قابلیت اطمینان یک برنامه، و کنترل بار سرور وب کمک کنه. به طور خلاصه، کش کردن هزینه کلی وب رو کاهش می‌ده.
کش می‌تونه در هر جایی از مسیر شبکه بین کلاینت و سرور وجود داشته باشه. این کش‌ها ممکنه در شبکه سرور وب یک سازمان، داخل شبکه‌های تحویل محتوای تخصصی (CDNها) یا حتی داخل خود کلاینت باشن.
4👍1
5️⃣ بدون حالت (Stateless)
محدودیت بدون حالت (Stateless) می‌گه که یه سرور وب نباید وضعیت برنامه‌های کلاینت‌هاش رو به خاطر بسپاره. به همین خاطر، هر کلاینت باید تو هر تعامل با سرور، تمام اطلاعات مرتبط و مورد نیازش رو همراه داشته باشه. سرورهای وب از کلاینت‌ها می‌خوان که پیچیدگی مدیریت وضعیت برنامه‌هاشون رو خودشون انجام بدن تا سرور بتونه به تعداد بیشتری از کلاینت‌ها خدمات بده. این مبادله یکی از عوامل کلیدی در مقیاس‌پذیری سبک معماری وب هست.

6️⃣ کد به‌صورت درخواستی (Code-on-demand)
وب به شدت از "کد به صورت درخواستی" (Code-on-demand) استفاده می‌کنه، این محدودیت به سرورهای وب اجازه می‌ده که به‌طور موقت برنامه‌های اجرایی مثل اسکریپت‌ها یا پلاگین‌ها رو به کلاینت‌ها منتقل کنن. کد به صورت درخواستی باعث می‌شه که یه نوع وابستگی تکنولوژیکی بین سرورهای وب و کلاینت‌ها ایجاد بشه، چون کلاینت باید توانایی فهم و اجرای کدی که به صورت درخواستی از سرور دانلود می‌کنه رو داشته باشه. به همین دلیل، کد به صورت درخواستی تنها محدودیت سبک معماری وب هست که اختیاری در نظر گرفته می‌شه. تکنولوژی‌هایی که در مرورگرهای وب استفاده می‌شن، مثل جاوا اپلت‌ها، جاوا اسکریپت و فلش، نمونه‌های بارز این محدودیت هستن.


💎 استاندارد های وب 💎
فیلدینگ همراه با تیم برنرز-لی و چند نفر دیگه برای افزایش مقیاس‌پذیری وب کار کرد. برای استانداردسازی طراحی‌هاشون، اونا یه مشخصات جدید برای نسخه جدید پروتکل انتقال ابرمتن (HTTP/1.1) نوشتن.
همچنین، نحو شناسه‌های یکنواخت منابع (URI) رو هم در RFC 3986 رسمی کردن.
این استانداردها به‌سرعت در سراسر وب پذیرفته شد و راه رو برای رشد بیشترش هموار کرد.

@ninja_learn_ir
👍82
💎 همه چیز درباره DDoS و روش‌های جلوگیری با Cloudflare 💎

امروز میخوایم در مورد یه مشکل خیلی جدی برای وب‌سایت‌ها صحبت کنیم: DDoS و اینکه چجوری میتونید با Cloudflare از سایتتون محافظت کنید.

حالا DDoS یعنی چی؟ 🤔

خب DDoS مخفف Distributed Denial of Service هست. یعنی یه تعداد زیادی کامپیوتر یا سرور همزمان کلی درخواست به یه سرور خاص می‌فرستن تا اون سرور از کار بیفته و سایتتون بالا نیاد.

چرا DDoS خطرناکه؟ ⚠️

1⃣ قطعی سرویس: سایت یا سرور شما ممکنه زمان زیادی از دسترس خارج بشه.

2⃣ افت عملکرد: سرعت سایتتون به شدت میاد پایین.

3⃣ ضرر مالی: ممکنه ضرر مالی زیادی ببینید.

چجوری با Cloudflare جلوی DDoS رو بگیریم؟ 🛡

1⃣ استفاده از CDN: Cloudflare به عنوان یه CDN، محتوای سایت شما رو توی سرورهای مختلف تو دنیا ذخیره می‌کنه. این کار باعث میشه درخواست‌ها به جای سرور اصلی، برن به نزدیک‌ترین سرور Cloudflare و فشار روی سرور اصلی کم بشه. 🌍
 
2⃣ فایروال‌های پیشرفته: Cloudflare فایروال‌های خیلی قوی داره که میتونن درخواست‌های مشکوک رو تشخیص بدن و مسدودشون کنن. 🔥

3⃣ محافظت از لایه DNS: خب Cloudflare از Anycast DNS استفاده می‌کنه، یعنی درخواست‌ها رو بین سرورهای مختلف پخش می‌کنه و این کار جلوی DDoS رو می‌گیره. 🌐

4⃣ تحلیل و نظارت ترافیک: با ابزارهای Cloudflare میتونید ترافیک ورودی به سایتتون رو دقیق بررسی کنید و از حملات احتمالی مطلع بشید. 📊

5⃣ محدود کردن درخواست‌ها: Cloudflare به شما این امکان رو میده که تعداد درخواست‌های ورودی از هر IP رو محدود کنید.

6⃣ خدمات Mitigation: خب Cloudflare ابزارهای ویژه‌ای برای مقابله با حملات DDoS داره که خودکار و فوری وارد عمل میشن. 💼

چیکار کنیم موقع حمله DDoS؟ 🤔

- پیکربندی Cloudflare: مطمئن بشید که تنظیمات Cloudflare درست انجام شده و محافظت DDoS فعال هست. 🛠️

سخن پایانی🎯:
فهمیدیم که ddos چقدر خطرناکه و چطوری میتونیم با استفاده از ابزارهایی مثل cloud flare جلوشو بگیریم

امیدوارم این مطلب به دردتون خورده باشه :)❤️

#cdn #ddos #وب #امنیت_اینترنتی


@ninja_learn_ir
🔥42
📕 کتاب REST API Design Rulebook

📌 فصل اول: معرفی (Introduction)

📍پارت: سوم

#کتاب

💎 REST 💎
در سال ۲۰۰۰، بعد از اینکه مشکل مقیاس‌پذیری وب حل شد، فیلدینگ تو پایان‌نامه دکترای خودش سبک معماری وب رو اسم‌گذاری کرد و اسمش رو "انتقال حالت نمایشی" یا همون REST رو برای این سبک معماری انتخاب کرد. این سبک شامل محدودیت‌هایی هست که قبلاً بهشون اشاره کردیم.

💎 REST API ها 💎

وب سرویس‌ها (Web Services) سرورهای مخصوصی هستن که نیازهای یه سایت یا هر اپلیکیشن دیگه‌ای رو برطرف می‌کنن.

برنامه‌های کلاینت (یا همون نرم‌افزارهایی که با سرور ارتباط می‌گیرن) از طریق API با این وب سرویس‌ها ارتباط برقرار می‌کنن.

به زبان ساده، API ها یه سری داده و عملکرد رو در اختیار برنامه‌های دیگه قرار می‌دن تا بتونن با هم تعامل کنن و اطلاعات رد و بدل کنن.

یه وب API مثل ویترین یه وب سرویسه که مستقیماً درخواست‌های کلاینت رو می‌شنوه و بهشون جواب می‌ده.

سبک معماری REST معمولاً برای طراحی API های وب سرویس‌های مدرن استفاده می‌شه. اگه یه وب API با سبک معماری REST طراحی شده باشه، بهش می‌گیم REST API.


⭕️ نکات:

مقیاس‌پذیری: یعنی یه سیستم بتونه بدون کاهش کیفیت، با افزایش ترافیک (مثلا تعداد کاربران) کنار بیاد و بتونه هندلشون کنه.

کلاینت: دستگاه یا نرم‌افزاری که به سرور وصل می‌شه و ازش درخواست می‌کنه. مثلاً مرورگر وب که به یه سایت وصل می‌شه.

وب سرویس: یه سرویس تحت وب که از طریق اینترنت قابل دسترسیه و خدمات خاصی رو ارائه می‌ده.

API: یه واسطه که به برنامه‌ها اجازه می‌ده با هم ارتباط برقرار کنن.


وقتی یه وب سرویس از REST API استفاده کنه، بهش می‌گیم که اون سرویس "RESTful" هست. یه REST API از یه سری منابع به هم پیوسته تشکیل شده که بهشون مدل منابع (Resource Model) گفته می‌شه. REST API هایی که خوب طراحی شده باشن، می‌تونن برنامه‌نویس‌های کلاینت رو جذب کنن تا از اون وب سرویس استفاده کنن. امروزه که سرویس‌های وب رقیب دارن با هم برای جلب توجه رقابت می‌کنن، داشتن یه REST API با طراحی تمیز و کاربرپسند یه ویژگی ضروریه.

طراحی REST API برای خیلی از ماها بیشتر شبیه یه هنره تا یه علم. یه سری از بهترین روش‌ها برای طراحی REST API توی استاندارد HTTP وجود داره، ولی یه سری روش‌های دیگه هم طی سال‌های اخیر به‌صورت نیمه‌استاندارد شکل گرفته.

با این حال، هنوز هم باید دنبال جواب برای یه سری سوالات مهم بگردیم، مثلا:

- کی باید اسم route هامون رو با اسم‌های جمع بنویسیم؟
- از کدوم متد ریکوست (مثل POST یا PUT) باید برای به‌روزرسانی وضعیت منابع استفاده کنیم؟
- چطور باید عملیات‌هایی که مربوط به CRUD نیستن (CRUD: ایجاد، خواندن، به‌روزرسانی، حذف) رو به route ها مپ کنیم؟
- کدوم کد استاتوس HTTP برای یه سناریوی خاص مناسبه؟
- چطور می‌تونم نسخه‌های مختلف نمایه‌های وضعیت یه منبع رو مدیریت کنم؟
- چطور باید لینک‌ها رو توی JSON ساختاردهی کنم؟

⭕️ نکات:
- URI آدرس مشخصی که برای دسترسی به یه منبع توی وب استفاده می‌شه.
- CRUD مخفف چهار عمل اصلی روی داده‌ها؛ ایجاد (Create)، خواندن (Read)، به‌روزرسانی (Update)، و حذف (Delete).
- HTTP Status Code کدهایی که وضعیت درخواست‌های HTTP رو نشون می‌دن، مثل 200 برای موفقیت‌آمیز بودن یا 404 برای پیدا نشدن.


این کتاب یه سری قوانین طراحی REST API رو معرفی می‌کنه که هدفش اینه تا جواب‌های واضح و مختصری به سوالات مهمی که مطرح کردیم، بده.
این قوانین می‌خوان بهت کمک کنن تا REST API هایی با یکپارچگی و نظم طراحی کنی که بتونن به‌خوبی توسط کلاینت‌هایی که ازشون استفاده می‌کنن، بهره‌برداری بشن. می‌تونی این قوانین رو کامل دنبال کنی یا هر کدوم که دوست داشتی انتخاب کنی. شاید با بعضی از این قوانین مخالفت کنی، ولی من معتقدم هر کدومشون ارزش بررسی دقیق رو دارن.

خیلی از قوانین طراحی این کتاب از بهترین روش‌هایی گرفته شدن که به‌نوعی استانداردهای نانوشته‌ای شده‌ان. اگه تجربه‌ای توی طراحی REST API ها داری، احتمالاً با قوانینی که مربوط به طراحی URI در فصل ۲ و استفاده از HTTP در فصل ۳ هستن، آشنا خواهی بود. ولی در مقابل، بیشتر قوانین فصل ۴ و فصل ۵ (مخصوصاً اونایی که به نوع داده‌ها و فرم‌های نمایشی مربوط می‌شن) راه‌حل‌هایی هستن که خودم برای مسائلی که توافقی روشون نیست، ارائه دادم.

@ninja_learn_ir

#کتاب
🔥61
خب بچه ها فصل اول که فقط مقدمه و معرفیه فردا تموم میشه و از پس فردا فصل دوم رو شروع میکنیم و مباحث اصلی رو باهم یاد میگیریم و میبینیم چطوری میتونیم به صورت اصولی یه API رو طراحی کنیم. 😁
👍101
💎 توابع بازگشتی 💎

سلام دوستان! 🌟 امروز میخوایم در مورد یه مفهوم جذاب توی برنامه‌نویسی صحبت کنیم: توابع بازگشتی.

اگه برنامه‌نویس هستی یا تازه شروع کردی، حتماً این مفهوم برات جالبه! بیاین با یه مثال ساده، این موضوع رو با هم یاد بگیریم.


تابع بازگشتی چیه؟ 🤔

تابع بازگشتی یعنی تابعی که توی خودش دوباره خودش رو صدا می‌زنه!

یعنی تابع می‌تونه یه مسئله رو به نسخه‌های کوچیک‌تر از همون مسئله تقسیم کنه و حل کنه.

این روش توی مسائل پیچیده مثل محاسبه فاکتوریل یا سری فیبوناچی خیلی به کار میاد.


مثال فاکتوریل با تابع بازگشتی 🔢

بیاین با یه مثال شروع کنیم: محاسبه فاکتوریل!

فاکتوریل یه عدد (n!) یعنی حاصل ضرب همه اعداد از ۱ تا n. مثلاً 5! می‌شه 120 (یعنی 1×2×3×4×5).

1⃣ جاوااسکریپت:
function factorial(n) {
if(n === 1) {
return 1;
} else {
return n * factorial(n-1);
}
}

2⃣ پایتون:
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)

تو این کد، تابع factorial خودش رو صدا می‌زنه تا وقتی که به عدد ۱ برسه. وقتی به ۱ رسید، مقدارها به ترتیب برمی‌گردن و جواب نهایی محاسبه می‌شه.

چرا توابع بازگشتی؟ 🤓

توابع بازگشتی کمک می‌کنن مسائل پیچیده رو به شکل ساده‌تری حل کنیم. اما باید دقت کنیم که همیشه یه شرط توقف (شرط پایه) توی تابع باشه، وگرنه ممکنه تابع تا بی‌نهایت خودش رو صدا بزنه و برنامه هنگ کنه!

تمرین عملی 📝

حالا نوبت توعه! سعی کن یه تابع بازگشتی برای سری فیبوناچی بنویسی. این تمرین بهت کمک می‌کنه بهتر با توابع بازگشتی آشنا بشی.

امیدوارم این آموزش براتون مفید بوده باشه!

اگه سوالی دارید یا نظری دارید، حتماً توی گروه مطرح کنید. 🌹

@ninja_learn_ir
👍62
📕 کتاب REST API Design Rulebook

📌 فصل اول: معرفی (Introduction)

📍پارت: چهارم (پارت آخر فصل اول)

#کتاب

💎 WRML 💎

من (نویسنده کتاب) یه چارچوب مفهومی به نام Web Resource Modeling Language (WRML) اختراع کردم که به طراحی و پیاده‌سازی REST API ها کمک می‌کنه. WRML، که به صورت "ورمل" تلفظ می‌شه، اول به عنوان یه تکنیک برای رسم مدل منابع به وجود اومد که از یه سری اشکال ساده برای نمایش هر کدوم از الگوهای منابع استفاده می‌کنه.

دامنه‌ی WRML با ایجاد نوع رسانه‌ای به نام application/wrml که قابلیت اضافه کردن فرمت و اجزای اسکیمای جدید رو داره، گسترده‌تر شد. در خیلی از قواعد بعدی کتاب، از ایده‌های WRML استفاده می‌کنم تا شکاف‌های موجود در بهترین روش‌های فعلی رو با توصیه‌های منطقی برای موقعیت‌های رایج پر کنم.

در فصل‌های ۵ و ۶ متوجه می‌شی که خیلی از قوانین با مثال‌هایی که از JSON استفاده می‌کنن، توضیح داده شدن. JSON یه فرمت مهمه که مزایای زیادی داره، مثل پشتیبانی بومی از جاوااسکریپت، پذیرش تقریبا جهانی، و سینتکس آشنا. اما JSON به تنهایی ساختارهای یکسانی برای بعضی از مهم‌ترین مفاهیم REST API مثل لینک‌ها، روابط لینک‌ها، و اسکیم‌ها ارائه نمی‌ده. قوانین توی فصل‌های "نمایش هایپرمیدیا" و "نمایش اسکیم" از WRML استفاده می‌کنن تا فرم‌های نمایشی مبتنی بر JSON رو برای این ساختارهای اصلی نشون بدن.

در نهایت، فصل ۷ تأکید می‌کنه که یکنواختی در طراحی API فقط یه موضوع تئوری نیست؛ بلکه می‌تونه زندگی برنامه‌نویسا رو بهتر کنه و به ما ابزاری غنی بده تا با استفاده از اون‌ها REST API ‌های بهتری طراحی و توسعه بدیم.


خلاصه
این فصل خلاصه‌ای از اختراع و تثبیت وب رو ارائه داد. همچنین به معرفی رویکرد قوانین‌محور کتاب و چارچوب مفهومی WRML پرداخت، که ایده‌های اون به طراحی یکپارچه REST API کمک می‌کنن. فصل‌های بعدی بر این پایه استوار می‌شن تا به ما کمک کنن که از REST در طراحی API استفاده کنیم.

جدول ۱-۱ هم خلاصه‌ای از اصطلاحات جدیدی که توی این فصل معرفی شدن رو ارائه می‌ده.

@ninja_learn_ir

#کتاب
👍21
جدول ۱-۱:

Application Programming Interface (API)
یه مجموعه از داده‌ها و توابع رو در اختیار می‌ذاره تا برنامه‌های کامپیوتری بتونن با هم تعامل داشته باشن.

Architectural constraint
محدودیتی که رفتار اجزای یه سیستم رو کنترل می‌کنه تا یکنواختی رو برقرار کنه و یه ویژگی خاص رو به دست بیاره.

Architectural style
این اصطلاح رو روی فیلدینگ توی رساله دکترای خودش استفاده کرده تا یه سری محدودیت‌ها رو توصیف کنه که رفتار اجزای به هم متصل یه سیستم رو محدود می‌کنن.

Cache
محدودیت‌های REST که به واسطه‌ها توی شبکه اجازه می‌ده که وضعیت نمایشی منابع رو نگه دارن و این به سرورهای وب کمک می‌کنه تا نیازهای کاربرانشون رو برآورده کنن.

Client–server
محدودیت‌های REST که نگرانی‌های دو جزء اصلی سیستم رو از هم جدا می‌کنه و این باعث می‌شه که این اجزا بتونن به صورت مستقل پیشرفت کنن.

Code-on-demand
یه محدودیت REST که به طور اختیاری به سرور وب اجازه می‌ده که برنامه‌های اجرایی رو در صورت نیاز به کاربرانش انتقال بده.

Entity body
بخشی از یه پیام HTTP که برای نگه داشتن محتوای (اختیاری) طراحی شده، که ممکنه نمایشی از یه منبع باشه.

Entity headers
بخشی از یه پیام HTTP که می‌تونه اطلاعات متا مربوط به یه منبع و نمایشش رو انتقال بده.

HATEOAS
مخفف "Hypermedia as the Engine of Application State" در REST، که به روش ارائه لیستی از لینک‌ها برای نمایش "اقدامات" قابل دسترس برای یه منبع اشاره می‌کنه.

Hypermedia
یه گسترش از هایپرمتن که امکان ترکیب و پیوند دادن چندین فرمت رو فراهم می‌کنه تا یه شبکه اطلاعات چندرسانه‌ای طراحی بشه.

Hypertext
اسناد متنی که شامل لینک‌های تعبیه‌شده به اسناد مرتبط دیگه هستن و یه شبکه قابل پیمایش از اطلاعات رو ایجاد می‌کنن.

HyperText Mark-up Language (HTML)
توسط تیم برنرز-لی ساخته شده تا وضعیت اطلاعات و روابط یه منبع وب رو نمایش بده.

HyperText Transfer Protocol (HTTP)
در ابتدا توسط تیم برنرز-لی توسعه داده شد. این یه زبان مبتنی بر پیام هست که کامپیوترها می‌تونن ازش برای ارتباط از طریق اینترنت استفاده کنن.

Hypertext Transfer Protocol version 1.1 (HTTP/1.1)
روی فیلدینگ، تیم برنرز-لی، و دیگران به استانداردسازی این نسخه از پروتکل ارتباطی کمک کردن.

JavaScript
یه زبان اسکریپت‌نویسی قدرتمند که معمولاً توسط توسعه‌دهندگان وب استفاده می‌شه.

JavaScript Object Notation (JSON)
یه فرمت متنی استاندارد شده که از جاوااسکریپت مشتق شده و برای تبادل داده‌های ساختاریافته استفاده می‌شه.

Layered system
محدودیت‌های REST که به واسطه‌های شبکه اجازه می‌ده بین مشتری و سرور قرار بگیرن بدون اینکه محدودیت‌های یکنواختی رابط رو نقض کنن.

Media type
یه سینتکس که فرم محتوا رو توصیف می‌کنه.

Message
یه پاکت خودتوصیف که معمولاً برای حمل نمایشی از وضعیت یه منبع استفاده می‌شه.

Representation
وضعیت فرمت شده یه منبع که ممکنه از طریق پیام‌هایی که بین اجزا منتقل می‌شن، انتقال داده بشه.

Representational State Transfer (REST)
روشی که روی فیلدینگ برای توصیف سبک معماری وب به کار برد.

Request message
پیامی که از طرف کاربر (کلاینت) فرستاده می‌شه تا با یه منبع وب که از طریق URI مشخص شده، تعامل کنه. ممکنه شامل یه نمایش از وضعیت منبع هم باشه.

Resource
هر مفهومی در وب که با یه شناسه‌ی منحصر به فرد قابل اشاره باشه و از طریق رابط یکنواخت قابل دستکاری باشه.

Resource identifier
یه شناسه‌ی جهانی و منحصر به فرد برای یه مفهوم خاص در وب.

Resource model
یه مجموعه از مفاهیم وبی که به هم مرتبط هستن.

Resource state representation
وضعیت رندر شده‌ی یه منبع که تحت مالکیت سرور وب هست و بین کلاینت و سرور یه برنامه منتقل می‌شه.

Response message
پیامی که از طرف سرور فرستاده می‌شه تا نتیجه‌ی درخواست کلاینت رو اعلام کنه. ممکنه شامل یه نمایش از وضعیت منبع هم باشه.

REST API
یه رابط خدمات وب که با سبک معماری وب همخوانی داره.

Scalability
توانایی مدیریت بار کاری بیشتر به شکل مناسب و بدون مشکل.

Stateless
یه محدودیت REST که مانع از نگه داشتن اطلاعات خاص کاربر توسط سرور وب می‌شه، که این کار کمک می‌کنه تا سرور بتونه تعداد بیشتری کاربر رو پشتیبانی کنه.

Uniform interface
یه مجموعه از چهار محدودیت REST که ارتباط بین اجزای وب رو استاندارد می‌کنه.

Uniform Resource Identifier (URI)
یه سینتکس که توسط تیم برنرز-لی اختراع شد تا به هر منبع وب یه شناسه‌ی منحصر به فرد اختصاص بده.

Web API
ابزاری که توسط کاربران (کلاینت‌ها) برای تعامل با یه خدمات وب استفاده می‌شه.
👍31😁1
Web browser (browser)
یه نوع معمول از کلاینت وب. تیم برنرز-لی اولین مرورگر رو توسعه داد که قادر به مشاهده و ویرایش اسناد HTML بود.

Web client (client)
یه برنامه کامپیوتری که از رابط یکنواخت REST پیروی می‌کنه تا بتونه نمایش وضعیت منابع رو از سرور بگیره و ارسال کنه.

Web component (component)
یه کلاینت، واسطه‌ی شبکه‌ای، یا سرور که با رابط یکنواخت REST مطابقت داره.

Web Resource Modeling Language (WRML)
یه چارچوب مفهومی که ایده‌هاش رو می‌تونیم برای طراحی و پیاده‌سازی API‌های REST یکنواخت استفاده کنیم.

Web server (server)
یه برنامه کامپیوتری که از محدودیت‌های رابط یکنواخت REST پیروی می‌کنه تا نمایش وضعیت منابع رو از کلاینت بگیره و ارسال کنه.

Web service
یه سرور وب که با منطق خاص و معمولاً قابل استفاده مجدد برنامه‌ریزی شده.
3👍3
خب فصل اول که کلا مقدمه بود تموم شد و از فردا شروع میکنیم مباحث اصلی رو برای طراحی اصولی یک API یاد بگیریم

از این به بعد فقط مباحث مهم رو پست میکنم و اضافاتش رو حذف میکنم

منتظر فصل دوم باشید 😁🌹
👍71
💎 خب Nginx چیه و به چه درد میخوره؟ 💎

امروز میخوام در مورد یه ابزار خیلی کاربردی به اسم Nginx صحبت کنم که شاید خیلیاتون اسمشو شنیده باشین ولی دقیق ندونید چیه و چیکار می‌کنه.

اول از همه بگم که Nginx یه وب سرور هست، ولی فقط همین نیست 😎 این ابزار قدرتمند میتونه به عنوان پراکسی معکوس (Reverse Proxy)، لود بالانسر (Load Balancer) و حتی کَش (Cache) هم استفاده بشه.
یعنی چی؟ یعنی اگه شما یه وبسایت پر بازدید دارید، با Nginx می‌تونید ترافیک ورودی رو مدیریت کنید که سایتتون دچار کندی یا قطعی نشه.

چرا Nginx؟
- سرعت بالا 🚀:
یکی از دلایلی که Nginx محبوبه، سرعت بالاشه. مخصوصاً توی هندل کردن تعداد زیادی درخواست همزمان.

- مصرف کم منابع 💾:
برخلاف بعضی از وب سرورهای دیگه، Nginx منابع کمتری مصرف میکنه و این یعنی صرفه‌جویی توی هزینه‌ها

- پایداری 🔄:
خب Nginx به خاطر معماری خاصش میتونه ترافیک سنگین رو بدون مشکل مدیریت کنه و همین باعث میشه سایتتون همیشه در دسترس باشه.

- ماژولار بودن ⚙️:
شما می‌تونید قابلیت‌های مختلفی رو با اضافه کردن ماژول‌ها به Nginx اضافه کنید. مثل SSL، فشرده‌سازی محتوا و...

حالا Nginx چجوری کار می‌کنه؟
خیلی ساده بگم، وقتی کاربری یه درخواست (مثل باز کردن یه صفحه وب) میفرسته، Nginx میاد و این درخواست رو می‌گیره و به بهترین شکل ممکن به سرور اصلی میرسونه. اگه سرور اصلی مشغوله یا مشکل داره، Nginx میتونه درخواست رو به یه سرور دیگه بفرسته یا حتی یه نسخه کَش شده از صفحه رو به کاربر نشون بده.

نصب و راه‌اندازی
نصب Nginx خیلی ساده‌ست توی اکثر سیستم‌عامل‌ها فقط با یه دستور می‌تونید نصبش کنید و بعدش به راحتی کانفیگش کنید.

sudo apt-get install nginx

در نهایت، اگه دنبال یه وب سرور سریع، پایدار و کم‌ مصرف هستید، حتماً یه نگاهی به Nginx بندازید. با این ابزار میتونید وبسایتتون رو خیلی بهتر کنید و تجربه بهتری برای کاربرانتون رقم بزنید. 🌐

امید وارم براتون مفید بوده باشه:)❤️

#nginx #web #وب #web_server


@ninja_learn_ir
👍73🔥2👌1