Dev Fuel – Telegram
Dev Fuel
144 subscribers
41 photos
12 videos
28 links
تو این چنل قراره در مورد تکنولوژی های مختلف برنامه نویسی ، خصوصا JS با هم کلی چیز یاد بگیریم.
(بیشتر حول محور بک اند).
Download Telegram
قلب آدم به تپش در میاد در این لحظه که نکنه یهو رنگش قرمز بشه
😁4🔥2
🔥2
تست نویسی یکی از مهارت ها و واجباتیه که شاید توی خیلی/بعضی از پروژه ها یا شرکت ها مهم پنداشته نشه، و یا نسبت بهش کم لطفی شده باشه.
اما امروز میخوام این موضوع رو بررسی کنیم و بگیم که چرا اگر مهم پنداشته نمیشه ، از این بعد باید بشه.

اول از همه این رو مشخص کنیم که تست ها چی هستند؟
تست ها کد هایی هستند که بررسی میکنند که کد اصلی پروژه درسته یا خیر.
یعنی شما یک کدی برای پروژه نوشتی ، بعد باید تست کنی ببینی که آیا این کد کار می‌کنه به درستی؟
خب یکی از روش های تست کردن کد اینه که مستقیما بیاریمش تو کار و تستش کنیم. مثلا یک کد در React نوشتیم و این کد یک دکمه هست که وقتی روش کلیک کنی باید یک پیامی رو نشون بده.
ما میایم خودمون در لحظه مستقیما کلیک میکنیم و تست میکنیم که اون پیام رو نشون میده یا خیر.
یا مثلا ما یک وب سرور داریم و یک API نوشتیم و می‌خوایم تست کنیم ببینیم که این API به درستی کار می‌کنه؟ نتیجه ای که ما می‌خوایم رو میده؟
اینجا هم یک روشی که هست اینه که میایم و با postman یا امثالهم ، ریکویست میزنیم و به API و چک می‌کنیم که خروجی که ما می‌خوایم رو میده آیا؟ یا خیر.

اما همانطور که می‌بینید همه این مراحل به صورت دستی چک میشه ، و روزی روزگاری اگر کدمون رو تغییر بدیم ، هر بار باید خودمون دستی تست کنیم که ببینیم اون بخش به درستی کار می‌کنه یا خیر.

اینجاست که تست ها به کمک ما میان و جدا از حل این چالش ، مزایای دیگه ای هم با خودشون میارن.
ما میایم در یک فایلی یک کدی می‌نویسیم و وظیفه این فایل اینه که چک کنه ببینه کدی که ما می‌خوایم درست کار می‌کنه یا خیر.
نتیجه رو هم همونطور که در عکس بالا یک مثال گذاشتم نمایش میده.

الان در عکس بالا من مجموعا 9 تا تست نوشته بودم ، که 5 تاش شکست خورد. یعنی چی؟ یعنی مثلا اگر 9 تا فانکشن داشته باشم، از این 9 تا 4 تاش اون خروجی که باید بدن رو میدن، ولی 5 تای دیگه اون خروجی که میخوام رو نمیدن و مشکل دارن. و کد باید بازبینی بشه و ایراداتش بر طرف بشه.

خب حالا که فهمیدیم تست چه می‌کنه ، یکم از انواع تست ها بگیم که در ادامه به مزایای اون می‌خوام اشاره کنم.
تست ها انواع مختلفی دارند . چندتا از اون ها رو نام می‌برم :
Unit testing , Integration testing , System testing , Security testing , E2E testing , ...

به طور کلی در وب سرور ها چند نوع تستی که خیلی استفاده میشه و خود من هم از اینها استفاده می‌کنم :
Unit testing , Integration testing , E2E testing

راجع به هر کدوم در پارت های بعدی توضیح میدم.
البته انتظاری نیست خیل مثال هایی که میزنم رو کامل متوجه بشید و ... . من دارم یک سر نخی میدم بیشتر. و تلاشم رو می‌کنم کوتاه و ساده توضیح بدم.

