11.1K subscribers
3.12K photos
19 videos
138 files
3.66K links
Level up daily with insider dev hacks, smart career tips, and real talk! ๐Ÿš€

โšก๏ธ Stay connected with me: linktr.ee/AliSamir

๐Ÿ“ To advertise on the channel: https://telega.io/c/the_developer_guide
Download Telegram
Container Queries Explained โšก๏ธ

Container queries make components truly smart. They adapt to their space, not the screen.
โค1
ู…ู„ูŠูˆู† ุฎุจูŠุฑ ู„ุฃูˆุงู…ุฑ ุงู„ุฐูƒุงุก ุงู„ุงุตุทู†ุงุนูŠ

ู…ุจุงุฏุฑุฉ ุทู…ูˆุญุฉ ุชู‡ุฏู ุฅู„ู‰ ุชู…ูƒูŠู† ู…ู„ูŠูˆู† ูุฑุฏ ุจู…ู‡ุงุฑุงุช ุงู„ุฐูƒุงุก ุงู„ุงุตุทู†ุงุนูŠ ูˆู‡ู†ุฏุณุฉ ุงู„ุฃูˆุงู…ุฑ ุนู„ู‰ ู…ุฏุงุฑ ุงู„ุณู†ูˆุงุช ุงู„ุซู„ุงุซ ุงู„ู…ู‚ุจู„ุฉ ุงู†ุทู„ุงู‚ุงู‹ ู…ู† ุฏุจูŠ.

ุชูˆูุฑ ู‡ุฐู‡ ุงู„ุฏูˆุฑุฉ ุฃุณุงุณุงู‹ ู…ุชูŠู†ุงู‹ ู„ูู‡ู… ุงู„ุฐูƒุงุก ุงู„ุงุตุทู†ุงุนูŠ ูˆุงู„ุฐูƒุงุก ุงู„ุงุตุทู†ุงุนูŠ ุงู„ุชูˆู„ูŠุฏูŠ ูˆู‡ู†ุฏุณุฉ ุงู„ุฃูˆุงู…ุฑ ู„ุชุทุจูŠู‚ุงุช ูˆุฃุฏูˆุงุช ุงู„ุฐูƒุงุก ุงู„ุงุตุทู†ุงุนูŠุŒ ุจู…ุง ูŠู…ูƒู‘ู† ุงู„ู…ู†ุชุณุจูŠู† ู…ู† ุงู„ุงุณุชุฎุฏุงู… ุงู„ูุนุงู„ ู„ุฃุฏูˆุงุช ุงู„ุฐูƒุงุก ุงู„ุงุตุทู†ุงุนูŠ ููŠ ุนู…ู„ู‡ู… ูˆุญูŠุงุชู‡ู… ุงู„ูŠูˆู…ูŠุฉ. ูˆุณูˆู ูŠุชู‚ู† ุงู„ู…ุดุงุฑูƒูˆู† ู…ู† ุฎู„ุงู„ ุงู„ู…ู†ุงู‡ุฌ ุงู„ุชูุงุนู„ูŠุฉ ูˆุงู„ุนู…ู„ูŠุฉ ู„ุบุฉ ู…ุฎุงุทุจุฉ ุงู„ุฐูƒุงุก ุงู„ุงุตุทู†ุงุนูŠุŒ ูˆุตูŠุงุบุฉ ุฃูˆุงู…ุฑู‡ุŒ ุจู…ุง ูŠุนุฒุฒ ุงู„ุงุณุชูุงุฏุฉ ู…ู† ุชู‚ู†ูŠุงุชู‡ ุงู„ู…ุตู…ู…ุฉ ู„ุชุนุฒูŠุฒ ุงู„ุฅู†ุชุงุฌูŠุฉ ูˆุงู„ุฃุนู…ุงู„ ุงู„ุฅุจุฏุงุนูŠุฉุŒ ูˆู…ู† ุซู…ู‘ ุชุญู‚ูŠู‚ ุงู„ู†ุฌุงุญ ููŠ ุณูˆู‚ ุงู„ุนู…ู„ ูˆุชุทูˆุฑุงุชู‡ ุงู„ู…ุชุณุงุฑุนุฉ.

https://dub.ai/ar/omp-ar
โค2
Software Engineering for Undergrads ๐Ÿ’ฏ

โ€”โ€”โ€”

Software Engineering CS391 - 2024

Software Engineering CS391 Course at Faculty of Computers an Information, Assiut University

https://youtube.com/playlist?list=PLtk4ylDqiyiZxnwWGP-AsA8S5UYYsXp5U&si=K7b004cFY7yhH1GH
โค2
โค6
ุงู†ุถู… ุฅู„ู‰ #ู…ุฌุฑุฉ โ€” ู…ุฌุชู…ุน ุงู„ู…ุทูˆู‘ุฑูŠู† ูˆู…ุณุชุฌุฏู‘ุงุช ุงู„ุชู‚ู†ูŠุฉ!

ุงูƒุชุดู ุฃุญุฏุซ ุงู„ู…ู‚ุงู„ุงุช ูˆุงู„ุฃุฏูˆุงุช ูˆุดุงุฑูƒ ุฎุจุฑุงุชูƒ ู…ุน ู…ุทูˆู‘ุฑูŠู† ู…ู† ูƒู„ ู…ูƒุงู†.

https://majara.dev/register?ref=alisamir
โค4
ุฏุฑุฏุดุฉ ุณุฑูŠุนุฉ ุนู† ุงู„ู€ Temporal Dead Zone ููŠ JavaScript โšก๏ธ
.
.
ู„ูˆ ุงุดุชุบู„ุช ุจู€ let ุฃูˆ const ููŠ JavaScriptุŒ ูŠุจู‚ู‰ ู…ู‡ู… ุฌุฏู‹ุง ุชุจู‚ู‰ ูุงู‡ู… ุงู„ู…ูˆุถูˆุน ุฏู‡ ูƒูˆูŠุณ ุฌุฏู‹ุงโ€ฆ ุนุดุงู† ู‡ูˆ ูˆุงุญุฏ ู…ู† ุงู„ุญุงุฌุงุช ุงู„ู„ูŠ ู…ู…ูƒู† ุชุฎู„ูŠ ุงู„ูƒูˆุฏ ุจุชุงุนูƒ ูŠุถุฑุจ ูˆุฃู†ุช ู…ุด ูุงู‡ู… ู„ูŠู‡ุŒ ูˆุชูุถู„ ุชู„ู ุญูˆู„ ู†ูุณูƒ ุจุงู„ุณุงุนุงุช ุชุญุงูˆู„ ุชุญู„ error ุดูƒู„ู‡ ุบุฑูŠุจ ุฌุฏู‹ุง...

