NimaCodez | خفنیجات با نیما – Telegram
NimaCodez | خفنیجات با نیما
530 subscribers
39 photos
3 videos
27 links
مسئله های یک دولوپر کنجکاو و نیمچه Geek.

Go Deep, Learn Deep, Ask Deep.

A nerd without *shiny* grades.
Download Telegram
⁉️ تفاوت فانکشن های Create و Insert توی typeorm باهم چیه؟

هر دوی این فانکشن ها زمانی استفاده میشن که بخوایم یه دیتای جدیدی رو به دیتابیس اضافه کنیم اما این دوتا فانکشن تفاوتایی باهم دارن که میخوایم الان باهم توی چهارتا معیارِ

۱- ساخت یه آبجکت جدید
۲- اجرا کردن هوک ها و لایف سایکل ها (AfterInsert, ‌BeforeInsert و ...)
۳- ذخیره سازی آنی داده ها
۴- پرفورمنس

بررسیشون کنیم.

1️⃣ساختن یه آبجکت جدید: فانکشن Create یه آبجکت جدید از روی Entity میسازه و شما در طول فانکشنی که دارید میتونید تغییراتی روش اعمال کنید و در نهایت بعد از اعمال همه‌ی اون تغییرات؛ متد save رو روی آبجکتی که ایجاد کردید صدا میزنید و اینجاست که عمل ذخیره کردنِ دیتا توی دیتابیس واقعا اتفاق میفته.
«درواقع خود فانکشن create هیچ چیزی رو به دیتابیس اضافه نمیکنه.»

2️⃣ اجرای هوک ها (لایف‌سایکل های Entity): متد Insert هیچ هوکی رو اجرا نمیکنه. همونطور که قابل حدسه، از اونجایی که متد create هم هیچ ارتباط مستقیمی با دیتابیس نداره پس این متد هم هوک هارو اجرا نمیکنه.
«هوک ها فقط زمان صدا زدن متد save صدا زده میشن.»

3️⃣ ذخیره سازی آنی: متد Insert به‌صورت آنی و لحظه‌ای دیتارو توی دیتابیس ذخیره میکنه و اون رو ریترن میکنه. متد create اما هر زمانی که شما save رو روی اون آبجکت create شده صدا بزنید؛ دیتارو ذخیره میکنه.

4️⃣ پرفورمنس: خب راستش این بخش جواب خاصی نداره؛ به طور مشخص وقتی شما از Insert استفاده کنید و یهو دیتارو سیو کنید پرفورمنس بهتری دارید. ولی مسئله اصلی ما توی یک نرم‌افزار صرفا پرفورمنس ذخیره شدن دیتا نیست. خیلی وقتا شما نیاز دارید اون دیتایی که از Entityتون دارید رو در طول کنترلر تغییراتی بدید و درنهایت اون رو ذخیره کنید (یا حتی یک سری هوک هارو اجرا کنید)
«پس معیار نهایی استفاده از Create و Insert به این بستگی داره که شما میخواید چه کاری انجام بدید!»

کنجکاو بمونید.
#nestjs #typeorm #database #backend

🔗 @NimaCodez | © | Go Deep, Learn Deep, Ask Deep 🧠
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥163🆒3👍2
🔥 ستون اصلی نرم‌افزار های روز دنیا چیه؟
⁉️ بک‌اند و فرانت‌اند چجوری باهم حرف میزنن؟
⁉️ اصلا اپلیکیشن موبایل چجوری با بک‌اند حرف میزنه؟

تو این پست با «API» آشنا میشم و همه اینارو جواب میدیم.

تو یه رستوران، منو یه فهرستی از غذاهاست که میتونید سفارش بدید. منو بهتون میگه که چه غذاهایی موجودن و چطوری میتونید سفارششون بدید.
تو دنیای برنامه‌نویسی «‏API» همون منوی توی رستورانه. API ها یه فهرست از عملکردها و خدماتی هستن که یه بک‌اند میتونه ارائه بده و توضیح میده چجوری میشه ازش استفاده کرد.

‏«API» هارو حتی میشه یه‌جور دلال دیتا هم حساب کرد. چون درواقع واسطه میشن بین کاربر و جایی که پردازش واقعی داره انجام میشه. (مثل پیش‌خدمتی که سفارش شمارو به آشپزخونه میگه و شما خودتون نمیرید به آشپزخونه)