Part 1

#test
👍7
‏Unit testing چیست؟
‏unit testing همانطور که از اسمش معلومه ، یعنی تست یک بلاک کوچک از برنامه. که معمولا یک فانکشن یا متد یک کلاس هست.

مثلا ما یک فانکشن داریم که وظیفه اش آپدیت کاربر در دیتابیس هست.
ما میایم مخصوصا فقط این تکه کد رو بررسی می‌کنیم که آیا به درستی کار می‌کنه؟
مثلا این رو ببینید :
updateUser(id: string, data: Partial<User>): Promise<User> {
return this.usersRepository.update(id, data);
}


در این کد ما میایم کاربر رو آپدیت می‌کنیم.(به این هم دقت کنید که ما درون این فانکشن، متد update رو از یک کلاس دیگه کال کردیم. در unit testing ما چون هدفمون فقط تست کردن لاجیک فانکشن مورد نظر هست، نمیتونیم اجازه بدیم که این متد کال بشه. چون درون این متد هم احتمالا یک سری فانکشن های دیگه کال میشن و خلاصه وابستگی های خودش رو داره. در نتیجه میایم این متد رو mock می‌کنیم که در جلوتر میگم چیه) حالا اگر بخوایم براش تست بنویسیم چی میشه؟
    test('Should update user and return it', async () => {
const result = await usersService.updateUser('1', mockUserDto);

expect(result).toEqual(mockUserEntity);
});

میشه ایشون.
من اومدم از یک کتابخونه ای با نام jest استفاده کردم که یک سری توابع برای تست کردن کد در اختیارم قرار میده.
توابع test و except از همین کتابخونه هستند.
خب حالا چیکار کردیم؟ اومدیم یک توضیحی راجع به متدی که قراره تست بشه رو توی test نوشتیم ، و بعد فانکشن رو کال کردیم، نتیجه رو گرفتیم و دادیمش به expect و چک کردیم که همون نتیجه ای که ما می‌خوایم است؟ اگر بله که خیلی هم عالی. تست pass میشه. اگر خیر که بازم عالی. تست failed میشه و ما میفهمیم که مشکل از کجاست. شاید تستمون رو بد نوشتیم شاید هم کدمون ایراد داره، در هر صورت مشکل رو بر طرف می‌کنیم.

اما چیزی که خیلی توی چشم میزنه در این کد ها ، این کلمه mock هست.
این mock یعن چی؟

به طور کلی ، ما در unit test ها نمی‌تونیم متد ها و توابع دیگه درون تابعی که می‌خوایم تست کنیم رو کال(اجرا) کنیم. دلیلش هم توی پرانتز بالا گفتم.
ما باید این متد و توابع رو ماک کنیم. ماک کردن یعنی اینکه بیایم توابع و متد های درون تابعی که میخوایم تست کنیم رو قبل از تست مشخص کنیم که خروجی اش چیه. یعنی ما میایم کاری می‌کنیم که این متد update همیشه یک نتیجه ای که ما می‌خوایم رو داشته باشه. مثلا من اومدم این متد رو ماک کردم که همیشه خروجی اش یک user با id و اطلاعات ثابتی که من میخوام باشه ، تا در ادامه تست بتونیم روی چیز های مهم تر مربوط به این فانکشنی که قراره تست بشه بپردازیم.

که البته در این مثالی که زدیم چیز های مهم دیگه ای نداره، و عملا نوشتن unit test روی توابعی شبیه به این توابع بی فایده است. برای این توابع باید Integration tests و یا E2E tests بنویسیم.
‏Unit tests بیشتر در جاهایی به درد میخورن که شرط و شروطی درون اون توابع نوشته شده باشه.

یعنی درون این توابع یک ifی چیزی باشه که بتونیم ورودی های مختلف بدیم و خروجی های مختلف رو چک کنیم.