ุชุนุงู„ ู†ุฏุฑุฏุด ุดูˆูŠุฉ ุนู† ุงู„ู€ Temporal Dead Zone ุฃูˆ ุงู„ู€ TDZ

โ€”โ€”โ€”

๐ŸŽฏ ุงู„ุฃูˆู„: ูŠุนู†ูŠ ุฅูŠู‡ Temporal Dead ZoneุŸ


ุจุจุณุงุทุฉ ูƒุฏู‡ุŒ ุงู„ู€ Temporal Dead Zone ู‡ูŠ ุงู„ูุชุฑุฉ ุงู„ุฒู…ู†ูŠุฉ ุงู„ู„ูŠ ุจุชุจุฏุฃ ู…ู† ุฃูˆู„ ู…ุง ุงู„ู€ scope ุจุชุงุน ุงู„ู…ุชุบูŠุฑ ุจูŠุชู†ูุฐุŒ ู„ุญุฏ ุงู„ู„ุญุธุฉ ุงู„ู„ูŠ ุงู„ู…ุชุบูŠุฑ ู†ูุณู‡ ุจูŠุชุนุฑู ููŠู‡ุง (ูŠุนู†ูŠ ุจูŠุชุนู…ู„ู‡ declaration).

ุฎู„ุงู„ ุงู„ูุชุฑุฉ ุฏูŠุŒ ุงู„ู…ุชุบูŠุฑ ู…ูˆุฌูˆุฏ "ููŠ ุฏู…ุงุบ JavaScript" ุจุณ ู…ุด ู…ุณู…ูˆุญ ุชูˆุตู„ ู„ู‡ุŒ ูˆู„ูˆ ุญุงูˆู„ุช ุชุณุชุฎุฏู…ู‡... JavaScript ู‡ุชู‚ูˆู„ูƒ ReferenceError.

โ€”โ€”โ€”

โœ… ู…ุซุงู„ ุณุฑูŠุน ูŠูˆุถุญ ุงู„ู…ูˆุถูˆุน:


console.log(myVar); // ReferenceError: Cannot access 'myVar' before initialization
let myVar = 10;


ุชูุชูƒุฑ ู„ูŠู‡ ุงู„ูƒูˆุฏ ุฏู‡ ุจูŠุทู„ุน ErrorุŸ

ุฏู‡ ู„ุฃู† myVar ุฏุฎู„ ููŠ ุงู„ู€ Temporal Dead Zone ู…ู† ุฃูˆู„ ู…ุง ุงู„ู€ scope ุจุฏุฃุŒ ูˆู…ุด ุฎุงุฑุฌ ู…ู†ู‡ุง ุบูŠุฑ ุจุนุฏ ู…ุง ู†ูˆุตู„ ู„ุณุทุฑ
let myVar = 10


ูŠุนู†ูŠ ุงู„ู…ุชุบูŠุฑ ู…ูˆุฌูˆุฏ ุจุณ ู…ุด ุฌุงู‡ุฒ ู„ุณู‡ ู„ู„ุงุณุชุฎุฏุงู….

โ€”โ€”โ€”

๐Ÿค” ุทุจ ู„ูŠู‡ ุฏู‡ ุจูŠุญุตู„ุŸ


ุงู„ู€ JavaScript ุจุชุนู…ู„ ุญุงุฌุฉ ุงุณู…ู‡ุง Hoisting ู„ูƒู„ ุงู„ู…ุชุบูŠุฑุงุชุŒ ุณูˆุงุก var ุฃูˆ let ุฃูˆ const.

ุจุณ ููŠู‡ ูุฑู‚:

- ุงู„ู€ var: ุจูŠุชุนู…ู„ู‡ hoisting ูˆุชุจู‚ู‰ ุงู„ู€ default value = undefinedุŒ ูู…ู…ูƒู† ุชุณุชุฎุฏู…ู‡ุง ู‚ุจู„ ู…ุง ุชูุนู„ู† ุนู†ู‡ุง.
- ุงู„ู€ let ูˆ const: ุจูŠุชุนู…ู„ู‡ู… hoisting ุจุฑุฏูˆุŒ ู„ูƒู† ู…ู„ู‡ู…ุด valueุŒ ูˆุจูŠูƒูˆู†ูˆุง ููŠ ู…ู†ุทู‚ุฉ ุงุณู…ู‡ุง ุงู„ู€ TDZ ู„ุญุฏ ู…ุง ูŠูˆุตู„ ุงู„ุณุทุฑ ุงู„ู„ูŠ ุจูŠุนู…ู„ู‡ู… declaration.

โ€”โ€”โ€”

ู…ุฌู…ูˆุนุฉ ุฃู…ุซู„ุฉ ุชูˆุถุญ ุงู„ูุฑู‚ ุจูŠู† var ูˆ let:


ู…ุซุงู„ ุจู€ var:

console.log(a); // undefined
var a = 5;


ู†ูุณ ุงู„ู…ุซุงู„ ุจู€ let:

console.log(b); // ReferenceError
let b = 5;


ุงู„ุงุชู†ูŠู† ุงุชุนู…ู„ู‡ู… hoistingโ€ฆ ุจุณ var ุฃุฎุฐ value undefinedุŒ ุฅู†ู…ุง let ู…ู† ุบูŠุฑ valueุŒ ูุฏุฎู„ ููŠ ุงู„ู€ TDZ...

โ€”โ€”โ€”

๐Ÿ“Œ ู…ุนู„ูˆู…ุงุช ู…ู‡ู…ุฉ ุนู† ุงู„ู€ TDZ:


1- ุงู„ู€ TDZ ู…ุด ุจุณ ุจุชุฃุซุฑ ุนู„ู‰ ุงู„ู…ุชุบูŠุฑุงุชโ€ฆ ูƒู…ุงู† ุจุชุฃุซุฑ ุนู„ู‰ function parameters ุงู„ู„ูŠ ู…ุชุนุฑู ู„ู‡ุง default values

2- ุงู„ู…ุชุบูŠุฑ ุจูŠูุถู„ ููŠ TDZ ู„ุญุฏ ู…ุง ุชูˆุตู„ ู„ุณุทุฑ ุงู„ุชุนุฑูŠู ุจุชุงุนู‡.