- بیاید براش یه مثال قابل لمس بزنیم:
۱- منو رو نگاه میکنید و غذارو انتخاب میکنید.
۲- به پیش‌خدمت میگید فلان غذارو رو میخواید.
۳- پیش‌خدمت سفارش شمارو به آشپزخونه میبره تا آشپز حاضرش کنه.

⁉️ تو هرکدوم از این مراحل چه اتفاقی میفته؟

1️⃣ مرحله اول: این مرحله داره فرانت‌اند رو توصیف میکنه، جایی که کاربر داره دکمه ها، اطلاعات، فرم ها و متن هارو میبینه.

2️⃣ مرحله دوم: اینجا پیش‌خدمت داره نقش API رو بازی میکنه. داره HTTP Request (سفارش) رو از فرانت اند (کاربر) میگیره و به بک‌اند (آشپزخونه) تحویل میده.

3️⃣ مرحله سوم: وقتی API این ریکوعست رو تحویل داد؛ بک‌اند هم با وصل شدن به دیتابیس و پیدا کردن اون دیتای مورد نظر و یه سری پردازش ها، دوباره جواب (غذا) رو میده به API (پیش‌خدمت) تا تحویل فرانت‌اند (مشتری/کاربر) بدتش.

به عکس #2 نگاه کنید! «اصلا دلیل فلش دو طرفه‌ای که بینشون کشیدم همینه». چون هر دوتاشون با اون پیش‌خدمت (API) سروکار دارن؛ نه خود آشپز مستقیم غذارو برای مشتری میبره،‌ نه مشتری مستقیما میره آشپزخونه.

⁉️ ولی اصلا این API چه جنسیه؟ چه شکلیه؟

تعدادی HTTP Endpoint هستن که وقتی بهشون ریکوعست زده میشه، فانکشن خاصی رو تو بک‌اند اجرا میکنن.

⭐️ تقریبا کل قضیه Backend Development راجب همین ساخت API هاست. پس درک مفهومش برامون خیلی مهمه.

⚠️ اگه حس کردید مطالب این پست براتون ناآشناست؛ خوندن این سه تا پیام میتونه کمکتون کنه که این پست رو بهتر درک کنید.

‌‏- URL و درکل آدرس تو دنیای وب چی هست؟
‏- HTTP یعنی چی؟ و اصلا چی هست؟
- دیتابیس چیه؟

کنجکاو بمونید.
#API #crossstack #web #http

🔗 @NimaCodez | © | Go Deep, Learn Deep, Ask Deep 🧠
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥14👍42🆒2
⁉️ چه انواعی از API موجوده؟ الان باهم میفهمیم.

شناخت انواع API به درک عمیق‌تر و دانش بیشتر شما کمک می‌کنه.

‌‏1️⃣- REST API: یک استایل معماری برای توسعه اپلیکیشن‌های تحت شبکه که از متدهای استاندارد HTTP (مثل GET, POST, PUT, DELETE) استفاده میکنه. فرمت داده معمولاً JSON هست. برای دسترسی به هر منبع یک URL مشخص وجود داره.

2️⃣- GraphQL: برخلاف REST که هر منبع یک آدرس داره، GraphQL فقط یک آدرس داره و همه درخواست‌ها به همون یه Endpoint ارسال میشن. GrapQL یه زبان کوئری هست که به کلاینت اجازه میده دقیقاً داده‌های مورد نیازش رو درخواست کنه. از قابلیت‌هایی مثل به‌روزرسانی لحظه‌ای هم پشتیبانی می‌کنه، که برای اپلیکیشن‌های وب‌سوکت ایده‌آل هست.

3️⃣- SOAP: یک پروتکل برای تبادل اطلاعات ساختاریافته بین وب‌سرویس‌ها است. از XML استفاده میکنه و معمولاً روی بستر HTTP کار می‌کنه، اما می‌تونه با SMTP هم کار کنه.

4️⃣- gRPC: یک فریم‌ورک RPC (Remote Procedure Call) با پرفورمنس بالا که از پروتوکل بافر (Proto Buff) برای انتقال داده استفاده می‌کنه. برای میکروسرویس‌ها خیلی مناسبه و از استریم دوطرفه (کلاینت به سرور و برعکس) پشتیبانی میکنه و برای سیستم‌های Low-latency عالیه.