مثلا به این مثال توجه کنید :
function max(a, b) {
return b > a ? b : a
}


همونطور که می‌بینید این یک فانکشن هست که ما دو تا ورودی می‌گیریم و چک می‌کنیم که کدوم عدد بزرگتره. هر کدوم که بزرگتر بود رو بر میگردونیم.
به نظر شما چه تست هایی برای این میشه نوشت؟
از نظر من این تست ها رو میشه براش نوشت :
در تست اول دو تا عدد میدم به تابع و انتظار دارم عدد اول رو بر گردونه.
در تست دوم دو تا عدد میدم و انتظار دارم که عدد دوم رو برگردونه.
در تست سوم هر دو رو مساوی میدم و انتظار دارم که یکی از اینها رو برگردونه. تست هاش میشه به این شکل :
  test("should return the first argument if it is greater", () => {
const a = 2;
const b = 1;

const result = max(a, b);
expect(result).toBe(a);
});
test("should return the second argument if it is greater", () => {
expect(max(2 , 3)).toBe(3)
});

test("should return the first argument if the arguments equal", () => {
expect(max(2 , 2)).toBe(2)
});


Part2
#test #unit_tests
👍21
به ChatGpt گفتم اگر خو*شی کنیم چی میشه؟
نتیجه ای که داشت جالب بود اما چندتا نکته داره.

1- اینکه به نظر میرسه IPS ها یه DNS ملی چیزی زدند که ایشون ما رو استان آذربایجان خارجی شناخته(البته این مورد رو تو سایت های بسیاری که تحریم کرده بودند مشاهده کردم. اکثرا آذربایجان رو نشون داده و گاهی هم بگیر نگیر داره).