3- ุงู„ู€ const ูƒู…ุงู† ู„ู‡ุง TDZ ุฒูŠ let ุจุงู„ุถุจุทุŒ ู„ูƒู† ุงู„ูุฑู‚ ุฅู†ูƒ ู„ุงุฒู… ุชุนุทูŠู‡ุง ู‚ูŠู…ุฉ ูˆู‚ุช ุงู„ุชุนุฑูŠู.

4- ุงู„ู€ TDZ ุจุชู…ู†ุนูƒ ู…ู† ุงุณุชุฎุฏุงู… ุงู„ู…ุชุบูŠุฑ ู‚ุจู„ ู…ุง ุชุฌู‡ุฒู‡ุŒ ูˆุฏู‡ ู‡ูŠุญู…ูŠูƒ ู…ู† ู…ุดุงูƒู„ ูƒุชูŠุฑุฉ.

โ€”โ€”โ€”

๐Ÿง  ูƒุฏู‡ ู†ูู‡ู… ุฅู†:

ุงู„ู€ let ูˆ const ุฃุญุณู† ู…ู† var ููŠ ุฅู†ู‡ู… ุจูŠุฎู„ูˆุง ุงู„ูƒูˆุฏ predictable.

ุจุณ ููŠ ู†ูุณ ุงู„ูˆู‚ุช ู„ุงุฒู… ุชูƒูˆู† ูุงู‡ู… TDZ ูƒูˆูŠุณ ุฌุฏู‹ุง ุนู„ุดุงู† ู…ุชุบู„ุทุด ุบู„ุทุฉ ุจุณูŠุทุฉ ุชูƒุณุฑู„ูƒ ุงู„ูƒูˆุฏ.

ูƒู„ ู…ุง ุชุณุชุฎุฏู… let ุฃูˆ const ููˆู‚ ููŠ ุงู„ูƒูˆุฏุŒ ุชุฃูƒุฏ ุฅู†ูƒ ู…ุด ุจุชุณุชุฏุนูŠู‡ู… ู‚ุจู„ ู…ุง ูŠุชุนุฑููˆุง.
โค5๐Ÿ”ฅ1
Deep clean and optimize your Mac. ๐Ÿš€

https://github.com/tw93/mole
โค4
ูŠุนู†ูŠ ุฅูŠู‡ API GatewayุŸ
.
.
ุชุฎูŠู„ ู…ุนุงูŠุง ุฅู†ูƒ ุฏุงุฎู„ ู…ุทุนู… ูƒุจูŠุฑ ุฌุฏู‹ุงุŒ ูˆุงู„ู…ุทุจุฎ ููŠู‡ ุฃูƒุชุฑ ู…ู† ุดูŠู:
ูˆุงุญุฏ ู…ุณุคูˆู„ ุนู† ุงู„ุจูŠุชุฒุง ๐Ÿ•ุŒ ูˆุงู„ุชุงู†ูŠ ุนู† ุงู„ุญู„ูˆูŠุงุช ๐ŸฐุŒ ูˆุงู„ุชุงู„ุช ุนู† ุงู„ู…ุดุฑูˆุจุงุช โ˜•๏ธ.

ูˆุฃู†ุช ูƒู€ ุฒุจูˆู†ุŒ ู…ุด ู‡ุชุฑูˆุญ ู„ูƒู„ ุดูŠู ูˆุชุทู„ุจ ู…ู†ู‡ุŒ ุตุญุŸ
ููŠู‡ ุฌุฑุณูˆู† (ุงู„ู€ waiter) ุจูŠุงุฎุฏ ุทู„ุจูƒ ูˆูŠูˆุตู‘ู„ู‡ ู„ู„ู…ุทุจุฎุŒ ูˆูŠุฌูŠุจู„ูƒ ุงู„ุฃูƒู„ ูƒู„ู‡ ู…ุฑู‘ุฉ ูˆุงุญุฏุฉ.

ุงู„ุฌุฑุณูˆู† ุฏู‡ ููŠ ุนุงู„ู… ุงู„ุจุฑู…ุฌุฉ ุงุณู…ู‡: API Gateway.

โ€”โ€”โ€”

๐Ÿ’ก ูŠุนู†ูŠ ุฅูŠู‡ API GatewayุŸ

ุจุจุณุงุทุฉุŒ ุงู„ู€ API Gateway ู‡ูˆ ุญุงุฑุณ ุงู„ุจูˆุงุจุฉ ุฃูˆ ู†ู‚ุทุฉ ุงู„ุฏุฎูˆู„ ุงู„ูˆุญูŠุฏุฉ ู„ูƒู„ ุงู„ู€ APIs ุงู„ู„ูŠ ุงู„ุณูŠุฑูุฑ ุฃูˆ ุงู„ู†ุธุงู… ุจูŠู‚ุฏู‘ู…ู‡ุง.

ู„ูˆ ุนู†ุฏูƒ ู†ุธุงู… ุถุฎู… (ุฒูŠ ู…ูˆู‚ุน ุชุฌุงุฑุฉ ุฅู„ูƒุชุฑูˆู†ูŠุฉ ู…ุซู„ู‹ุง)ุŒ ู‡ุชู„ุงู‚ูŠ ูƒู„ ุฌุฒุก ููŠู‡ ุดุบู‘ุงู„ ูƒู€ Microservice:

- ุฌุฒุก ู„ุทู„ุจ ุงู„ุฃูˆุฑุฏุฑุงุช
- ุฌุฒุก ู„ุญุณุงุจุงุช ุงู„ู…ุณุชุฎุฏู…ูŠู†
- ุฌุฒุก ู„ู„ู…ู†ุชุฌุงุช
- ุฌุฒุก ู„ู„ุฏูุน ุงู„ุฅู„ูƒุชุฑูˆู†ูŠ


ุงู„ู€ API Gateway ุจูŠุฌู…ุน ูƒู„ ุงู„ุฎุฏู…ุงุช ุฏูŠ ูˆุจูŠุฎู„ูŠ ุงู„ู€ Frontend ุฃูˆ ุงู„ู…ูˆุจุงูŠู„ ูŠุชุนุงู…ู„ ู…ุน ู†ู‚ุทุฉ ูˆุงุญุฏุฉ ุจุณุŒ ุจุฏู„ ู…ุง ูŠุจุนุช ุทู„ุจุงุช ู…ุชูุฑู‚ุฉ ู„ูƒู„ ุฎุฏู…ุฉ.

โ€”โ€”โ€”

๐Ÿค” ู„ูŠู‡ ู†ุณุชุฎุฏู… API GatewayุŸ

