خب بچه ها فصل 3 هم تموم شد 🎉
از شنبه فصل 4 رو استارت میزنیم ❤️
از شنبه فصل 4 رو استارت میزنیم ❤️
❤3🔥1
اگه میخواید برای برنامه نویسی سیستم بگیرید، پست جدیدمون رو از دست ندید 🌹
https://www.instagram.com/p/DAGqMNOM0Np/?igsh=MXgwY3Nwc3V0M2c5dg==
https://www.instagram.com/p/DAGqMNOM0Np/?igsh=MXgwY3Nwc3V0M2c5dg==
❤2
🐇 استفاده از RabbitMQ برای Celery توی جنگو 🥦
امروز میخوایم در مورد Celery و RabbitMQ حرف بزنیم و ببینیم چطوری میتونیم از این دو تا ابزار خفن برای مدیریت کارهای پسزمینه توی Django استفاده کنیم 😎.
حالا Celery چیه؟ 🍃
اگه نمیدونید سلری چیه و چیکار میکنه میتونید به این پست سر بزنید 😉
حالا RabbitMQ چیه؟ 🐇
اگه نمیدونید ربیت ام کیو چیه و چیکار میکنه میتونید به این پست سر بزنید 😉
چرا باید از RabbitMQ برای Celery استفاده کنیم؟ 🧐
1⃣ پایداری و سرعت: RabbitMQ خیلی سریع و پایدار کار میکنه و میتونه حجم زیادی از پیامها رو مدیریت کنه.
2⃣ مقیاسپذیری (Scalability):
اگه پروژهات بزرگ شد، RabbitMQ میتونه بدون مشکل تسکهای بیشتری رو هندل کنه.
3⃣ پشتیبانی از Celery: Celery به خوبی با RabbitMQ سازگاره و به راحتی میتونن با هم کار کنن.
چجوری RabbitMQ رو برای Celery توی جنگو تنظیم کنیم؟ 🛠️
خب، بیایید بریم سراغ بخش فنی و ببینیم چطور میتونیم از RabbitMQ و Celery توی جنگو استفاده کنیم.
1⃣ نصب RabbitMQ و Celery
اول از همه باید RabbitMQ رو نصب کنی. اگه از اوبونتو استفاده میکنی، این دستور رو بزن:
حالا Celery رو نصب کن:
2⃣ تنظیمات Celery توی پروژه جنگو
توی پروژه جنگوت، یه فایل جدید به اسم
بعد توی فایل init.py پروژهات این خط رو اضافه کن تا Celery لود بشه:
3⃣ تنظیمات RabbitMQ توی settings.py:
توی settings.py، تنظیمات مربوط به RabbitMQ رو به Celery اضافه کن:
4⃣ ساختن تسکها (Tasks)
حالا که تنظیمات انجام شد، میتونیم تسکهای پسزمینه رو بسازیم. توی هر اپلیکیشنی که تسکها رو میخوای ایجاد کنی، یه فایل tasks.py بساز و تسکهات رو توش تعریف کن:
5⃣ اجرای Celery Worker
برای اینکه Celery تسکها رو هندل کنه، Worker راه بندازی. با این دستور میتونی Worker رو اجرا کنی:
جمعبندی 🎯
فهمیدیم RabbitMQ و Celery یه ترکیب عالی برای اجرای تسکهای پسزمینه توی پروژههای جنگو هستن. با استفاده از RabbitMQ بهعنوان message broker و Celery برای مدیریت تسکها، میتونی کارهای سنگین و زمانبر رو به صورت پسزمینه اجرا کنی و تجربه کاربری اپلیکیشن رو بهتر کنی 😎
امید وارم مفید بوده باشه :)
@ninja_learn_ir
امروز میخوایم در مورد Celery و RabbitMQ حرف بزنیم و ببینیم چطوری میتونیم از این دو تا ابزار خفن برای مدیریت کارهای پسزمینه توی Django استفاده کنیم 😎.
حالا Celery چیه؟ 🍃
اگه نمیدونید سلری چیه و چیکار میکنه میتونید به این پست سر بزنید 😉
حالا RabbitMQ چیه؟ 🐇
اگه نمیدونید ربیت ام کیو چیه و چیکار میکنه میتونید به این پست سر بزنید 😉
چرا باید از RabbitMQ برای Celery استفاده کنیم؟ 🧐
1⃣ پایداری و سرعت: RabbitMQ خیلی سریع و پایدار کار میکنه و میتونه حجم زیادی از پیامها رو مدیریت کنه.
2⃣ مقیاسپذیری (Scalability):
اگه پروژهات بزرگ شد، RabbitMQ میتونه بدون مشکل تسکهای بیشتری رو هندل کنه.
3⃣ پشتیبانی از Celery: Celery به خوبی با RabbitMQ سازگاره و به راحتی میتونن با هم کار کنن.
چجوری RabbitMQ رو برای Celery توی جنگو تنظیم کنیم؟ 🛠️
خب، بیایید بریم سراغ بخش فنی و ببینیم چطور میتونیم از RabbitMQ و Celery توی جنگو استفاده کنیم.
1⃣ نصب RabbitMQ و Celery
اول از همه باید RabbitMQ رو نصب کنی. اگه از اوبونتو استفاده میکنی، این دستور رو بزن:
sudo apt-get install rabbitmq-server
حالا Celery رو نصب کن:
pip install celery
2⃣ تنظیمات Celery توی پروژه جنگو
توی پروژه جنگوت، یه فایل جدید به اسم
celery.py
بساز و تنظیمات Celery رو توش بنویس. این فایل معمولاً توی کنار settings.py قرار میگیره.from __future__ import absolute_import
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')
app = Celery('your_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
بعد توی فایل init.py پروژهات این خط رو اضافه کن تا Celery لود بشه:
from .celery import app as celery_app
3⃣ تنظیمات RabbitMQ توی settings.py:
توی settings.py، تنظیمات مربوط به RabbitMQ رو به Celery اضافه کن:
CELERY_BROKER_URL = 'amqp://localhost'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
4⃣ ساختن تسکها (Tasks)
حالا که تنظیمات انجام شد، میتونیم تسکهای پسزمینه رو بسازیم. توی هر اپلیکیشنی که تسکها رو میخوای ایجاد کنی، یه فایل tasks.py بساز و تسکهات رو توش تعریف کن:
from celery import shared_task
@shared_task
def send_email_task(email_address):
# کد ارسال ایمیل
print(f"ایمیل به {email_address} ارسال شد.")
5⃣ اجرای Celery Worker
برای اینکه Celery تسکها رو هندل کنه، Worker راه بندازی. با این دستور میتونی Worker رو اجرا کنی:
celery -A your_project worker --loglevel=info
جمعبندی 🎯
فهمیدیم RabbitMQ و Celery یه ترکیب عالی برای اجرای تسکهای پسزمینه توی پروژههای جنگو هستن. با استفاده از RabbitMQ بهعنوان message broker و Celery برای مدیریت تسکها، میتونی کارهای سنگین و زمانبر رو به صورت پسزمینه اجرا کنی و تجربه کاربری اپلیکیشن رو بهتر کنی 😎
#django #celery #rabbitmq #ambq
👍6❤3🔥3
💎 هدر Authentication چیه و چطوری ازش استفاده کنیم؟ 💎
امروز میخوایم درباره هدر Authentication صحبت کنیم، چیزی که اپلیکیشنهای وب برای احراز هویت (Authentication) استفاده میکنن و توی دنیای APIها خیلی کاربرد داره 😎.
هدر Authentication چیه؟ 🤔
هدر Authentication یه هدر HTTP هست که اطلاعات لازم برای احراز هویت کاربر رو توی درخواستها به سرور میفرسته. این هدر کمک میکنه که سرور بفهمه چه کسی داره درخواست رو میفرسته و اینکه اجازه دسترسی به منابع مختلف رو داره یا نه 🔐.
انواع هدر Authentication 🛡️
Basic Authentication 🔑
این سادهترین نوع Authentication هستش. توی این روش، نام کاربری و پسورد بهصورت base64 رمزگذاری میشن و بعد توی هدر قرار میگیرن. نمونهای از هدرش این شکلیه:
ولی چون اطلاعات رو بهصورت ساده (حتی با وجود base64) میفرسته، خیلی امن نیست و معمولاً توی HTTPS ازش استفاده میکنن.
Bearer Token 🏷️
توی این روش، از یه توکن (Token) بهجای نام کاربری و پسورد استفاده میکنن. این توکن معمولاً وقتی کاربر لاگین میکنه، از سرور میگیره و بعد توی درخواستها بهعنوان هدر ارسال میشه. هدرش این شکلیه:
این روش خیلی امنتر و محبوبتره، مخصوصاً توی APIهای مدرن و استفاده از JWT (JSON Web Tokens).
OAuth 2.0 🔑
این روش بیشتر برای احراز حویت با استفاده از سرویسهای بزرگی مثل گوگل و فیسبوک استفاده میشه. توی این مدل، شما یه Access Token از طرف سرویسدهنده میگیرید و بعد اون رو توی هدر میفرستید. خیلی شبیه به Bearer Token:
چطوری از هدر Authentication استفاده کنیم؟ 💻
فرض کن یه API داری که برای دسترسی به یه سری اطلاعات حساس نیاز به احراز هویت داره. برای اینکه کاربر بتونه به این اطلاعات دسترسی داشته باشه، باید توی درخواستش هدر Authentication رو بهدرستی تنظیم کنه.
مثلاً برای ارسال یه درخواست به API با استفاده از Bearer Token:
چرا هدر Authentication مهمه؟ 🛠️
1⃣ امنیت اطلاعات:
این هدر به سرور کمک میکنه مطمئن بشه که درخواست از یه کاربر معتبر ارسال شده.
2⃣ مدیریت دسترسی:
با استفاده از این هدر، میتونی سطح دسترسیهای مختلف رو برای کاربرها تنظیم کنی. مثلاً بعضی کاربران فقط به بخشهایی از اپلیکیشن دسترسی داشته باشن.
3⃣ یکپارچگی با API:
خیلی از APIها مثل REST و GraphQL نیاز دارن که کاربر با ارسال هدر Authentication خودش رو احراز هویت کنه.
جمعبندی 🎯
فهمیدیم هدر Authentication یکی از پرکاربردترین ابزارها برای احراز هویت توی وب و APIهاست. روشهای مختلفی برای استفاده ازش وجود داره، مثل Basic، Bearer Token و OAuth که بسته به نیازت میتونی از هرکدومشون استفاده کنی.
امید وارم مفید بوده باشه :)
@ninja_learn_ir
امروز میخوایم درباره هدر Authentication صحبت کنیم، چیزی که اپلیکیشنهای وب برای احراز هویت (Authentication) استفاده میکنن و توی دنیای APIها خیلی کاربرد داره 😎.
هدر Authentication چیه؟ 🤔
هدر Authentication یه هدر HTTP هست که اطلاعات لازم برای احراز هویت کاربر رو توی درخواستها به سرور میفرسته. این هدر کمک میکنه که سرور بفهمه چه کسی داره درخواست رو میفرسته و اینکه اجازه دسترسی به منابع مختلف رو داره یا نه 🔐.
انواع هدر Authentication 🛡️
Basic Authentication 🔑
این سادهترین نوع Authentication هستش. توی این روش، نام کاربری و پسورد بهصورت base64 رمزگذاری میشن و بعد توی هدر قرار میگیرن. نمونهای از هدرش این شکلیه:
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
ولی چون اطلاعات رو بهصورت ساده (حتی با وجود base64) میفرسته، خیلی امن نیست و معمولاً توی HTTPS ازش استفاده میکنن.
Bearer Token 🏷️
توی این روش، از یه توکن (Token) بهجای نام کاربری و پسورد استفاده میکنن. این توکن معمولاً وقتی کاربر لاگین میکنه، از سرور میگیره و بعد توی درخواستها بهعنوان هدر ارسال میشه. هدرش این شکلیه:
Authorization: Bearer your-token-here
این روش خیلی امنتر و محبوبتره، مخصوصاً توی APIهای مدرن و استفاده از JWT (JSON Web Tokens).
OAuth 2.0 🔑
این روش بیشتر برای احراز حویت با استفاده از سرویسهای بزرگی مثل گوگل و فیسبوک استفاده میشه. توی این مدل، شما یه Access Token از طرف سرویسدهنده میگیرید و بعد اون رو توی هدر میفرستید. خیلی شبیه به Bearer Token:
Authorization: Bearer access-token
چطوری از هدر Authentication استفاده کنیم؟ 💻
فرض کن یه API داری که برای دسترسی به یه سری اطلاعات حساس نیاز به احراز هویت داره. برای اینکه کاربر بتونه به این اطلاعات دسترسی داشته باشه، باید توی درخواستش هدر Authentication رو بهدرستی تنظیم کنه.
مثلاً برای ارسال یه درخواست به API با استفاده از Bearer Token:
curl -H "Authorization: Bearer your-token-here" https://api.example.com/data
چرا هدر Authentication مهمه؟ 🛠️
1⃣ امنیت اطلاعات:
این هدر به سرور کمک میکنه مطمئن بشه که درخواست از یه کاربر معتبر ارسال شده.
2⃣ مدیریت دسترسی:
با استفاده از این هدر، میتونی سطح دسترسیهای مختلف رو برای کاربرها تنظیم کنی. مثلاً بعضی کاربران فقط به بخشهایی از اپلیکیشن دسترسی داشته باشن.
3⃣ یکپارچگی با API:
خیلی از APIها مثل REST و GraphQL نیاز دارن که کاربر با ارسال هدر Authentication خودش رو احراز هویت کنه.
جمعبندی 🎯
فهمیدیم هدر Authentication یکی از پرکاربردترین ابزارها برای احراز هویت توی وب و APIهاست. روشهای مختلفی برای استفاده ازش وجود داره، مثل Basic، Bearer Token و OAuth که بسته به نیازت میتونی از هرکدومشون استفاده کنی.
#authentication #headers #security
❤8👍1🔥1
اگه به عنوان یه برنامه نویس چالش پروژه گرفتن دارید پست جدیدمون رو از دست ندید 😉
https://www.instagram.com/p/DAL0HKZos8Q/?utm_source=ig_web_copy_link&igsh=MzRlODBiNWFlZA==
https://www.instagram.com/p/DAL0HKZos8Q/?utm_source=ig_web_copy_link&igsh=MzRlODBiNWFlZA==
❤2
📕 کتاب REST API Design Rulebook
📌 فصل چهارم: Metadata Design
📍پارت: اول
#کتاب
💎 HTTP Headers 💎
توی درخواست و پاسخهای HTTP، یه سری اطلاعات متا (Metadata) از طریق هدرهای مختلف منتقل میشن. HTTP یه سری هدر استاندارد داره که بعضیاشون درباره منابع درخواست شده اطلاعات میدن. یه سری دیگه نشون میدن که چه نوع دیتایی توی پیام وجود داره. یه تعداد دیگه هم برای کنترل کش (Cache) استفاده میشن.
توی این متن کوتاه چندتا قانون مهم برای استفاده از هدرهای استاندارد HTTP توی طراحی REST API ها پیشنهاد شده.
⭕️ استفاده از Content-Type اجباریه
هدر Content-Type نوع دادهای که توی body درخواست یا پاسخ هست رو مشخص میکنه. مقدار این هدر یه رشته متنی با فرمت خاصه که بهش "Media Type" گفته میشه. سرور و کلاینت با استفاده از مقدار این هدر متوجه میشن چطوری باید بایتهای موجود توی بدنه پیام رو پردازش کنن.
⭕️ استفاده از Content-Length توصیه میشه
هدر Content-Length اندازه بدنه پیام (entity-body) رو بر حسب بایت مشخص میکنه. این هدر توی پاسخها مهمه چون دو تا کار رو راحت میکنه:
اول اینکه کلاینت متوجه میشه که آیا تعداد بایتهای درست رو خونده یا نه. دوم اینکه میتونه با یه درخواست HEAD بفهمه که اندازه بدنه پیام چقدره بدون اینکه نیاز باشه کل پیام رو دانلود کنه.
⭕️ استفاده از Last-Modified توی پاسخها توصیه میشه
هدر Last-Modified فقط توی پیامهای پاسخ استفاده میشه. مقدار این هدر یه timestamp (زمان دقیق) هست که نشون میده آخرین باری که چیزی توی منابع تغییر کرده کی بوده. کلاینت و کشهای میانی (Cache Intermediaries) میتونن از این هدر استفاده کنن تا بفهمن نسخه محلیشون از منبع بهروز هست یا نه. این هدر باید همیشه توی پاسخ به درخواستهای GET باشه.
⭕️ استفاده از ETag توی ریسپانس ها توصیه میشه
مقدار ETag یه رشته متنی غیرشفافه (opaque) که یه "نسخه" خاص از منبع (Resource) توی body ریسپانس رو شناسایی میکنه. body پیام HTTP شامل هدرها و body اصلی پیام میشه. مقدار ETag میتونه هر رشتهای باشه، به شرطی که وقتی نمایشی از منبع تغییر میکنه، مقدارش هم تغییر کنه. این هدر باید همیشه توی پاسخ به درخواستهای GET ارسال بشه.
کلاینتها میتونن مقدار هدر ETag رو ذخیره کنن تا توی درخواستهای GET بعدی، ازش استفاده کنن؛ به عنوان مقدار هدر شرطی If-None-Match. اگه API تشخیص بده که ETag تغییر نکرده، میتونه از ارسال دوبارهی بدنه پیام صرفنظر کنه و در نتیجه توی زمان و پهنای باند صرفهجویی بشه.
@ninja_learn_ir
⭕️ store ها باید از درخواستهای شرطی PUT پشتیبانی کنن
وقتی برای ذخیره یه منبع از متد PUT استفاده میکنه (چه برای ایجاد و چه بهروزرسانی)، ممکنه برای API مشخص نباشه که درخواست کلاینت برای درج داده جدیده یا بهروزرسانی. اینجاست که HTTP از طریق هدرها ابزار لازم رو در اختیار API میذاره تا این ابهام رو برطرف کنه. برای این کار، API باید به هدرهای شرطی کلاینت مثل If-Unmodified-Since یا If-Match متکی باشه تا منظور دقیق کلاینت رو بفهمه.
هدر If-Unmodified-Since از API میخواد که فقط در صورتی عملیات رو انجام بده که از زمانی که توی این هدر مشخص شده، وضعیت منبع تغییری نکرده باشه.
هدر If-Match یه مقدار ETag رو از کلاینت میگیره، که از پاسخ قبلی API ذخیره شده. اگه این مقدار ETag با وضعیت فعلی منبع مطابقت داشته باشه، API درخواست PUT رو انجام میده؛ وگرنه درخواست رو رد میکنه.
✅ مثال برای درخواستهای شرطی PUT
فرض کنیم دو کلاینت (کلاینت#1 و کلاینت#2) از یه منبع ذخیرهی API با آدرس
کلاینت#1 یه درخواست PUT میفرسته تا یه داده جدید توی مسیر
چند وقت بعد، کلاینت#2 درخواست PUT برای همون مسیر (
@ninja_learn_ir
📌 فصل چهارم: Metadata Design
📍پارت: اول
#کتاب
💎 HTTP Headers 💎
توی درخواست و پاسخهای HTTP، یه سری اطلاعات متا (Metadata) از طریق هدرهای مختلف منتقل میشن. HTTP یه سری هدر استاندارد داره که بعضیاشون درباره منابع درخواست شده اطلاعات میدن. یه سری دیگه نشون میدن که چه نوع دیتایی توی پیام وجود داره. یه تعداد دیگه هم برای کنترل کش (Cache) استفاده میشن.
توی این متن کوتاه چندتا قانون مهم برای استفاده از هدرهای استاندارد HTTP توی طراحی REST API ها پیشنهاد شده.
⭕️ استفاده از Content-Type اجباریه
هدر Content-Type نوع دادهای که توی body درخواست یا پاسخ هست رو مشخص میکنه. مقدار این هدر یه رشته متنی با فرمت خاصه که بهش "Media Type" گفته میشه. سرور و کلاینت با استفاده از مقدار این هدر متوجه میشن چطوری باید بایتهای موجود توی بدنه پیام رو پردازش کنن.
⭕️ استفاده از Content-Length توصیه میشه
هدر Content-Length اندازه بدنه پیام (entity-body) رو بر حسب بایت مشخص میکنه. این هدر توی پاسخها مهمه چون دو تا کار رو راحت میکنه:
اول اینکه کلاینت متوجه میشه که آیا تعداد بایتهای درست رو خونده یا نه. دوم اینکه میتونه با یه درخواست HEAD بفهمه که اندازه بدنه پیام چقدره بدون اینکه نیاز باشه کل پیام رو دانلود کنه.
⭕️ استفاده از Last-Modified توی پاسخها توصیه میشه
هدر Last-Modified فقط توی پیامهای پاسخ استفاده میشه. مقدار این هدر یه timestamp (زمان دقیق) هست که نشون میده آخرین باری که چیزی توی منابع تغییر کرده کی بوده. کلاینت و کشهای میانی (Cache Intermediaries) میتونن از این هدر استفاده کنن تا بفهمن نسخه محلیشون از منبع بهروز هست یا نه. این هدر باید همیشه توی پاسخ به درخواستهای GET باشه.
⭕️ استفاده از ETag توی ریسپانس ها توصیه میشه
مقدار ETag یه رشته متنی غیرشفافه (opaque) که یه "نسخه" خاص از منبع (Resource) توی body ریسپانس رو شناسایی میکنه. body پیام HTTP شامل هدرها و body اصلی پیام میشه. مقدار ETag میتونه هر رشتهای باشه، به شرطی که وقتی نمایشی از منبع تغییر میکنه، مقدارش هم تغییر کنه. این هدر باید همیشه توی پاسخ به درخواستهای GET ارسال بشه.
کلاینتها میتونن مقدار هدر ETag رو ذخیره کنن تا توی درخواستهای GET بعدی، ازش استفاده کنن؛ به عنوان مقدار هدر شرطی If-None-Match. اگه API تشخیص بده که ETag تغییر نکرده، میتونه از ارسال دوبارهی بدنه پیام صرفنظر کنه و در نتیجه توی زمان و پهنای باند صرفهجویی بشه.
⭕️ store ها باید از درخواستهای شرطی PUT پشتیبانی کنن
وقتی برای ذخیره یه منبع از متد PUT استفاده میکنه (چه برای ایجاد و چه بهروزرسانی)، ممکنه برای API مشخص نباشه که درخواست کلاینت برای درج داده جدیده یا بهروزرسانی. اینجاست که HTTP از طریق هدرها ابزار لازم رو در اختیار API میذاره تا این ابهام رو برطرف کنه. برای این کار، API باید به هدرهای شرطی کلاینت مثل If-Unmodified-Since یا If-Match متکی باشه تا منظور دقیق کلاینت رو بفهمه.
هدر If-Unmodified-Since از API میخواد که فقط در صورتی عملیات رو انجام بده که از زمانی که توی این هدر مشخص شده، وضعیت منبع تغییری نکرده باشه.
هدر If-Match یه مقدار ETag رو از کلاینت میگیره، که از پاسخ قبلی API ذخیره شده. اگه این مقدار ETag با وضعیت فعلی منبع مطابقت داشته باشه، API درخواست PUT رو انجام میده؛ وگرنه درخواست رو رد میکنه.
✅ مثال برای درخواستهای شرطی PUT
فرض کنیم دو کلاینت (کلاینت#1 و کلاینت#2) از یه منبع ذخیرهی API با آدرس
/objects
برای اشتراکگذاری اطلاعات استفاده میکنن.کلاینت#1 یه درخواست PUT میفرسته تا یه داده جدید توی مسیر
/objects/2113
ذخیره کنه. این مسیر قبلاً توی API وجود نداشته، پس API این درخواست رو بهعنوان "ایجاد" (Insert) تفسیر میکنه، منبع جدید رو میسازه و با کد 201 ("Created") پاسخ میده.چند وقت بعد، کلاینت#2 درخواست PUT برای همون مسیر (
/objects/2113
) میفرسته. حالا API این مسیر رو به یه منبع موجود متصل میکنه. اما چون اطلاعات کافی نداره که بفهمه آیا کلاینت#2 میخواد دادهی قبلی رو بهروزرسانی کنه یا نه، درخواست رو با کد 409 ("Conflict") رد میکنه و باید توی بدنه پاسخ هم یه توضیح از خطا بده.❤5
اگه کلاینت#2 تصمیم بگیره داده قبلی رو بهروزرسانی کنه، میتونه دوباره درخواست رو با هدر If-Match بفرسته. ولی اگه مقدار ETag توی هدر با مقدار فعلی منبع مطابقت نداشته باشه، API باید با کد 412 ("Precondition Failed") پاسخ بده. اما اگه شرط هدر مطابقت داشته باشه، API باید وضعیت منبع رو بهروزرسانی کنه و با کد 200 ("OK") یا 204 ("No Content") پاسخ بده.
اگه API یه نمای جدید از وضعیت منبع رو برگردونه، باید هدرهای Last-Modified و ETag رو با مقادیر بهروزرسانی شده توی پاسخ بذاره.
⭕️ استفاده از Location برای مشخص کردن URI منبع جدید
مقدار هدر Location یه URI هست که منبع جدیدی رو که ممکنه برای کلاینت مهم باشه، شناسایی میکنه. وقتی که API یه منبع جدید رو توی یه مجموعه یا فروشگاه ایجاد میکنه، باید هدر Location رو توی پاسخ قرار بده تا URI منبع جدید رو مشخص کنه.
توی پاسخ 202 ("Accepted")، این هدر میتونه کلاینت رو به وضعیت عملیاتی یه منبع کنترل غیرهمزمان (asynchronous controller) هدایت کنه.
⭕️ از هدرهای Cache-Control، Expires و Date برای کش کردن استفاده بشه
کش کردن یکی از قابلیتهای مفید HTTP هست که میتونه به کاهش تأخیرهای تجربهشده توسط کلاینت، افزایش اطمینانپذیری، و کاهش بار روی سرورهای API کمک کنه. کشها میتونن هر جایی باشن؛ توی شبکهی سرور API، شبکههای تحویل محتوا (CDN)، یا حتی شبکهی کلاینت.
وقتی که یه نمایشی از داده رو ارسال میکنی، باید هدر Cache-Control رو با مقدار max-age (به ثانیه) قرار بدی تا طول عمر تازگی داده رو مشخص کنی. به عنوان مثال:
برای پشتیبانی از کشهای قدیمی HTTP 1.0، API باید هدر Expires رو با یه تاریخ و زمان انقضا قرار بده. این مقدار برابر با زمانی هست که API داده رو تولید کرده به اضافهی طول عمر تازگی داده. همچنین API باید هدر Date رو با تاریخ و زمانی که پاسخ رو برگردونده، بذاره. این هدر کمک میکنه کلاینتها طول عمر تازگی داده رو بهعنوان اختلاف بین مقادیر Expires و Date محاسبه کنن. به عنوان مثال:
⭕️ از هدرهای Cache-Control، Expires و Pragma میشه برای جلوگیری از کش استفاده کرد
اگه پاسخ API نباید کش بشه، باید هدر Cache-Control با مقادیر
⭕️ کش کردن باید تشویق بشه
استفاده از
⭕️ هدرهای کشکردن باید با پاسخهای 200 (“OK”) استفاده بشن
تو پاسخهای موفقیتآمیز GET و HEAD باید هدرهای کشکردن انقضا قرار داده بشن. هرچند روش POST هم قابل کش شدنه، اکثر کشها اون رو به عنوان غیرقابل کش در نظر میگیرن. نیازی نیست این هدرها رو برای متدهای دیگه تنظیم کنی.
⭕️ هدرهای کشکردن میتونن بهصورت اختیاری با پاسخهای 3xx و 4xx استفاده بشن
علاوه بر پاسخهای موفقیتآمیز 200 (“OK”)، میتونی تو پاسخهای 3xx و 4xx هم هدرهای کشکردن اضافه کنی. این کار که بهش کشکردن منفی میگن، کمک میکنه تا بار ریدایرکتها و خطاها روی API کاهش پیدا کنه.
⭕️ از هدرهای HTTP سفارشی نباید برای تغییر رفتار متدهای HTTP استفاده بشه
هدرهای سفارشی رو میشه فقط برای اطلاعرسانی استفاده کرد. کلاینتها و سرورها باید به شکلی پیادهسازی بشن که وقتی هدرهای سفارشی مورد انتظار رو پیدا نمیکنن، دچار خطا نشن.
اگه اطلاعاتی که توی هدر سفارشی قرار میدی برای تفسیر درست درخواست یا پاسخ ضروریه، بهتره اون اطلاعات رو توی بدنه درخواست یا پاسخ، یا توی URI استفاده کنی. از هدرهای سفارشی برای این کاربردها اجتناب کن.
@ninja_learn_ir
اگه API یه نمای جدید از وضعیت منبع رو برگردونه، باید هدرهای Last-Modified و ETag رو با مقادیر بهروزرسانی شده توی پاسخ بذاره.
⭕️ استفاده از Location برای مشخص کردن URI منبع جدید
مقدار هدر Location یه URI هست که منبع جدیدی رو که ممکنه برای کلاینت مهم باشه، شناسایی میکنه. وقتی که API یه منبع جدید رو توی یه مجموعه یا فروشگاه ایجاد میکنه، باید هدر Location رو توی پاسخ قرار بده تا URI منبع جدید رو مشخص کنه.
توی پاسخ 202 ("Accepted")، این هدر میتونه کلاینت رو به وضعیت عملیاتی یه منبع کنترل غیرهمزمان (asynchronous controller) هدایت کنه.
⭕️ از هدرهای Cache-Control، Expires و Date برای کش کردن استفاده بشه
کش کردن یکی از قابلیتهای مفید HTTP هست که میتونه به کاهش تأخیرهای تجربهشده توسط کلاینت، افزایش اطمینانپذیری، و کاهش بار روی سرورهای API کمک کنه. کشها میتونن هر جایی باشن؛ توی شبکهی سرور API، شبکههای تحویل محتوا (CDN)، یا حتی شبکهی کلاینت.
وقتی که یه نمایشی از داده رو ارسال میکنی، باید هدر Cache-Control رو با مقدار max-age (به ثانیه) قرار بدی تا طول عمر تازگی داده رو مشخص کنی. به عنوان مثال:
Cache-Control: max-age=60, must-revalidate
برای پشتیبانی از کشهای قدیمی HTTP 1.0، API باید هدر Expires رو با یه تاریخ و زمان انقضا قرار بده. این مقدار برابر با زمانی هست که API داده رو تولید کرده به اضافهی طول عمر تازگی داده. همچنین API باید هدر Date رو با تاریخ و زمانی که پاسخ رو برگردونده، بذاره. این هدر کمک میکنه کلاینتها طول عمر تازگی داده رو بهعنوان اختلاف بین مقادیر Expires و Date محاسبه کنن. به عنوان مثال:
Date: Tue, 15 Nov 1994 08:12:31 GMT
Expires: Thu, 01 Dec 1994 16:00:00 GMT
⭕️ از هدرهای Cache-Control، Expires و Pragma میشه برای جلوگیری از کش استفاده کرد
اگه پاسخ API نباید کش بشه، باید هدر Cache-Control با مقادیر
no-cache
و no-store
قرار بگیره. برای سازگاری با کشهای قدیمی HTTP 1.0، هدرهای Pragma: no-cache و Expires: 0 هم باید اضافه بشن.⭕️ کش کردن باید تشویق بشه
استفاده از
no-cache
باعث میشه هیچ کشی نتونه پاسخهای کش شده رو ارائه بده. APIهای REST نباید از این دستور استفاده کنن، مگر اینکه واقعاً ضروری باشه. بهجای استفاده از `no-cache`، بهتره مقدار کمی برای max-age تنظیم بشه تا کلاینتها بتونن حداقل برای یه مدت کوتاه از نسخههای کش شده استفاده کنن، بدون اینکه تازگی دادهها به طور قابل توجهی تحت تاثیر قرار بگیره.⭕️ هدرهای کشکردن باید با پاسخهای 200 (“OK”) استفاده بشن
تو پاسخهای موفقیتآمیز GET و HEAD باید هدرهای کشکردن انقضا قرار داده بشن. هرچند روش POST هم قابل کش شدنه، اکثر کشها اون رو به عنوان غیرقابل کش در نظر میگیرن. نیازی نیست این هدرها رو برای متدهای دیگه تنظیم کنی.
⭕️ هدرهای کشکردن میتونن بهصورت اختیاری با پاسخهای 3xx و 4xx استفاده بشن
علاوه بر پاسخهای موفقیتآمیز 200 (“OK”)، میتونی تو پاسخهای 3xx و 4xx هم هدرهای کشکردن اضافه کنی. این کار که بهش کشکردن منفی میگن، کمک میکنه تا بار ریدایرکتها و خطاها روی API کاهش پیدا کنه.
⭕️ از هدرهای HTTP سفارشی نباید برای تغییر رفتار متدهای HTTP استفاده بشه
هدرهای سفارشی رو میشه فقط برای اطلاعرسانی استفاده کرد. کلاینتها و سرورها باید به شکلی پیادهسازی بشن که وقتی هدرهای سفارشی مورد انتظار رو پیدا نمیکنن، دچار خطا نشن.
اگه اطلاعاتی که توی هدر سفارشی قرار میدی برای تفسیر درست درخواست یا پاسخ ضروریه، بهتره اون اطلاعات رو توی بدنه درخواست یا پاسخ، یا توی URI استفاده کنی. از هدرهای سفارشی برای این کاربردها اجتناب کن.
❤6👍1
اگه به عنوان یه برنامه نویس دغدغه و چالش درآمد زایی داری پست جدیدمون رو ببین 😁🤟
https://www.instagram.com/p/DANmAZ5ssWH/?igsh=MWd4MGF4bHZkNjVxMg==
https://www.instagram.com/p/DANmAZ5ssWH/?igsh=MWd4MGF4bHZkNjVxMg==
❤1
🚨 مشکل امنیتی XSS چیه و چطوری جلوی اونو بگیریم؟ 🚨
سلام دوستان! امروز میخوایم درباره یکی از خطرناکترین حملات امنیتی وب یعنی XSS (Cross-Site Scripting) صحبت کنیم. این حمله خیلی وقتها دست کم گرفته میشه، ولی میتونه خیلی از سایتها رو به مشکل بندازه و اطلاعات کاربران رو به خطر بندازه 😱.
حالا XSS چیه؟ 🤔
خب XSS یه نوع حمله امنیتیه که هکرها توش میان و کدهای مخرب جاوااسکریپت رو توی صفحات وب قرار میدن. این کدها معمولاً از طریق فرمها، URLها یا بخشهای ورودی دیگه وارد سایت میشه. وقتی این کدها اجرا بشن، هکر میتونه اطلاعات حساس کاربرها رو بدزده، کوکیها رو سرقت کنه یا حتی کاربر رو به صفحات مخرب ببره 😬.
انواع XSS 🚦
Stored XSS 🗃️
توی این روش، کد مخرب توی دیتابیس سایت ذخیره میشه. هر بار که کاربر صفحهای رو باز میکنه، کد مخرب از دیتابیس خونده میشه و اجرا میشه. این روش خیلی خطرناکه چون ممکنه تعداد زیادی کاربر رو تحت تأثیر قرار بده.
Reflected XSS 🔄
توی این روش، کد مخرب از طریق URL به سرور فرستاده میشه و سرور بدون اینکه فیلترش کنه، اون رو به کاربر برمیگردونه. کاربر هم وقتی URL مخرب رو باز کنه، کد جاوااسکریپت اجرا میشه.
DOM-based XSS 🧩
توی این نوع از حمله، کد مخرب مستقیماً توی سمت کلاینت (مرورگر) تزریق و اجرا میشه، بدون اینکه نیاز باشه سرور دخالتی داشته باشه.
چه خطرهایی داره؟ ⚠️
1️⃣ دزدیدن اطلاعات کاربران:
هکرها میتونن با استفاده از XSS به اطلاعات حساس کاربرها مثل نام کاربری، پسورد و حتی اطلاعات بانکی دسترسی پیدا کنن.
2️⃣ هک کردن سشنها:
هکر میتونه با دزدیدن کوکیهای سشن کاربر، وارد حسابش بشه و از اون سوءاستفاده کنه.
3️⃣ ریدایرکت کردن کاربران به سایتهای مخرب:
با استفاده از کدهای جاوااسکریپت، کاربر رو به صفحاتی ببره که آلوده به بدافزار یا ویروس هستن.
چطور جلوی XSS رو بگیریم؟ 🛡️
1️⃣ فیلتر کردن ورودیهای کاربر:
هر ورودی که از کاربر میگیری، حتماً باید فیلتر و اعتبارسنجی بشه. نذار کاربر بتونه کدهای جاوااسکریپت یا HTML توی فرمها بنویسه.
2️⃣ ؛Encode کردن خروجیها:
حتماً دادههایی که از سرور به کلاینت میفرستی رو Encode کن. این کار جلوی اجرا شدن کدهای مخرب جاوااسکریپت رو میگیره.
3️⃣ استفاده از CSP (Content Security Policy):
با CSP میتونی محدود کنی که کدهای جاوااسکریپت فقط از منابع مطمئن لود بشن و نذاری هکرها کدهای خودشون رو اجرا کنن.
4️⃣ استفاده از کتابخونههای امن:
کتابخونههایی مثل DOMPurify برای فیلتر کردن کدهای HTML و جاوااسکریپت از سمت کاربر خیلی مفیدن.
جمعبندی 🎯
فهمیدیم XSS یکی از خطرناکترین حملات وبه که اگه جلوی اون رو نگیریم، میتونه خسارتهای زیادی به امنیت سایت بزنه. با فیلتر کردن ورودیها، Encode کردن خروجیها و استفاده از سیاستهای امنیتی مثل CSP میتونیم جلوی این نوع حملات رو بگیریم. پس حتماً حواست به امنیت اپلیکیشنت باشه! 😎
امید وارم مفید بود باشه :)
#xss #امنیت
@ninja_learn_ir
سلام دوستان! امروز میخوایم درباره یکی از خطرناکترین حملات امنیتی وب یعنی XSS (Cross-Site Scripting) صحبت کنیم. این حمله خیلی وقتها دست کم گرفته میشه، ولی میتونه خیلی از سایتها رو به مشکل بندازه و اطلاعات کاربران رو به خطر بندازه 😱.
حالا XSS چیه؟ 🤔
خب XSS یه نوع حمله امنیتیه که هکرها توش میان و کدهای مخرب جاوااسکریپت رو توی صفحات وب قرار میدن. این کدها معمولاً از طریق فرمها، URLها یا بخشهای ورودی دیگه وارد سایت میشه. وقتی این کدها اجرا بشن، هکر میتونه اطلاعات حساس کاربرها رو بدزده، کوکیها رو سرقت کنه یا حتی کاربر رو به صفحات مخرب ببره 😬.
انواع XSS 🚦
Stored XSS 🗃️
توی این روش، کد مخرب توی دیتابیس سایت ذخیره میشه. هر بار که کاربر صفحهای رو باز میکنه، کد مخرب از دیتابیس خونده میشه و اجرا میشه. این روش خیلی خطرناکه چون ممکنه تعداد زیادی کاربر رو تحت تأثیر قرار بده.
Reflected XSS 🔄
توی این روش، کد مخرب از طریق URL به سرور فرستاده میشه و سرور بدون اینکه فیلترش کنه، اون رو به کاربر برمیگردونه. کاربر هم وقتی URL مخرب رو باز کنه، کد جاوااسکریپت اجرا میشه.
DOM-based XSS 🧩
توی این نوع از حمله، کد مخرب مستقیماً توی سمت کلاینت (مرورگر) تزریق و اجرا میشه، بدون اینکه نیاز باشه سرور دخالتی داشته باشه.
چه خطرهایی داره؟ ⚠️
1️⃣ دزدیدن اطلاعات کاربران:
هکرها میتونن با استفاده از XSS به اطلاعات حساس کاربرها مثل نام کاربری، پسورد و حتی اطلاعات بانکی دسترسی پیدا کنن.
2️⃣ هک کردن سشنها:
هکر میتونه با دزدیدن کوکیهای سشن کاربر، وارد حسابش بشه و از اون سوءاستفاده کنه.
3️⃣ ریدایرکت کردن کاربران به سایتهای مخرب:
با استفاده از کدهای جاوااسکریپت، کاربر رو به صفحاتی ببره که آلوده به بدافزار یا ویروس هستن.
چطور جلوی XSS رو بگیریم؟ 🛡️
1️⃣ فیلتر کردن ورودیهای کاربر:
هر ورودی که از کاربر میگیری، حتماً باید فیلتر و اعتبارسنجی بشه. نذار کاربر بتونه کدهای جاوااسکریپت یا HTML توی فرمها بنویسه.
2️⃣ ؛Encode کردن خروجیها:
حتماً دادههایی که از سرور به کلاینت میفرستی رو Encode کن. این کار جلوی اجرا شدن کدهای مخرب جاوااسکریپت رو میگیره.
3️⃣ استفاده از CSP (Content Security Policy):
با CSP میتونی محدود کنی که کدهای جاوااسکریپت فقط از منابع مطمئن لود بشن و نذاری هکرها کدهای خودشون رو اجرا کنن.
4️⃣ استفاده از کتابخونههای امن:
کتابخونههایی مثل DOMPurify برای فیلتر کردن کدهای HTML و جاوااسکریپت از سمت کاربر خیلی مفیدن.
جمعبندی 🎯
فهمیدیم XSS یکی از خطرناکترین حملات وبه که اگه جلوی اون رو نگیریم، میتونه خسارتهای زیادی به امنیت سایت بزنه. با فیلتر کردن ورودیها، Encode کردن خروجیها و استفاده از سیاستهای امنیتی مثل CSP میتونیم جلوی این نوع حملات رو بگیریم. پس حتماً حواست به امنیت اپلیکیشنت باشه! 😎
👍5❤1
توی پست جدیدمون داکر رو معرفی کردیم، یه سر بهش بزنید 🌹
https://www.instagram.com/p/DAQGDXQIRcI/?igsh=NHd2czUxYmF5azZ4
https://www.instagram.com/p/DAQGDXQIRcI/?igsh=NHd2czUxYmF5azZ4
❤2
🌳 همهچی درباره B-Tree توی دیتابیسهای رابطهای 🌳
امروز میخوایم درباره B-Tree توی دیتابیسهای رابطهای صحبت کنیم. اگه تا حالا با دیتابیسهای مثل MySQL یا PostgreSQL کار کرده باشی، احتمالاً اسم B-Tree به گوشت خورده. B-Tree یکی از مهمترین ساختارهای داده توی دیتابیسهاست که برای ایندکس کردن و جستجوی سریع دادهها استفاده میشه 📈.
حالا B-Tree چیه؟ 🌳
خب B-Tree یه ساختار درختی (tree structure) هست که توی ایندکسهای دیتابیس استفاده میشه. این درخت بهصورت بالانس طراحی شده، یعنی همه شاخهها از ریشه تا برگها تقریباً به یه اندازه طول دارن. این باعث میشه عملیات جستجو، درج، حذف و بهروزرسانی دادهها با سرعت بالایی انجام بشه 🚀.
توی B-Tree، هر گره (node) میتونه چندین کلید (key) و فرزند (child) داشته باشه. این یعنی برخلاف درختهای دودویی معمولی که هر گره فقط ۲ فرزند داره، توی B-Tree هر گره میتونه چند فرزند و کلید داشته باشه. این باعث میشه که عمق درخت کم بشه و دسترسی به دادهها سریعتر باشه.
چرا B-Tree توی دیتابیسها استفاده میشه؟ 🤔
1⃣ سرعت بالای جستجو 🔍
یکی از مزیتهای بزرگ B-Tree اینه که جستجو توی اون خیلی سریع انجام میشه. چون این درخت بهصورت متوازن طراحی شده، عمق زیادی نداره و سریع میشه به دادهها رسید.
2⃣ مناسب برای عملیات درج و حذف ➕➖
خب B-Tree نهتنها برای جستجو عالیه، بلکه برای درج و حذف دادهها هم خیلی بهینه است. وقتی یه داده جدید رو وارد میکنی یا دادهای رو حذف میکنی، درخت همچنان بالانس خودش رو حفظ میکنه و کارایی رو پایین نمیاره.
3. مقیاسپذیری 📏
دیتابیسهایی مثل MySQL و PostgreSQL برای اینکه بتونن حجم زیادی از دادهها رو مدیریت کنن، از B-Tree استفاده میکنن. این ساختار داده بهخاطر توانایی مدیریت تعداد زیادی از کلیدها و گرهها، مقیاسپذیری خوبی داره.
چطوری B-Tree کار میکنه؟ ⚙️
فرض کن یه جدول توی دیتابیس داری که میخوای ازش بهسرعت دادههایی رو پیدا کنی. اگه این جدول بزرگ باشه، جستجوی خطی خیلی طول میکشه. اینجاست که ایندکس به کمک میاد! وقتی یه ایندکس میسازی، دیتابیس از B-Tree برای ذخیره کردن اون ایندکس استفاده میکنه.
مثلاً اگه یه کوئری مثل این داشته باشی:
اگه روی ستون
تفاوت B-Tree و B+Tree چیه؟ 🤨
خیلی از دیتابیسهای مدرن از نسخهای به نام B+Tree استفاده میکنن. فرق B+Tree اینه که همه دادهها فقط توی برگها (leaf nodes) ذخیره میشن و گرههای میانی فقط برای جستجو استفاده میشن. این باعث میشه که دسترسی به دادهها سریعتر بشه، چون برگها بهصورت مرتب ذخیره شدن و بهراحتی میشه بین اونها پیمایش کرد.
چطوری ایندکس B-Tree بسازیم؟ 🛠️
ساختن ایندکس B-Tree توی دیتابیس خیلی ساده است. مثلاً توی MySQL میتونی اینجوری یه ایندکس روی ستون
با این کار، دیتابیس یه index برای ستون
جمعبندی 🎯
فهمیدیم B-Tree یه ساختار داده عالی برای مدیریت ایندکسها توی دیتابیسهای رابطهایه. سرعت بالای جستجو، درج و حذف دادهها، و مقیاسپذیری بالا از ویژگیهای خوبشه. با اینکه B-Tree یه ساختار پیچیدهست، ولی خیلی از دیتابیسهای معروف مثل MySQL و PostgreSQL از اون استفاده میکنن تا کارایی کوئریها رو بهینه کنن.
امیدوارم مفید بوده باشه :)
@ninja_learn_ir
امروز میخوایم درباره B-Tree توی دیتابیسهای رابطهای صحبت کنیم. اگه تا حالا با دیتابیسهای مثل MySQL یا PostgreSQL کار کرده باشی، احتمالاً اسم B-Tree به گوشت خورده. B-Tree یکی از مهمترین ساختارهای داده توی دیتابیسهاست که برای ایندکس کردن و جستجوی سریع دادهها استفاده میشه 📈.
حالا B-Tree چیه؟ 🌳
خب B-Tree یه ساختار درختی (tree structure) هست که توی ایندکسهای دیتابیس استفاده میشه. این درخت بهصورت بالانس طراحی شده، یعنی همه شاخهها از ریشه تا برگها تقریباً به یه اندازه طول دارن. این باعث میشه عملیات جستجو، درج، حذف و بهروزرسانی دادهها با سرعت بالایی انجام بشه 🚀.
توی B-Tree، هر گره (node) میتونه چندین کلید (key) و فرزند (child) داشته باشه. این یعنی برخلاف درختهای دودویی معمولی که هر گره فقط ۲ فرزند داره، توی B-Tree هر گره میتونه چند فرزند و کلید داشته باشه. این باعث میشه که عمق درخت کم بشه و دسترسی به دادهها سریعتر باشه.
چرا B-Tree توی دیتابیسها استفاده میشه؟ 🤔
1⃣ سرعت بالای جستجو 🔍
یکی از مزیتهای بزرگ B-Tree اینه که جستجو توی اون خیلی سریع انجام میشه. چون این درخت بهصورت متوازن طراحی شده، عمق زیادی نداره و سریع میشه به دادهها رسید.
2⃣ مناسب برای عملیات درج و حذف ➕➖
خب B-Tree نهتنها برای جستجو عالیه، بلکه برای درج و حذف دادهها هم خیلی بهینه است. وقتی یه داده جدید رو وارد میکنی یا دادهای رو حذف میکنی، درخت همچنان بالانس خودش رو حفظ میکنه و کارایی رو پایین نمیاره.
3. مقیاسپذیری 📏
دیتابیسهایی مثل MySQL و PostgreSQL برای اینکه بتونن حجم زیادی از دادهها رو مدیریت کنن، از B-Tree استفاده میکنن. این ساختار داده بهخاطر توانایی مدیریت تعداد زیادی از کلیدها و گرهها، مقیاسپذیری خوبی داره.
چطوری B-Tree کار میکنه؟ ⚙️
فرض کن یه جدول توی دیتابیس داری که میخوای ازش بهسرعت دادههایی رو پیدا کنی. اگه این جدول بزرگ باشه، جستجوی خطی خیلی طول میکشه. اینجاست که ایندکس به کمک میاد! وقتی یه ایندکس میسازی، دیتابیس از B-Tree برای ذخیره کردن اون ایندکس استفاده میکنه.
مثلاً اگه یه کوئری مثل این داشته باشی:
SELECT * FROM users WHERE id = 123;
اگه روی ستون
id
ایندکس ساخته باشی، دیتابیس از B-Tree برای پیدا کردن رکورد مورد نظر استفاده میکنه و این کار خیلی سریع انجام میشه.تفاوت B-Tree و B+Tree چیه؟ 🤨
خیلی از دیتابیسهای مدرن از نسخهای به نام B+Tree استفاده میکنن. فرق B+Tree اینه که همه دادهها فقط توی برگها (leaf nodes) ذخیره میشن و گرههای میانی فقط برای جستجو استفاده میشن. این باعث میشه که دسترسی به دادهها سریعتر بشه، چون برگها بهصورت مرتب ذخیره شدن و بهراحتی میشه بین اونها پیمایش کرد.
چطوری ایندکس B-Tree بسازیم؟ 🛠️
ساختن ایندکس B-Tree توی دیتابیس خیلی ساده است. مثلاً توی MySQL میتونی اینجوری یه ایندکس روی ستون
id
بسازی:CREATE INDEX idx_id ON users (id);
با این کار، دیتابیس یه index برای ستون
id
میسازه و از این به بعد جستجوها خیلی سریعتر میشن.جمعبندی 🎯
فهمیدیم B-Tree یه ساختار داده عالی برای مدیریت ایندکسها توی دیتابیسهای رابطهایه. سرعت بالای جستجو، درج و حذف دادهها، و مقیاسپذیری بالا از ویژگیهای خوبشه. با اینکه B-Tree یه ساختار پیچیدهست، ولی خیلی از دیتابیسهای معروف مثل MySQL و PostgreSQL از اون استفاده میکنن تا کارایی کوئریها رو بهینه کنن.
#db #btree #bptree
❤4
یه آمار بگیریم ببینیم دوستان چیکاره هستن 😄
لطفا همه شرکت کنن، بهمون برای تولید محتوای بهتر و مناسب تر کمک میکنه ❤
لطفا همه شرکت کنن، بهمون برای تولید محتوای بهتر و مناسب تر کمک میکنه ❤
Anonymous Poll
7%
فرانت کارم
73%
بک اند کارم (Django)
5%
بک اند کارم (Node.js)
15%
سایر
❤3
یه مساله رو لازم دونستم بهتون بگم دوستان
فرقی نمیکنه شما حوزه کاریتون چی باشه و توی کدوم زبان و فریمورک متخصص باشید
اگه تخصص خوبی داشته باشید و مهارت فنی تون خوب باشه همیشه و همه جا کار هست
حتی اگه برنامه نویس زبان منسوخ شده ای مثل Cobol باشید
درسته بازار کار یه سری زبان و فریمورک نسبت به بقیه بهتره ولی خب در عوض رقابت توی اون زبان و فریمورک بیشتر و سخت تره
مثلا میگم، الان جوّ جوری شده که هر کسی میخواد فرانت یاد بگیره میره سمت React و Next.js چون بازار کارشون نسبت به بقیه فریمورکا عالیه، ولی در عوض رقابت توی این استک خیلی سخته چون همه React کار هستن
این قضیه برای بک اند هم صدق میکنه
به جای تمرکز روی بازار کار روی مهارت و تخصصتون تمرکز کنید
بازار کار دائما در حال تغییره و کسی نمیدونه چند سال دیگه چه زبان یا فریمورکی قراره بیاد که توی بازار کار از بقیه جلو بزنه
پیروز و موفق باشید 🌹
فرقی نمیکنه شما حوزه کاریتون چی باشه و توی کدوم زبان و فریمورک متخصص باشید
اگه تخصص خوبی داشته باشید و مهارت فنی تون خوب باشه همیشه و همه جا کار هست
حتی اگه برنامه نویس زبان منسوخ شده ای مثل Cobol باشید
درسته بازار کار یه سری زبان و فریمورک نسبت به بقیه بهتره ولی خب در عوض رقابت توی اون زبان و فریمورک بیشتر و سخت تره
مثلا میگم، الان جوّ جوری شده که هر کسی میخواد فرانت یاد بگیره میره سمت React و Next.js چون بازار کارشون نسبت به بقیه فریمورکا عالیه، ولی در عوض رقابت توی این استک خیلی سخته چون همه React کار هستن
این قضیه برای بک اند هم صدق میکنه
به جای تمرکز روی بازار کار روی مهارت و تخصصتون تمرکز کنید
بازار کار دائما در حال تغییره و کسی نمیدونه چند سال دیگه چه زبان یا فریمورکی قراره بیاد که توی بازار کار از بقیه جلو بزنه
پیروز و موفق باشید 🌹
❤10👍6
https://t.iss.one/+td1EcO_YfSphNTlk
دوستان این لینک گروهه میتونید توش جوین شید و چت بکنید و سوالاتونو بپرسید یا ... هرکار دیگه ای
دوستان این لینک گروهه میتونید توش جوین شید و چت بکنید و سوالاتونو بپرسید یا ... هرکار دیگه ای
Telegram
Programmers City 🌆
گروه نینجا لرن🥷
🌐 channel link : https://t.iss.one/ninja_learn_ir
👥 Group link: https://t.iss.one/+td1EcO_YfSphNTlk
⚠️ Rules: https://t.iss.one/programmers_city_rules
🌐 channel link : https://t.iss.one/ninja_learn_ir
👥 Group link: https://t.iss.one/+td1EcO_YfSphNTlk
⚠️ Rules: https://t.iss.one/programmers_city_rules
❤1
توی پست جدیدمون چند تا سایت استخدامی برای برنامه نویسا معرفی کردیم، از دستش ندید 😁🌹
https://www.instagram.com/p/DASs2RssumQ/?igsh=MTJjNHg5MjBtZjMxdA==
https://www.instagram.com/p/DASs2RssumQ/?igsh=MTJjNHg5MjBtZjMxdA==
❤4
💡 فعال کردن قابلیت Auto Import توی VSCode 💡
امروز میخوایم درباره یه قابلیت جذاب توی VSCode حرف بزنیم که به شدت میتونه تو کدنویسی وقتت رو ذخیره کنه: Auto Import! 🚀
حالا Auto Import چیه؟ 🤔
فرض کن داری یه کد مینویسی و میخوای از یه ماژول یا پکیج استفاده کنی که هنوز import نشده. اینجاست که Auto Import میاد وسط و به صورت خودکار این کار رو برات انجام میده. بدون نیاز به اینکه دستی بری بالا توی فایل import کنی، خودش میفهمه چی نیاز داری و اضافهش میکنه! 👌
چطوری فعالش کنیم؟ ⚙️
برای فعال کردن این قابلیت توی VSCode، کار خیلی سادهست:
1⃣ اول از همه، از منوی File برو به Preferences و بعد Settings 📑
2⃣ توی کادر جستجو Auto Import رو سرچ کن 🕵️♂️
3⃣ بعدش توی بخش Typescript یا Javascript (بسته به زبون کد نویسیت) گزینه "Auto Import" رو فعال کن ✅
حالا VSCode هر وقت لازم باشه بهت پیشنهاد میده که import رو خودکار انجام بده.
یه نکته باحال 🤓
این قابلیت توی زبونهای TypeScript و JavaScript خیلی خوب کار میکنه ولی برای بقیه زبونها مثل Python یا C# هم پلاگینهای مشابهی هست. میتونی با نصب اکستنشنهای مربوط به اون زبون، از این قابلیت توشون استفاده کنی. یه اکستنشن معروف برای Python، همون پلاگین Python اصلیه که Auto Import رو هم ساپورت میکنه 🐍.
چطوری از Auto Import استفاده کنیم؟ 🚀
وقتی این قابلیت فعال شد، کافیه که اسم کلاس، فانکشن یا ماژولی که میخوای استفاده کنی رو بنویسی، VSCode خودش پیشنهاد import رو بهت میده و میتونی با یه دکمه Tab یا Enter قبولش کنی. بزن بریم! ⚡
چرا Auto Import خیلی خفنه؟ 💥
- صرفهجویی در زمان ⏳: دیگه لازم نیست دستی import کنی و هی بگردی ببینی چی رو باید اضافه کنی.
- جلوگیری از خطاها 🚫: اگه چیزی رو یادت بره import کنی، این قابلیت بهت یادآوری میکنه.
- افزایش سرعت کدنویسی 🏎️: سریعتر و بهینهتر کد مینویسی و همه چی سر جاشه.
همین حالا Auto Import رو فعال کن و از این قابلیت خفن استفاده کن👨💻💥
امید وارم مفید بوده باشه :)
@ninja_learn_ir
امروز میخوایم درباره یه قابلیت جذاب توی VSCode حرف بزنیم که به شدت میتونه تو کدنویسی وقتت رو ذخیره کنه: Auto Import! 🚀
حالا Auto Import چیه؟ 🤔
فرض کن داری یه کد مینویسی و میخوای از یه ماژول یا پکیج استفاده کنی که هنوز import نشده. اینجاست که Auto Import میاد وسط و به صورت خودکار این کار رو برات انجام میده. بدون نیاز به اینکه دستی بری بالا توی فایل import کنی، خودش میفهمه چی نیاز داری و اضافهش میکنه! 👌
چطوری فعالش کنیم؟ ⚙️
برای فعال کردن این قابلیت توی VSCode، کار خیلی سادهست:
1⃣ اول از همه، از منوی File برو به Preferences و بعد Settings 📑
2⃣ توی کادر جستجو Auto Import رو سرچ کن 🕵️♂️
3⃣ بعدش توی بخش Typescript یا Javascript (بسته به زبون کد نویسیت) گزینه "Auto Import" رو فعال کن ✅
حالا VSCode هر وقت لازم باشه بهت پیشنهاد میده که import رو خودکار انجام بده.
یه نکته باحال 🤓
این قابلیت توی زبونهای TypeScript و JavaScript خیلی خوب کار میکنه ولی برای بقیه زبونها مثل Python یا C# هم پلاگینهای مشابهی هست. میتونی با نصب اکستنشنهای مربوط به اون زبون، از این قابلیت توشون استفاده کنی. یه اکستنشن معروف برای Python، همون پلاگین Python اصلیه که Auto Import رو هم ساپورت میکنه 🐍.
چطوری از Auto Import استفاده کنیم؟ 🚀
وقتی این قابلیت فعال شد، کافیه که اسم کلاس، فانکشن یا ماژولی که میخوای استفاده کنی رو بنویسی، VSCode خودش پیشنهاد import رو بهت میده و میتونی با یه دکمه Tab یا Enter قبولش کنی. بزن بریم! ⚡
چرا Auto Import خیلی خفنه؟ 💥
- صرفهجویی در زمان ⏳: دیگه لازم نیست دستی import کنی و هی بگردی ببینی چی رو باید اضافه کنی.
- جلوگیری از خطاها 🚫: اگه چیزی رو یادت بره import کنی، این قابلیت بهت یادآوری میکنه.
- افزایش سرعت کدنویسی 🏎️: سریعتر و بهینهتر کد مینویسی و همه چی سر جاشه.
همین حالا Auto Import رو فعال کن و از این قابلیت خفن استفاده کن👨💻💥
#vscode #tric
👍8❤2🔥1
Ninja Learn | نینجا لرن
۶۰۰ تایی شدیم 😳
This media is not supported in your browser
VIEW IN TELEGRAM
❤🔥4