2-اینکه مشخصا OpenAI پیام های ما رو همه طوره رصد می‌کنه و اصلا کار درستی نیست که اطلاعات مهم و حیاتی رو بهش بدیم.
Dev Fuel
به ChatGpt گفتم اگر خو*شی کنیم چی میشه؟ نتیجه ای که داشت جالب بود اما چندتا نکته داره. 1- اینکه به نظر میرسه IPS ها یه DNS ملی چیزی زدند که ایشون ما رو استان آذربایجان خارجی شناخته(البته این مورد رو تو سایت های بسیاری که تحریم کرده بودند مشاهده کردم. اکثرا…
در کل چت جی پی تی که سهله ، در همین پیام‌رسان ها هم خیلی اطلاعات شخصی و خلق و خو و ... رو منتشر نکنید بهتره.

الان منی که در بخش امنیت فعالیت نمی‌کنم ، یه سری از این چنل های daily رو که می‌بینم با خودم قشنگ این حس رو دارم که به راحتی با این اطلاعاتی که درون چنلشون گذاشتن ، میشه بهشون نفوذ کرد 😂
👍1
Media is too big
VIEW IN TELEGRAM
مردم عزیز ایران
دیگه حتی برفی نیست که مثل کبک سرمون رو بکنیم تو برف.
آگاهی تنها راه نجات ما است.
👎1🤨1
من از دوستانی که این چنل رو به دلیل مطالب برنامه نویسی و تکنولوژی دنبال می‌کنند ، عذر می‌خوام.
خیلی خواستم مثل قبل دوباره تولید محتوا کنم و اینجا مطالب رو بذارم ، اما خب نشد.
چون احساس می‌کنم الان دیگه مثل قبل نیست که بخوام دوباره مثل قبل مطالب رو بذارم.
توی شرایط ویژه ای هستیم.
همیشه این مملکت توی شرایط ویژه ای بوده ، اما اگه همه اون موارد قابل ترمیم و گذشت بوده اند ، این یکی دیگه نیست.
از همتون می‌خوام جست‌وجوی های لازم رو در اینترنت انجام بدید و خودتون عمق فاجعه رو متوجه بشید.
از نظر من همه ما خودخواه هستیم.
در حداقل ترین حالت ممکن اینه که خودمون رو داریم گول می‌زنیم. در شرایطی که عادی نیست دنبال زندگی عادی هستیم.
در این کشتی که داره غرق میشه ، همه سعی می‌کنیم که کشتی رو بشکونیم و از تکه های اون برای خودمون قایق درست کنیم . و خودمون رو نجات بدیم.
اما عاقبت اینکار اینه که همه غرق میشیم.
الان هم منتظریم همون هایی که این شرایط رو برای ما بوجود آوردن این وضع رو مدیریت و درست کنند. مسخره است!
شاید دوباره تولید محتوا رو شروع کنم و یا حداقل مطالب رو بذارم .
اما ازتون می‌خوام راجع به وضعیت موجود تحقیق و تفحص کنید و دیگران رو هم آگاه کنید.
👍9💔2
چگونه یک Commit Message حرفه‌ای بنویسیم؟
یک کامیت خوب باید واضح، استاندارد و قابل جستجو باشه.

موضوع خیلی مهمیه. زمانی که کامیت مسیج یک ساختار ثابت و توضیحات خوب داشته باشه :
- پروژه ساختار یافته میشه
- نظم پیدا می‌کنه
- به عنوان یک مستند خوب میشه ازش استفاده کرد
-و ...

یکی از ساختار های خوبی که در خیلی از پروژه ها می‌تونید ببینید :
<prefix>(scope): type summary


🔹 Typeهای رایج

‏• ‌‏feat: قابلیت جدید‏
‏• fix: رفع باگ
‏• refactor: بازنویسی کد
‏• docs: مستندات
‏• chore: تنظیمات و موارد جانبی
‏• test / style / perf

🔹 Scope چیه؟

بخش مربوط به تغییرات. مثلا :

بک‌اند: auth, users, orders, config

فرانت: ui/header, api/auth, store/user

🔹 Summary

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

چند مثال نهایی :
srvr(auth): feat add OTP resend logic

clnt(ui/calendar): fix mobile slot selection bug

srvr(config): refactor simplify loadConfig
👍2
📌 سیستم‌عامل لینوکس چیه؟ گنو چیه؟ توزیع یعنی چی؟

🔹 لینوکس (Linux)
در اصل فقط کرنل یا هستهٔ سیستم‌عامله.
به‌تنهایی قابل استفاده نیست.
سازنده: لینوس توروالدز.

🔹 گنو (GNU)
مجموعه‌ای بزرگ از ابزارهای آزاد:
کامپایلر، شل، ابزارهای خط فرمان و…
به تنهایی هم سیستم‌عامل کامل نیست، چون کرنل قابل‌استفاده‌ای نداشت.

🔹 پس سیستم‌عامل واقعی چیه؟
وقتی کرنل لینوکس + ابزارهای گنو + برنامه‌ها + پکیج‌منیجر + نصاب کنار هم قرار می‌گیرند،
می‌شود یک سیستم‌عامل کامل.

این مجموعه را می‌گوییم:

توزیع لینوکس (Linux Distribution)

مثل:
Ubuntu، Debian، Fedora، Arch، openSUSE و…

🔹 چرا اسمش را لینوکس می‌گذاریم؟
چون همهٔ توزیع‌ها از هستهٔ لینوکس استفاده می‌کنند و ابزارهای گنو بخش اصلی کاربر را تشکیل می‌دهند.
اسم دقیق‌تر: GNU/Linux
ولی در عرف همه می‌گویند: «لینوکس».

🔹 آیا گنو و لینوکس از یونیکس آمده‌اند؟
نه، هیچ‌کدام از کد یونیکس مشتق نشده‌اند.
فقط یونیکس‌مانند هستند.

🔹 پس سیستم‌عامل واقعی چیست؟ نه لینوکسِ تنها، نه گنوِ تنها.
بلکه:

توزیع GNU/Linux = سیستم‌عامل ‏

🔚 خلاصه :

‏ Linux = کرنل

‏ GNU = ابزارها

‏ Distribution = سیستم‌عامل کامل

‏ Unix = الهام‌ بخش این‌ها، نه منبع کد

‏ Ubuntu/Arch/Debian = سیستم‌عامل واقعی
👍4
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
🔶 در آینده‌ی نزدیک، آب حکم طلا را پیدا خواهد کرد.

یاد فیلم مکس دیوانه افتادم.

@TheRaymondDev
📦 مشکل فایل ext4.vhdx در ویندوز (وقتی داکر نصبه)

اگر در ویندوز از Docker Desktop استفاده می‌کنید ، احتمالاً در مسیر زیر یک فایل به نام ext4.vhdx دارید که چند گیگابایت جا گرفته:

C:\Users\<User>\AppData\Local\Docker\wsl\data\ext4.vhdx

(البته ممکنه نام فایل و آدرسش متفاوت باشه. با WinDirStat می‌تونید آدرس دقیق اش رو پیدا کنید.)

🔍 ext4.vhdx دقیقاً چیست؟

‏Docker Desktop روی ویندوز، کانتینرها را داخل WSL2 اجرا می‌کنه.
‏WSL2 هم برای ذخیره‌سازی فایل‌های لینوکسی خودش یک دیسک مجازی می‌سازه، و اون دیسک دقیقاً همین ext4.vhdx است.

پس این فایل شامل تمام موارد زیره:

ایمیج‌ها

کانتینرها

ولوم‌ها

سیستم‌فایل لینوکسی Docker

به همین دلیل حذفش باعث از بین رفتن کامل داکر می‌شه.

علت حجیم بودن این فایل چیه؟

‌‏WSL2‏ و Docker حجم فایل رو خودکار کم نمی‌کنند.
هر ایمیجی که دانلود می‌کنید و هر کانتینری که می‌سازید، کم‌کم این فایل بزرگ‌تر می‌شه.

✔️ چطور حجم ext4.vhdx را کم کنید؟
1) ابتدا WSL و Docker را خاموش کنید:
wsl --shutdown