โœ… ุชูˆุญูŠุฏ ู†ู‚ุทุฉ ุงู„ุงุชุตุงู„
ุจุฏู„ ู…ุง ุงู„ู€ Frontend ูŠุชุนุงู…ู„ ู…ุน 5 ุฃูˆ 10 APIsุŒ ุจูŠุชุนุงู…ู„ ู…ุน gateway ูˆุงุญุฏุฉ.

๐Ÿ” ุงู„ุฃู…ุงู†
ุงู„ู€ Gateway ุชู‚ุฏุฑ ุชุถูŠู layer ู„ู„ุฃู…ุงู†: JWT, API keys, Rate limiting... ุฅู„ุฎ.

๐Ÿ“Š ุงู„ู…ุฑุงู‚ุจุฉ ูˆุงู„ุชุญู„ูŠู„
ุชู‚ุฏุฑ ุชุนุฑู ู…ูŠู† ุจูŠุทู„ุจ ุฅูŠู‡ุŒ ูˆุฅู…ุชู‰ุŒ ูˆุชุฑุงู‚ุจ ูƒู„ ุญุงุฌุฉ ู…ู† ู…ูƒุงู† ูˆุงุญุฏ.

๐Ÿ“ฆ ุงู„ู€ Caching ูˆ Load Balancing
ู…ู…ูƒู† ูŠุฎุฒู‘ู† ุงู„ุฑุฏูˆุฏ (Cache) ูˆูŠูˆุฒู‘ุน ุงู„ุฃุญู…ุงู„ ุจุดูƒู„ ุฐูƒูŠ.

๐Ÿ” ุชุญูˆูŠู„ ุงู„ุจูŠุงู†ุงุช
ู„ูˆ ุฎุฏู…ุฉ ุจุชุฑุฏ ุจู€ XML ูˆุงู†ุช ู…ุญุชุงุฌ JSONุŒ ุงู„ู€ Gateway ู…ู…ูƒู† ูŠุชุตุฑู.

โ€”โ€”โ€”

๐Ÿ›  ุฃู…ุซู„ุฉ ุญู‚ูŠู‚ูŠุฉ ู„ู€ API Gateways:

- Kong
- AWS API Gateway
- Nginx
- Apigee
- Zuul

โ€”โ€”โ€”

#ุฏู‚ูŠู‚ุฉ_ุจุฑู…ุฌุฉ
โค9
โค4
โค4
ู…ููŠุด ูƒูˆุฑุณ ูˆุงุญุฏ ุจูŠุบุทูŠ ูƒู„ ุญุงุฌุฉ ุนู† ุงู„ู€ Security ููŠ ุงู„ู€ FrontendุŒ ุจุณ ู„ูˆ ุนุงูŠุฒ ุชุจุฏุฃ ุตุญุŒ ุฑูƒู‘ุฒ ุนู„ู‰ ุงู„ู…ูˆุงุถูŠุน ุฏูŠ ุจุงู„ุชุฑุชูŠุจ:


1- XSS (Cross-Site Scripting)
Prevent users from injecting malicious code into your page.

2- CSRF (Cross-Site Request Forgery)
Protect your forms and requests from being executed without user consent.

3- Authentication & Authorization
Understand JWT, cookies, tokens, and how to handle them securely.

4- Input Validation & Sanitization
Never trust user input, always validate and sanitize it.

5- Secure Headers
Use headers like CSP, X-Frame-Options, and X-Content-Type-Options to strengthen your appโ€™s security.

6- Dependencies Security
Regularly check your npm packages (npm audit, Snyk) for vulnerabilities.

7- HTTPS & CORS
Understand how HTTPS works and how to configure CORS properly.

8- Session Management
Store and handle session tokens safely.

9- Clickjacking & Phishing Protection
Protect your app from being embedded or tricking users with fake UI.
โค6
Divider between items in CSS โšก๏ธ
โค2
ุงู„ูุฑู‚ ุจูŠู† ุงู„ู€ Primary Key ูˆุงู„ู€ Foreign Key ๐Ÿ’ฏ
.
.
ุฎู„ูŠู†ุง ู†ุชุฎูŠู„ ู‚ูˆุงุนุฏ ุงู„ุจูŠุงู†ุงุช ูƒุฃู†ู‡ุง ุดูŠุช ุฅูƒุณูŠู„ ูƒุจูŠุฑ ููŠู‡ ุฌุฏุงูˆู„ (Tables)ุŒ ูˆูƒู„ ุฌุฏูˆู„ ููŠู‡ ุตููˆู (Rows) ูˆุฃุนู…ุฏุฉ (Columns)ุŒ ุฅุฒุงูŠ ู†ู‚ุฏุฑ ู†ู…ูŠู‘ุฒ ูƒู„ ุตู ู„ูˆุญุฏู‡ุŸ ุฃูˆ ู†ุฑุจุท ุจูŠู† ุฌุฏูˆู„ ูˆุฌุฏูˆู„ุŸ ู‡ู†ุง ุจู‚ู‰ ุจูŠูŠุฌูŠ ุฏูˆุฑ ุงู„ู€ Primary Key ูˆุงู„ู€ Foreign Key.

โ€”โ€”โ€”

๐Ÿ”ธ ุฃูˆู„ู‹ุง: ุงู„ู€ Primary Key โ€“ ุงู„ู…ูุชุงุญ ุงู„ุฃุณุงุณูŠ

ุฏู‡ ุฒูŠ ุฑู‚ู… ุงู„ุจุทุงู‚ุฉ ุฃูˆ ุฑู‚ู… ุงู„ุฌู„ูˆุณ ูƒุฏู‡ุŒ ูƒู„ ุตู ููŠ ุงู„ุฌุฏูˆู„ ู„ุงุฒู… ูŠูƒูˆู† ุนู†ุฏู‡ ู‚ูŠู…ุฉ ู…ู…ูŠุฒุฉ ููŠ ุงู„ุนู…ูˆุฏ ุฏู‡ุŒ ุนู„ุดุงู† ู†ุนุฑู ู†ูˆุตู„ู‡ ุจุณู‡ูˆู„ุฉ ู…ู† ูˆุณุท 1000 ุตู ุชุงู†ูŠ.

- ู„ุงุฒู… ูŠูƒูˆู† Unique: ูŠุนู†ูŠ ูƒู„ ุตู ู„ู‡ ุฑู‚ู… ู…ุฎุชู„ู ุนู† ุงู„ุชุงู†ูŠ.
- ู„ุง ูŠุณู…ุญ ุจู€ null: ูŠุนู†ูŠ ู„ุงุฒู… ุชูƒูˆู† ุงู„ู‚ูŠู…ุฉ ู…ูˆุฌูˆุฏุฉ ูˆู…ุด ูุงุถูŠุฉ.