⁉️ حالا کدوم رو استفاده کنیم؟

بستگی به نیاز شما داره. اگر API ساده‌ای توسعه میدید، REST گزینه مناسبیه. اما اگر به انعطاف‌پذیری بیشتری نیاز دارید، GraphQL انتخاب خوبی هست و برای میکروسرویس‌ها و سیستم‌های با تأخیر کم، gRPC بهترین گزینه‌ است. این تصمیم به نیازسنجی دقیقی نیاز داره و به یادتون باشه که: «مجبور نیستید فقط یکی از اینها رو استفاده کنید.»

کنجکاو بمونید.
#gRPC #REST #graphql #soap #api #backend #crossstack

🔗 @NimaCodez | © | Go Deep, Learn Deep, Ask Deep 🧠
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥463🔥3👾3👍1
NimaCodez | خفنیجات با نیما
Photo
اگه خواستید این پست رو بخونید و منو یه ری‌اکشن مهمون کنید!
❤‍🔥15😭2👍1
🔥 ۷ تا ترفند برای داشتن API Endpoint های تمیز و خفنی که هرکی دید کف کنه تو خوندن این پسته!

نوشتن API هایی که نگهداریشون آسون باشه و خوانایی خوبی داشته باشن از توانایی های اصلی هر توسعه دهنده‌ی بک‌اندیه؛ پس بریم یادش بگیریم.

نکته: منظور از resource در ادامه؛ اون شیوه‌ی اصلی و اولیه نمایش یک منبع هست.

1️⃣- کالشکن یا تک عضو؟
فرض کنید میخوایم سفارشات یک کافی‌شاپ رو از API دریافت کنیم، این URL باید کل سفارشات رو بده:
https://ye-chizi.com/orders


و این یکی باید یکیشون رو برگردونه:
https://ye-chizi.com/orders/{orderID}


2️⃣- کالشکن ها و زیر مجموعه هاشون!:
هر کاربری میتونه سفارشاتی داشته باشه. از اونجایی که این سفارش ها هستن که مال کاربر هان نه برعکس؛ پس URL درستی که همه‌ی سفارشات یک کاربر رو بده این خواهد بود:
https://ye-chizi.com/users/{userID}/orders


و URLای که فقط یک سفارش یه کاربر رو برگردونه اینطور میشه:
https://ye-chizi.com/users/{userID}/oders/{orderID}


3️⃣- استفاده از اسم ها؛ به‌جای فعل ها: فرض کنید بخوایم تمام یوزرهای دیتابیس رو در پنل ادمین نشون بدیم؛ URL درستش به این صورت میشه:
https://ye-chizi.com/admin/get-users
https://ye-chizi.com/admin/users


4️⃣- برای ایجاد سلسله مراتب از Forward Slash استفاده کنید! مثالش همون مثال مورد دوم هست.

5️⃣- از خط تیره برای جدا کردن کلمات استفاده کنید:‌
https://ye-chizi.com/reports/remotejobs
https://ye-chizi.com/reports/remote-jobs


6️⃣- اسم فانکشن های CRUD رو تو URL نیارید:
چیزی که تایین میکنه این ریسورس قراره خونده بشه، چیزی براش ارسال بشه یا دلیت بشه؛ اون HTTP Methodی هست که درخواست باهاش ارسال شده.
GET @ https://ye-chizi.com/orders => Get orders
POST @ https://ye-chizi.com/orders => Create a new order
DELETE @ https://ye-chizi.com/orders/{orderID} => Delete an order


7️⃣- فیلتر و مرتب سازی بر اساس کوئری:
برای سرچ تو یه ریسورس خاص و مرتب سازیش نیاز نیست API های جدایی بزنید. تو همون API از طریق کوئری دیتای مورد نیاز کارتون رو دریافت کنید!
https://ye-chizi.com/hotels?state=gilan&days=3

کنجکاو بمونید.
#api #rest #conventions #backend

🔗 @NimaCodez | © | Go Deep, Learn Deep, Ask Deep 🧠
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥192👍1🔥1🤝1
NodeJS چیه و چیکار میکنه؟ اصلا چرا هست؟

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