2) سپس تمامی ایمیج‌ها، کانتینرهای بلااستفاده و کش‌ها را پاک کنید:

docker system prune -a
docker volume prune
docker builder prune



این مرحله معمولاً چند گیگابایت آزاد می‌کنه.

3) در نهایت خود فایل ext4.vhdx را بدون خطر فشرده کنید:

روی فایل راست‌کلیک کنید:

Properties

Advanced


گزینه Compress contents to save disk space را فعال کنید

این کار روی همه نسخه‌های ویندوز جواب می‌ده و معمولاً ۳۰ تا ۶۰٪ از حجم فایل را کم می‌کنه.

⚠️ نکات مهم

فایل را هرگز با WinRAR یا 7zip فشرده نکنید.
خود فایل ext4.vhdx را دستی حذف نکنید.
این دستور تمام کانتینر و ایمیج هایی که در حال اجرا نباشند رو حذف می‌کنه.

#docker
🔥2
از AI در پروژه هاتون استفاده می‌کنید؟
اگر بله ، در چه بخشی و از چه مدلی؟
اگر خیر ، چرا استفاده نمی‌کنید؟
Dev Fuel
از AI در پروژه هاتون استفاده می‌کنید؟ اگر بله ، در چه بخشی و از چه مدلی؟ اگر خیر ، چرا استفاده نمی‌کنید؟
یکی از بهترین بخش هایی که میتونید از AI استفاده کنید ، تست نویسه.
تست هایی که می‌نویسه فوق‌العاده است. هم سریعه و هم تمیز.
کافیه روت ها ( اگر e2e می‌نویسید) و ورودی و خروجی هاشون رو مشخص کنید و ازش بخواهید تست رو بنویسه.
من برای اکثر تسک ها از Claude استفاده می‌کنم.
هیچکدوم از مدل هایی که استفاده کردم به Claude نمی‌رسند.
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
ساخت یک ربات مایع توسط یک تیم در کره جنوبی !
جالب بود 👌
👍1
جای همه بَرو بچ خالی
🤣7
Forwarded from My experiences
امروز میخوایم راجب یک موضوعی حرف بزنیم که اسمش رو شاید شنیده باشین ولی خب به ظاهر خیلی پیچیده میاد. CQRS