๐ŸŽฏ ู…ุซุงู„ ุจุณูŠุท: ู„ูˆ ุนู†ุฏูƒ ุฌุฏูˆู„ ุงุณู…ู‡ StudentsุŒ ู…ู…ูƒู† ุชุถูŠู ุนู…ูˆุฏ ุงุณู…ู‡ student_id ูƒู€ Primary Key. ูŠุนู†ูŠ ูƒู„ ุทุงู„ุจ ู„ู‡ ID ู…ุฎุชู„ูุŒ ุฏู‡ ุจูŠุณุงุนุฏู†ุง ู†ู…ูŠู‘ุฒู‡ ูˆู†ุชุนุงู…ู„ ู…ุน ุจูŠุงู†ุงุชู‡ ุจุณู‡ูˆู„ุฉ.

โ€”โ€”โ€”

๐Ÿ”ธ ุซุงู†ูŠู‹ุง: ุงู„ู€ Foreign Key โ€“ ุงู„ู…ูุชุงุญ ุงู„ุฃุฌู†ุจูŠ ุฃูˆ ุงู„ู…ูุชุงุญ ุงู„ุฑุงุจุท

ู‡ู†ุง ุจู‚ู‰ ุงู„ู…ูˆุถูˆุน ู„ู‡ ุนู„ุงู‚ุฉ ุจุงู„ุนู„ุงู‚ุงุช (Relationships) ุจูŠู† ุงู„ุฌุฏุงูˆู„.

ุงู„ู€ Foreign Key ู‡ูˆ ุนู…ูˆุฏ ู…ูˆุฌูˆุฏ ููŠ ุฌุฏูˆู„ุŒ ุจุณ ุจูŠุฑุฌุน ูŠุดุงูˆุฑ ุนู„ู‰ ุงู„ู€ Primary Key ุจุชุงุน ุฌุฏูˆู„ ุชุงู†ูŠ.
ูŠุนู†ูŠ ุจูŠู‚ูˆู„ูƒ: "ุงู„ู‚ูŠู…ุฉ ุงู„ู„ูŠ ู‡ู†ุงุŒ ู„ุงุฒู… ุชูƒูˆู† ู…ูˆุฌูˆุฏุฉ ู‡ู†ุงูƒ"


โœ… ุงุณุชุฎุฏุงู…ู‡ ุงู„ุฃุณุงุณูŠ:

- ุจูŠุฑุจุท ุงู„ุฌุฏุงูˆู„ ุจุจุนุถ.
- ุจูŠุณุงุนุฏู†ุง ู†ุญุงูุธ ุนู„ู‰ "ุณู„ุงู…ุฉ ุงู„ุจูŠุงู†ุงุช" (Data Integrity)ุŒ ูŠุนู†ูŠ ู…ูŠุจู‚ุงุด ููŠู‡ ุจูŠุงู†ุงุช ู…ู„ู‡ุงุด ู…ุนู†ู‰ ุฃูˆ ู…ู„ู‡ุงุด ุนู„ุงู‚ุฉ.


๐ŸŽฏ ู…ุซุงู„: ู„ูˆ ุนู†ุฏู†ุง ุฌุฏูˆู„ ุงุณู…ู‡ OrdersุŒ ูˆุนุงูŠุฒูŠู† ู†ุนุฑู ูƒู„ ุฃูˆุฑุฏุฑ ุงุชุนู…ู„ ู…ู† ู…ูŠู†ุŒ ู‡ู†ุถูŠู ุนู…ูˆุฏ ุงุณู…ู‡ user_id ูƒู€ Foreign KeyุŒ ุงู„ู„ูŠ ุจูŠุฑุจุท ุงู„ุฃูˆุฑุฏุฑ ุฏู‡ ุจุงู„ู…ุณุชุฎุฏู… ุงู„ู„ูŠ ู…ูˆุฌูˆุฏ ููŠ ุฌุฏูˆู„ Users.

โ€”โ€”โ€”

๐Ÿ“Œ ุงู„ุฎู„ุงุตุฉ ููŠ ูƒู„ู…ุชูŠู†:

- ุงู„ู€ Primary Key: ุจูŠู…ูŠุฒ ูƒู„ ุตู ููŠ ุฌุฏูˆู„ ู„ูˆุญุฏู‡.
- ุงู„ู€ Foreign Key: ุจูŠุฑุจุท ุงู„ุตู ุฏู‡ ุจุตู ุชุงู†ูŠ ููŠ ุฌุฏูˆู„ ุชุงู†ูŠ.

ุงู„ุงุชู†ูŠู† ู…ุน ุจุนุถ ุฒูŠ ุงู„ู…ูุชุงุญ ูˆุงู„ุจุงุจ... ูˆุงุญุฏ ูŠูุชุญู„ูƒ ุงู„ุตูุŒ ูˆุงู„ุชุงู†ูŠ ูŠุฎู„ูŠูƒ ุชูˆุตู„ ู„ุฌุฏูˆู„ ุชุงู†ูŠ ูˆุชุฑุจุท ุงู„ุจูŠุงู†ุงุช ุจุจุนุถู‡ุง. ๐Ÿ’ก

โ€”โ€”โ€”

#ุฏู‚ูŠู‚ุฉ_ุจุฑู…ุฌุฉ
โค4
ูŠุนู†ูŠ ุฅูŠู‡ Bearer Token ูˆุฅุฒุงูŠ ุจูŠุดุชุบู„ุŸ ๐Ÿค”

.
.
ุฎู„ูŠู†ูŠ ุฃุณุฃู„ูƒ ุณุคุงู„... ู„ู…ุง ุชุฏุฎู„ ุฃูŠ ู…ูˆู‚ุน ูˆูŠุทู„ุจ ู…ู†ูƒ ุชุณุฌูŠู„ ุงู„ุฏุฎูˆู„ุŒ ู‡ู„ ูƒู„ ู…ุฑุฉ ุจุชูุชุญ ุงู„ู…ูˆู‚ุน ุจูŠุทู„ุจ ู…ู†ูƒ ุงุณู… ุงู„ู…ุณุชุฎุฏู… ูˆุงู„ุจุงุณูˆุฑุฏ ู…ู† ุงู„ุฃูˆู„ุŸ "ููŠ ุงู„ุบุงู„ุจ" ู„ุงุŒ ู„ุฃู†ู‡ ุจุนุฏ ู…ุง ุจุชุณุฌู‘ู„ ุฏุฎูˆู„ ุจูŠุชู… ุฅุตุฏุงุฑ Token ุชุณุชุฎุฏู…ู‡ ุจุฏู„ ู…ุง ุชุฏุฎู„ ุจูŠุงู†ุงุชูƒ ูƒู„ ู…ุฑุฉ.