نکته ۱: Node سال ۲۰۰۹ ریلیز شد ولی سروصدا و صحبت دربارش از ۲۰۰۸ استارت شده.

نکته ۲: Netscape چون اولین مرورگری بود که خیلی فراگیر شد من با اصطلاح "اولین مرورگر" بهش اشاره کردم، وگرنه قبلش هم مرورگر های دیگه ای بودن.

کنجکاو بمونید.
#nodejs #runtime #js #engines #backend #frontend


🔗 @NimaCodez | © | Go Deep, Learn Deep, Ask Deep 🧠
Please open Telegram to view this post
VIEW IN TELEGRAM
220👍6🆒3❤‍🔥2
⁉️ SQL Injection چیه و راهای جلوگیری ازش چیا هستن؟

SQL Injection یکی از تکنینک های تزریق کده که بخاطر سو استفاده از آسیب‌پذیری های یک نرم‌افزار در حین ورود اطلاعات به یه فرم یا فیلد اتفاق میفته. مثلا یک فرم جلوی کاربر هست و ازش خواسته شده که سنش رو وارد کنه؛ ولی اون میتونه داخلش دستورات SQL مخربی بنویسه که مثلا کل جدول users شمارو حذف کنه.

🔥 حالا چطور باید از این اتفاق جلوگیری کرد؟

1️⃣ استفاده از ORM ها:‌ ORM ها بخش زیادی از حملات SQL Injection رو با روشی که بهش میگن parameterized queries دفع میکنن و از برناممون محافظت میکنن.

2️⃣ اعتبارسنجی ورودی ها: باید یک سری اعتبارسنجی روی ورودی های کاربر هم از سمت فرانت‌اند و هم از سمت‌ بک‌اند صورت بگیره تا حدالامکان هیچ دیتای مشکوک و مخربی سمت بک‌اند وارد نشه.

3️⃣ استفاده از میدلور های امنیتی: استفاده کردن از میدلورهایی مثل helmet و csurf.

4️⃣ آپدیت نگه داشتن کتابخونه ها: همیشه پیگیر آپدیت هایی که برای پکیج های مهم برنامتون منتشر میشه باشید و اگر مشکل امنیتی‌ای فیکس شده حتما بعد از بررسی های لازم اون پکیج خاص رو آپدیت کنید تا از مشکلات احتمالی جلوگیری کنید.

کنجکاو بمونید.
#backend #nodejs #sqlinjection #sql #security #tips

🔗 @NimaCodez | © | Go Deep, Learn Deep, Ask Deep 🧠
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥17👍82🆒1
نصب شبی که درصد کمی از ما خواب بودن گیتهاب حوالی ساعت ۳ صبح ترکید و حوالی ۴ صبح به زندگی برگشت 😂😂

#نیم_خبر
@NimaCodez
😁16👾4👍2
Forwarded from پروگرمرزمیم
من اونقدر برنامه نویس خوبی نیستم ک بتونم تو دلت جاوا کنم.

#پروگرمر_عاشق

@programmerjokes_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
2😁21😭52❤‍🔥1👍1
⁉️🌐 اینترنت چطوری متولد شد؟

🧐 شاید یکی از شُکه کننده ترین فکتای دنیا اینه که: «اینترنت اونقدری که بنظر میاد بی‌سیم نیست
درواقع اون بخشی که بی‌سیم هست در مقابل اون بخشی که واقعا با سیم بهم وصل شده عددی نیست. اما ایده های این شبکه از کجا اومد؟

حوالی سال ۱۹۵۰ بود که ایده های وصل کردن چندتا کامپیوتر بهم دیگه برای رد و بدل کردن اطلاعات و منابعشون مطرح شد. از طرفی بخاطر «جنگ سرد روسیه با آمریکا» و خطرات ممکنِ یه «حمله اتمی» آمریکایی ها میخواستن تا جایی که ممکنه شرایط رو برای حفظ ارتباطاتشون محیا نگه‌دارن.

⭐️ اینطوری شد که «آرپانت» به وجود اومد؛ پدربزرگ اینترنت امروزی.