- خب میخوایم ببینیم چیشد که میخوایم راجبش حرف بزنیم ، از رو سرگرمی داشتم به این فکرمیکردم پلتفرمی مثل اینستاگرام وقتی یک فرد مشهور از خودش پستی رو منتشر میکنه ، میلیون ها نفر اون پست رو میبینن و لایک میکنن ، و همزمان هم اینستاگرام مقدار ویو و لایک و کامنت و ... رو بهتون نشون میده ، خب این چطور ممکنه ؟ شما چطور میتونی این حجم از دیتای عظیمو همزمان write کنی و بلافاصله بدون مشکل read کنی ، خب با چه منطقی اینستاگرام این رو هندل میکنه که این مشکل رو نداره ؟

- با یکم سوال و سرچ رسیدم به چیزی به اسم CQRS , مخفف Command query responsibility segregation ، بهمون میفهمونه که ما باید وظایف read , write رو جدا کنیم از همدیگه ، اما منظور این جداسازی چیه ؟ این چیزیه ک ما میخوایم بهش جواب بدیم.

- جوابش اینه که ما مدل های read , write از هم جدا باشن ، نه لزوما فیزیکی ، ممکنه از یک دیتابیس استفاده کنن ، ولی مدل ها و index ها و جزئیات دیگه ممکنه فرق کنن ، و بعضی مواقع کلا دیتابیس های جدا درنظر میگیریم ! یعنی شما دوتا مدل توی دوتا دیتاییس جداگونه برای خودتون دارین که این یک سری مزایا داره و یک سری معایب که راجبشون حرف میزنیم

- خب ما میتونیم تو سه سطح جداسازی انجام بدیم : ( mvp , mid-systems , enterprise-systems)
توی mvp ما میایم صرفا مدل هارو از هم دیگه جدا میکنیم ولی همچنان دیتابیس یکیه ، برای پروژه های کوچیک و نسخه های اولیه اپلیکیشنا بسیار مناسبه . توی mid-system میایم دیتابیسارو جدا میکنیم ، مثلا شما دیتابیسی ک میخوای توش عملیاتای write به خوبی و با پرفورمنس خوب انجام بشن رو postgres-sql درنظر میگیری و برای دیتابیسی که میخوای read رو با سرعت و بهینه انجام بدی ، از elasticSearch استفاده
میکنی( به عنوان دیتابیس عمومی نه )
توی enterprise-systems هر سرویس دیتابیس مربوط به خودشو داره که با Event ها باهم sync میشن.

- خب حالا اینهمه از مزایاش حرف زدیم که مشکلی رو ازمون حل میکنه ، ولی حالا میخوایم راجب معایبشم بگیم ، اونا چیا هستن ؟ اولین چیزی به ذهنتون میرسه اینه که سیستم بسیار پیچیده میشه ، مدل ها جدا میشن و لاجیک های خودشون رو دارن و sync کردن اونا باهم و همین باعث پیچیدگی بیشتر داخل سیستم میشه ، مشکل بعدی اینه که read model بلافاصله sync نیست ، چون زمان میبره که دیتابیسا باهم sync شن و ما بتونیم طبق انتظار read model بتونه بهمون response مورد نظرو بده ، مشکل خیلی چالش بر انگیزش debugging هست ، شما دیگه فقط یک state نداری که دیتاها داخلش جریان داشته باشن ، همونطور که گفتیم همه چیز جداس ، و شما برای دیباگ کردن باید چندین مسیر رو دنبال کنی و همین خودش هزینه های بسیار بالاییو به همراه داره