ู‡ู†ุง ุจู‚ู‰ ุจูŠูŠุฌูŠ ุฏูˆุฑ ุงู„ู€ Bearer Token... ุฏู‡ ูˆุงุญุฏ ู…ู† ุฃุดู‡ุฑ ุฃู†ูˆุงุน ุงู„ู€ Access Tokens ูˆุงู„ู„ูŠ ุจูŠุชู… ุงุณุชุฎุฏุงู…ู‡ ููŠ ุงู„ู€ authentication (ูˆุบุงู„ุจู‹ุง ู…ุน ู…ุนูŠุงุฑ OAuth 2.0)ุŒ ูˆุฏู‡ ู…ุนู†ุงู‡ ุฅู†ูƒ ู„ู…ุง ุชุจุนุช request ู„ุฃูŠ API ู…ุญู…ูŠ (Protected)ุŒ ุจุฏู„ ู…ุง ุชุจุนุช ุจูŠุงู†ุงุช ุชุณุฌูŠู„ ุงู„ุฏุฎูˆู„ ูƒู„ ู…ุฑุฉุŒ ุจุชุจุนุช ุงู„ู€ Token ุจูŠุฃูƒุฏ ุฅู†ูƒ ุดุฎุต ู…ูˆุซูˆู‚.

ุจุณ ุฎู„ูŠู†ูŠ ุฃู‚ูˆู„ูƒ ุฅู† ุงุณุชุฎุฏุงู… Bearer Token ู…ุญุชุงุฌ ุดูˆูŠุฉ ุชูุงุตูŠู„ ู„ุงุฒู… ุชุจู‚ู‰ ูุงู‡ู…ู‡ุง ูƒูˆูŠุณุŒ ู„ุฃู† ุฃูŠ ุบู„ุทุฉ ููŠ ุงู„ุชุนุงู…ู„ ู…ุนุงู‡ ู…ู…ูƒู† ุชุฎู„ูŠ ุจูŠุงู†ุงุชูƒ ุนุฑุถุฉ ู„ู„ุฅุฎุชุฑุงู‚.

โ€”โ€”โ€”

๐Ÿ“Œ ุฅุฒุงูŠ ุงู„ู€ Bearer Token ุจูŠุดุชุบู„ุŸ


ุงู„ู…ูˆุถูˆุน ุจูŠุชู… ุนู„ู‰ 3 ู…ุฑุงุญู„:

1- ุชุณุฌูŠู„ ุงู„ุฏุฎูˆู„: ู„ู…ุง ุงู„ู…ุณุชุฎุฏู… ุจูŠุฏุฎู„ ุจูŠุงู†ุงุชู‡ ุงู„ุตุญุŒ ุงู„ุณูŠุฑูุฑ ุจูŠุนู…ู„ู‡ authenticateุŒ ูˆุจุนุฏู‡ุง ุจูŠุตุฏุฑ ู„ู‡ Bearer Token (ู…ู…ูƒู† ูŠูƒูˆู† ู…ุดูุฑ ุฒูŠ JWT).

2- ุงุณุชุฎุฏุงู… ุงู„ู€ Token: ููŠ ูƒู„ request ุจุนุฏ ูƒุฏู‡ุŒ ุงู„ู€ Token ุจูŠุชุจุนุช ู…ุน ุงู„ู‡ูŠุฏุฑ (Header) ููŠ ุงู„ู€ Authorization ุจุงู„ุดูƒู„ ุฏู‡:

Authorization: Bearer YOUR_ACCESS_TOKEN


ูˆุฏู‡ ู…ุนู†ุงู‡ ุฅู† ุฃูŠ ุญุฏ ู…ุนุงู‡ ุงู„ู€ Token ูŠู‚ุฏุฑ ูŠุณุชุฎุฏู…ู‡ ู„ู„ูˆุตูˆู„ ู„ู„ู€ API

3- ุงู„ุชุญู‚ู‚ ู…ู† ุงู„ู€ Token: ุงู„ุณูŠุฑูุฑ ุจูŠุณุชู„ู… ุงู„ู€ Token ูˆูŠุดูˆู ุฅุฐุง ูƒุงู† ุตุงู„ุญ ูˆู„ุง ู„ุง (ู…ู…ูƒู† ุจู…ูุชุงุญ ุชุดููŠุฑ ู„ูˆ ู…ุดูุฑ)ุŒ ูˆู„ูˆ ูƒุงู† ุตุญูŠุญุŒ ุจูŠูƒู…ู„ ุชู†ููŠุฐ ุงู„ุทู„ุจุŒ ูˆู„ูˆ ูƒุงู† ู…ู†ุชู‡ูŠ ุฃูˆ ุบูŠุฑ ุตุญูŠุญุŒ ุจูŠุฑุฏ ุจุฎุทุฃ Unauthorized (401).

โ€”โ€”โ€”

๐Ÿ“Œ ุทุจ ู„ูŠู‡ ุงุณู…ู‡ Bearer TokenุŸ


ูƒู„ู…ุฉ Bearer ู…ุนู†ุงู‡ุง "ุญุงู…ู„"ุŒ ูˆุฏู‡ ู„ุฃู† ุฃูŠ ุญุฏ ู…ุนุงู‡ ุงู„ู€ Token ุฏู‡ ูŠู‚ุฏุฑ ูŠุณุชุฎุฏู…ู‡ ู…ู† ุบูŠุฑ ู…ุง ูŠุซุจุช ู‡ูˆูŠุชู‡ ุจุฃูŠ ุญุงุฌุฉ ุชุงู†ูŠุฉ. ุจู…ุนู†ู‰ ุฅู† ุงู„ู€ Token ู„ูˆ ุงุชุณุฑู‚ุŒ ุงู„ู„ูŠ ุณุฑู‚ู‡ ู‡ูŠู‚ุฏุฑ ูŠุณุชุฎุฏู…ู‡ ูƒุฃู†ู‡ ุฃู†ุช ุจุงู„ุถุจุท.

โ€”โ€”โ€”

๐Ÿ“Œ ุฅูŠู‡ ุงู„ู…ุดุงูƒู„ ุงู„ุฃู…ู†ูŠุฉ ุงู„ู„ูŠ ู…ู…ูƒู† ุชูˆุงุฌู‡ูƒ ู…ุน Bearer TokenุŸ