🟢 آرپانت اوایل یه مرکزی بود که تعدادی از دانشگاها و مناطق مهم رو بهم وصل میکرد؛ اما با گسترش این حوزه و به وجود اومدن TCP در حوالی ۱۹۷۴؛ این شبکه گسترده تر شد و به اینترنتی که ما امروزه میشناسیم شبیه تر شد.

اگه براتون جالب بود؛ لطفا برای حمایت از من و کانال ریکشن رو فراموش نکنید، خصوصا استارز :)
#network

🔗 @NimaCodez | © | Go Deep, Learn Deep, Ask Deep 🧠
Please open Telegram to view this post
VIEW IN TELEGRAM
3❤‍🔥27👍10🔥1
🔥 ‏Wikipedia Page Finder منتشر شد!

⭐️@weekipediabot یه رباته که شما به صورت اینلاین میتونید بهش یه موضوع بدید و همون رو تو ویکی‌پدیا سرچ میکنه و درنهایت میتونید نتیجه رو انتخاب و ارسال کنید.

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

🌐 ریپازیتوری گیتهاب: Wiki Page Finder
🤖 آدرس ربات:‌ @Weekipediabot

🔴 ورژن یک هست. خوشحال میشم نظراتتون؛ پیشنهاداتون؛ و حتی PR هاتون رو ببینم 💙.

⚡️ استک پروژه: Bun, TS, Typeorm, Sqlite, Telegraf

🔗 @NimaCodez
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥20👍3🔥2
یه راه خفن یادگیری اسپیکینگ (مکالمه) اینه که به انگلیسی صحبت کنید، منم این شانسو داشتم که یه آدم خیلی خفن تو این زمینه رو پیدا کنم و یه برنامه رایگان باهم در این باره لانچ کنیم.

امشب ساعت ۹:۳۰ تا ۱۰:۳۰ اولین جلسمون هست.

اگر دوست دارید شرکت کنید و زبانتون رو بهتر کنید پیوی پیام بدید برای گرفتن لینک و چیزای مرتبط:
-آیدی برداشته شد.

⚠️ چون همه میخوایم صحبت کنیم از چنل من فقط ۱۰ نفر میتونن لینک بگیرن.

این کلاس کاملا رایگانه.
❤‍🔥7👍5
بچه های کنکوری امشب راس ساعت ۱۲ سامانه انتخاب رشته بسته میشه

اگه یادتون نبوده و حواستون نبوده یا تغییراتی نیازه بدید بجنبید 🫳🏻
👍3
میدونستید امشب تولد گل سر سبد کامیونیتی برنامه‌نویساست؟
27🎉21👍62👾2
تجربه: تو سایت وردپرسی هیچوقت اول خرید نکنید.
۱- اول اکانت بسازید
۲- یه بار لاگ اوت کنید
۳- اگه پناه بر خدا گذاشت که دوباره لاگین کنید، اونوقت خریدتونو انجام بدید
که مثل من دو روز گرفتار نشید

اونم تو ایران که «فروشنده» تقریبا وجود نداره. همه «کاسبن» صرفا. یه پولی میگیرن و میرن. نه خدماتی نه پشتیبانی درست حسابی و مسئولیت پذیری؛ هیچی...
1👍31
نکته ای برای جلوگیری از خودکشی قطعی:

🪰 اگه از اول یه پروژه ای .prettierrc نداشتید و قوانین مربوط به فرمت کردن کدهاتون رو ننوشته بودید و بعدا که کلی فایل داشتید یادتون افتاد این کارو بکنید، این مراحل رو پیش برید تا تمام فایل های قدیمتون با این قوانین جدید فرمت بشن:

1️⃣:
bun add -d prettier


2️⃣:
bunx prettier --write .


🔺 این نقطه انتهای دستور یعنی همه فایل هارو فرمت کنه؛ اگه فقط فرمت خاصی مدنظرتون بود:

⚜️:
bunx prettier --write "**/*.{js,ts,tsx,css,md}"


امیدوارم به کارتون بیاد
پ.ن: از هر پکیج منیجری میتونید استفاده کنید قاعدتا. bun هارو به npm و bunx هارو به npx تغییر بدید مثلا.
#tips #prettier

@NimaCodez
Please open Telegram to view this post
VIEW IN TELEGRAM
3❤‍🔥15👍81