ختم کلام : اگه صرفا میخوای توی لاجیک ببینی cqrs چجوری کارمیکنه ، میتونی فقط مدل هارو جدا کنی ، از این بزرگتر رو حتما باید دلیل موجه براش داشته باشی وگرنه چیزی جز هزینه برات نداره
2
چرا برای تولید OTP نباید از Math.random() استفاده کنیم؟

بسیاری از سیستم‌ها برای تولید کدهای یک‌بارمصرف هنوز به Math.random() تکیه می‌کنن؛ درحالی‌که این تابع امنیت لازم برای تولید توکن های حساس رو نداره.

مشکلمون چیه؟
تابع Math.random() یک Pseudo Random Number Generator غیرکریپتوگرافیک هست. یعنی خروجی آن با دونستن seed یا الگوی تولید، قابل پیش‌بینیه. همین پیش‌بینی‌پذیری باعث می‌شود یک مهاجم با brute-force یا تحلیل خروجی‌ها بتونه OTP بعدی رو حدس بزنه.

در مقابل چی داریم؟
توابعی مثل crypto.randomInt() یا crypto.randomBytes() در Node.js از یک Cryptographically Secure PRNG استفاده میکنن.
این یعنی:
غیرقابل پیش‌بینی
دارای entropy کافی
مقاوم در برابر حملات آماری
مناسب برای توکن‌های امنیتی مثل OTP، لینک بازیابی، session secret و موارد دیگه.

@DevTwitter | <Amirali Allahverdi/>
2
ماجرای Body در متد DELETE

امروز سعی کردم با متد DELETE داده‌ای رو به سرور ارسال کنم،ولی چون داده ها زیاد شد تصمیم گرفتم بذارم در body. اما بعد متوجه شدم که Body اصلاً دریافت نمی‌شه!
وقتی متد رو تغییر دادم، مشکل حل شد.

برای اینکه ببینم داستان این که Body با DELETE اصلاً در دسترس نیست چیه، یه سرچ کردم.
متوجه شدم که استاندارد HTTP می‌گه DELETE می‌تواند body داشته باشد. اما در عمل، سرویس‌ها و کلاینت‌ها اصلاً محل نمی‌گذارند!

یعنی عملاً ۹۹٪ سرویس‌ها و فریم‌ورک‌ها Body داخل DELETE رو نادیده می‌گیرند و اصلاً پشتیبانی نمی‌کنن. به همین دلیل استاندارد صنعت اینه که DELETE هیچ‌وقت Body نداشته باشه.

در این باره، در RFC 2616 (HTTP/1.1) هم به این موضوع اشاره شده که برای درخواست‌ها، "متد DELETE می‌تواند بدنه (Body) داشته باشد"، اما عملاً هیچ الزام یا قاعده مشخصی برای استفاده از آن وجود نداره و بسیاری از سرویس‌ها آن را نادیده می‌گیرند.

در نتیجه، اگر داده‌ای باشه که بخواهید ارسال کنید، همیشه باید اون رو در URL قرار بدید. و اگر داده‌ها زیاد شدن، بهتره از متد POST استفاده کنید.
👍3
‏ ElysiaJs یک فریمورک بر پایه ران تایم Bun هست که سرعت فوق‌العاده ای داره!

طبق بنچمارک وب سایت techempower.com می‌تونه 2 میلیون و 454 هزار ریکویست در ثانیه رو هندل کنه و در رتبه 97 قرار داره.

این در حالیه که express با 113 هزار ریکویست در ثانیه در رتبه 359 ام قرار داره!

داکیومنت خیلی تمیزی هم داره. پیشنهاد می‌کنم حتما بهش سر بزنید :
https://elysiajs.com/
🔥4
یک بخش Playground هم داره که با تمرین های جالب یاد میده چطور ازش استفاده کنی.

سرگرم کننده است و میشه ازش کلی چیز یاد گرفت 👌
🆒2