๐Ÿ’€ ุงู„ู€ Token Theft: ู„ูˆ ุญุฏ ู‚ุฏุฑ ูŠุญุตู„ ุนู„ู‰ ุงู„ู€ Token ุจุชุงุนูƒุŒ ูŠู‚ุฏุฑ ูŠุณุชุฎุฏู…ู‡ ูƒุฃู†ู‡ ุฃู†ุชุŒ ูˆู…ููŠุด extra verification ุฒูŠ ุงู„ู€ refresh tokens ุฃูˆ OAuth flows ุงู„ู„ูŠ ุจุชุชุฃูƒุฏ ุฅู† ุงู„ุดุฎุต ูุนู„ู‹ุง ู‡ูˆ ุงู„ู…ุณุชุฎุฏู… ุงู„ุญู‚ูŠู‚ูŠ.

โŒ›๏ธ ุงู„ู€ Expiration Issues: ู„ูˆ ุงู„ู€ Token ู…ุด ุจูŠุฎู„ุต ุจุณุฑุนุฉุŒ ูŠุจู‚ู‰ ุนู†ุฏูƒ ู…ุดูƒู„ุฉุŒ ู„ุฃู† ุฃูŠ ุญุฏ ูŠุณุฑู‚ู‡ ูŠู‚ุฏุฑ ูŠุณุชุฎุฏู…ู‡ ู„ู…ุฏุฉ ุทูˆูŠู„ุฉุŒ ุนุดุงู† ูƒุฏู‡ ุงู„ู€ Tokens ุจุชุจู‚ู‰ ู„ู‡ุง expiry timeุŒ ูˆุจุนุฏู‡ุง ู„ุงุฒู… ุชุนู…ู„ refresh.

๐Ÿ“ก ุงู„ู€ Man-in-the-Middle Attacks: ู„ูˆ ุงู„ู€ Token ุจูŠุชุจุนุช ู…ู† ุบูŠุฑ encryptionุŒ ู…ู…ูƒู† ุญุฏ ูŠุนุชุฑุถู‡ ูˆูŠุณุชุฎุฏู…ู‡ุŒ ุนุดุงู† ูƒุฏู‡ ู„ุงุฒู… ุชุชุฃูƒุฏ ุฅู† ูƒู„ ุญุงุฌุฉ ุจุชุชู… ุชุญุช HTTPS ู…ุด HTTP

๐Ÿ”„ ุงู„ู€ Replay Attacks: ู„ูˆ ู…ูƒู†ุด ููŠู‡ ุญู…ุงูŠุฉ ุฒูŠ timestampsุŒ ู…ู…ูƒู† ุญุฏ ูŠุณุชุฎุฏู… ุงู„ู€ Token ุงู„ู…ุณุฑูˆู‚ ุฃูƒุชุฑ ู…ู† ู…ุฑุฉ.

โ€”โ€”โ€”

๐Ÿ“Œ ุฅุฒุงูŠ ุชุฃู…ู† ุงู„ู€ Bearer TokenุŸ


โœ… ุงุณุชุฎุฏู… HTTPS: ุนุดุงู† ุชู…ู†ุน ุฃูŠ ุญุฏ ู…ู† ุงู„ุชุฌุณุณ ุนู„ู‰ ุงู„ู€ Token ุฃุซู†ุงุก ู†ู‚ู„ู‡.

โœ… ุญุฏุฏ ู…ุฏุฉ ุตู„ุงุญูŠุฉ ู‚ุตูŠุฑุฉ ู„ู„ู€ Token: ุฎู„ูŠ ุงู„ู€ Token ูŠุฎู„ุต ุจุนุฏ ูุชุฑุฉ ู‚ุตูŠุฑุฉ ุนุดุงู† ู„ูˆ ุงุชุณุฑู‚ุŒ ูŠุจู‚ู‰ ู…ู„ูˆุด ู„ุงุฒู…ุฉ.

โœ… ุงุณุชุฎุฏู… Refresh Tokens: ุนุดุงู† ุงู„ู…ุณุชุฎุฏู… ูŠู‚ุฏุฑ ูŠุญุตู„ ุนู„ู‰ Token ุฌุฏูŠุฏ ู„ู…ุง ุงู„ู€ Token ุงู„ู‚ุฏูŠู… ูŠุฎู„ุต.

โœ… ุฎุฒู† ุงู„ู€ Token ููŠ ู…ูƒุงู† ุขู…ู†: ููŠ ุงู„ู…ุชุตูุญุŒ ุจู„ุงุด ุชุฎุฒู†ู‡ ููŠ localStorage ู„ุฃู†ู‡ ู…ู…ูƒู† ูŠุชุณุฑู‚ ุจุณู‡ูˆู„ุฉุŒ ุงุณุชุฎุฏู… HttpOnly Cookies ู„ูˆ ุฃู…ูƒู†.

โœ… ุงุณุชุฎุฏู… Scopes: ู„ูˆ ุจุชุณุชุฎุฏู… APIุŒ ู…ุชุฏูŠุด ุงู„ู€ Token ุตู„ุงุญูŠุงุช ุฃูƒุชุฑ ู…ู† ุงู„ู…ุทู„ูˆุจุŒ ู…ุซู„ู‹ุง ู…ุชุฏูŠู„ูˆุด ุตู„ุงุญูŠุฉ ุฅู†ู‡ ูŠู…ุณุญ ุฏุงุชุง ู„ูˆ ู‡ูˆ ุจุณ ู‡ูŠู‚ุฑุฃ ุจูŠุงู†ุงุช.

โœ… ุธุจุท CORS ูƒูˆูŠุณ: ุนุดุงู† ุชู…ู†ุน ุฃูŠ ู…ุตุฏุฑ ู…ุด ู…ูˆุซูˆู‚ ู…ู† ุงุณุชุฎุฏุงู… ุงู„ู€ Token.

โ€”โ€”โ€”

#ุฏู‚ูŠู‚ุฉ_ุจุฑู…ุฌุฉ
โค11
๐ŸŽฏ ุงู„ูุฑู‚ ุจูŠู† ุงู„ู€ Client-side Validation ูˆุงู„ู€ Server-side Validation
.
.
ุฃูˆู„ ุญุงุฌุฉ ุชุนุงู„ ู†ุชูู‚ ุฅู† ุงู„ู€ "Validation" ูŠุนู†ูŠ ุงู„ุชุญู‚ู‚ ู…ู† ุตุญุฉ ุงู„ุจูŠุงู†ุงุช ุงู„ู„ูŠ ุงู„ู…ุณุชุฎุฏู… ุจูŠุฏุฎู„ู‡ุงุŒ ุฒูŠ ู…ุซู„ู‹ุง ู„ู…ุง ุชูŠุฌูŠ ุชุณุฌู„ ููŠ ู…ูˆู‚ุน ูˆุชุฏุฎู„ ุงู„ุฅูŠู…ูŠู„ ูˆุงู„ุจุงุณูˆุฑุฏุŒ ู„ุงุฒู… ุงู„ู…ูˆู‚ุน ูŠุชุฃูƒุฏ ุฅู† ุงู„ุจูŠุงู†ุงุช ุฏูŠ ุตุญ ูˆู…ุธุจูˆุทุฉ ู‚ุจู„ ู…ุง ูŠุญูุธู‡ุง ุฃูˆ ูŠุชุนุงู…ู„ ู…ุนุงู‡ุง.

ุงู„ุชุญู‚ู‚ ุฏู‡ ู…ู…ูƒู† ูŠุญุตู„ ููŠ ู…ูƒุงู†ูŠู†:

โ€”โ€”โ€”

๐Ÿ”น ุงู„ู€ Client-side Validation (ุงู„ุชุญู‚ู‚ ููŠ ุงู„ู…ุชุตูุญ):

- ูŠุนู†ูŠ ุงู„ุชุญู‚ู‚ ุจูŠุญุตู„ ู‚ุจู„ ู…ุง ุงู„ุจูŠุงู†ุงุช ุชุฑูˆุญ ู„ู„ุณูŠุฑูุฑ.
- ุงู„ูƒูˆุฏ ุงู„ู„ูŠ ุจูŠุนู…ู„ ุงู„ุชุญู‚ู‚ ุฏู‡ ุจูŠูƒูˆู† ุดุบุงู„ ุนู†ุฏ ุงู„ู…ุณุชุฎุฏู… ู†ูุณู‡ุŒ ุบุงู„ุจู‹ุง ุจุงุณุชุฎุฏุงู… JavaScript ุฃูˆ HTML5 Validation.

ู…ุซู„ู‹ุง ู„ูˆ ุฃู†ุช ุจุชุฏุฎู„ ุจูŠุงู†ุงุชูƒ ููŠ ููˆุฑู… ุชุณุฌูŠู„ุŒ ูˆุงู„ู…ุชุตูุญ ุทู„ุน ู„ูƒ ุฑุณุงู„ุฉ ุจุชู‚ูˆู„ูƒ "ุงู„ุฅูŠู…ูŠู„ ู…ุด ู…ูƒุชูˆุจ ุจุทุฑูŠู‚ุฉ ุตุญูŠุญุฉ" ุฃูˆ "ุงู„ุจุงุณูˆุฑุฏ ู‚ุตูŠุฑ"ุŒ ู‚ุจู„ ุญุชู‰ ู…ุง ุชุถุบุท ุนู„ู‰ Submit... ุฏู‡ ูƒุฏู‡ Client-side Validation.

ูˆู„ูƒู† ุงู„ู†ูˆุน ุฏู‡ ู…ุด ุขู…ู† ุจู†ุณุจุฉ ูกู ู ูชุŒ ูˆู…ูŠู†ูุนุด ู†ุนุชู…ุฏ ุนู„ูŠู‡ ู„ูˆุญุฏู‡.

โ€”โ€”โ€”

๐Ÿ”น ุงู„ู€ Server-side Validation (ุงู„ุชุญู‚ู‚ ุนู†ุฏ ุงู„ุณูŠุฑูุฑ):

- ู‡ู†ุง ุงู„ุชุญู‚ู‚ ุจูŠุญุตู„ ุจุนุฏ ู…ุง ุงู„ุจูŠุงู†ุงุช ุชุชุจุนุช ู„ู„ุณูŠุฑูุฑ.
- ุงู„ุณูŠุฑูุฑ ู‡ูˆ ุงู„ู„ูŠ ุจูŠุชุฃูƒุฏ ุจู†ูุณู‡ ู…ู† ูƒู„ ุญุงุฌุฉ: ุงู„ุฅูŠู…ูŠู„ ุตุญุŸ ุงู„ุจุงุณูˆุฑุฏ ู‚ูˆูŠุŸ ูˆู‡ูƒุฐุง.

ุจุบุถ ุงู„ู†ุธุฑ ุงู„ู…ุณุชุฎุฏู… ุนู…ู„ ุฅูŠู‡ ุนู„ู‰ ุฌู‡ุงุฒู‡ุŒ ุงู„ุณูŠุฑูุฑ ุจูŠุณุชู„ู… ุงู„ุฏุงุชุง ูˆูŠุชุฃูƒุฏ ู…ู†ู‡ุง ุจู†ูุณู‡.

ุงู„ู†ูˆุน ุฏู‡ ู…ู…ูƒู† ูŠุญู…ูŠูƒ ู…ู† ู‡ุฌู…ุงุช ุฒูŠ SQL Injection ูˆุบูŠุฑู‡ุงุŒ ูˆู„ูƒู† ุฏู‡ ุจูŠุฒูˆุฏ ุงู„ุญู…ู„ ุนู„ู‰ ุงู„ุณูŠุฑูุฑ.

โ€”โ€”โ€”

โœ… ุฅูŠู‡ ุงู„ุตุญุŸ

ุงู„ุตุญ ูˆุงู„ู…ูุชุจุน ููŠ ุฃูŠ ู…ุดุฑูˆุน ู…ุญุชุฑู… ุฅู†ูƒ ุชุณุชุฎุฏู… ุงู„ู†ูˆุนูŠู† ู…ุน ุจุนุถ:

- ุชุนู…ู„ Client-side Validation ุนุดุงู† ุชุญุณู† ุชุฌุฑุจุฉ ุงู„ู…ุณุชุฎุฏู… ูˆุชุธู‡ุฑ ู„ู‡ Feedback ุณุฑูŠุน.
- ูˆุชุนู…ู„ ูƒู…ุงู† Server-side Validation ุนุดุงู† ุชุฃู…ู† ู†ูุณูƒ ูˆุชุญุงูุธ ุนู„ู‰ ุงู„ุณูŠุฑูุฑ ูˆุงู„ุฏุงุชุง ุจุชุงุนุชูƒ.

โ€”โ€”โ€”

#ุฏู‚ูŠู‚ุฉ_ุจุฑู…ุฌุฉ
โค6
Server Actions in Next.js โšก๏ธ

You can skip API routes and write server-side logic right inside your components with Server Actions in Next.js!
โค4