DevGuide ๐Ÿ‡ต๐Ÿ‡ธ
10.9K subscribers
2.65K photos
18 videos
127 files
3.55K links
Join our channel for top-notch programming hacks, epic discussions, and brilliant career moves. ๐Ÿš€

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

๐Ÿ“ To advertise on the channel: https://telega.io/c/the_developer_guide
Download Telegram
ุฏุฑุฏุดุฉ ุณุฑูŠุนุฉ ุนู† ุงู„ู€ WebRTC โšก๏ธ
.
.
ู„ูˆ ุฑุฌุนู†ุง ูƒุฏู‡ ุจุงู„ุฐุงูƒุฑุฉ ุดูˆูŠุฉ ู„ุฃูˆู„ ู…ุฑุฉ ุฌุฑุจุช ุชุนู…ู„ ู…ูƒุงู„ู…ุฉ ููŠุฏูŠูˆ ุฃูˆู†ู„ุงูŠู†ุŒ ุฃูƒูŠุฏ ูƒู†ุช ู…ู†ุจู‡ุฑ ุฅู†ูƒ ุดุงูŠู ุงู„ุดุฎุต ู‚ุฏุงู…ูƒ ุจุงู„ุตูˆุช ูˆุงู„ุตูˆุฑุฉ ููŠ ู†ูุณ ุงู„ูˆู‚ุช. ูŠู…ูƒู† ู…ุง ุณุฃู„ุชุด ู†ูุณูƒ ูˆู‚ุชู‡ุง: ุฅูŠู‡ ุงู„ู„ูŠ ุจูŠุญุตู„ ุฎู„ู ุงู„ูƒูˆุงู„ูŠุณ ุนุดุงู† ุงู„ุชุฌุฑุจุฉ ุฏูŠ ุชุจุงู† ุณู‡ู„ุฉ ุจุงู„ุดูƒู„ ุฏู‡ุŸ

ุชุฎูŠู‘ู„ ุฅู†ูƒ ุจุชูƒู„ู‘ู… ุญุฏ ููŠ ุฏูˆู„ุฉ ุชุงู†ูŠุฉโ€ฆ ุฅุฒุงูŠ ุงู„ุตูˆุช ูŠุทู„ุน ู…ู† ุนู†ุฏูƒุŒ ูŠุนุฏูŠ ุนู„ู‰ ุดุจูƒุฉ ุงู„ุฅู†ุชุฑู†ุช ุจูƒู„ ุชุนู‚ูŠุฏุงุชู‡ุงุŒ ูŠูˆุตู„ ู„ู‡ ููŠ ุฃู‚ู„ ู…ู† ุซุงู†ูŠุฉุŒ ูˆู…ู† ุบูŠุฑ ู…ุง ูŠุจู‚ู‰ ููŠู‡ delay ูˆุงุถุญุŸ
ูˆุฅุฒุงูŠ ุงู„ููŠุฏูŠูˆ ุจูŠุชุจุนุช frame ูˆุฑุงุก ุงู„ุชุงู†ูŠ ูƒุฃู†ู‡ ุจุซ ู…ุจุงุดุฑุŒ ุฑุบู… ุฅู† ููŠ ุงู„ู†ุต ููŠู‡ firewalls ูˆ NATs ูˆุฑุงูˆุชุฑุงุชุŒ ูˆูƒุงุจู„ุงุช ุจุญุฑูŠุฉ ุจุทูˆู„ ุขู„ุงู ุงู„ูƒูŠู„ูˆู…ุชุฑุงุชุŸ

ูˆู‡ู†ุง ูŠุธู‡ุฑ ุฏูˆุฑ ุงู„ู€ WebRTC...

โ€”โ€”โ€”

๐Ÿ”— LinkedIn:
https://www.linkedin.com/posts/mentoor-io_mentoor-softwaredevelopment-softwaredeveloper-activity-7377714952352112640-Cs_-

๐Ÿ”— Facebook:
https://www.facebook.com/share/p/1DUxGMUET3

๐Ÿ”— Qabilah:
https://qabilah.com/posts/ุงุณุชูƒุดู-ุณุฑ-ุงู„ู€-webrtc-ูƒูŠู-ุชุชูˆุงุตู„-ููŠ-ุงู„ูˆู‚ุช-ุงู„ุญู‚ูŠู‚ูŠ-ุจุฏูˆู†-ุชุฃุฎูŠุฑ~m8y4l4HD_0I

โ€”โ€”โ€”

ูˆูู‚ูƒู… ุงู„ู„ู‡ ู„ูƒู„ ุฎูŠุฑ ๐ŸŒฟ
โค5
ููŠุฏูŠูˆ ู…ู‡ู… ุฌุฏู‹ุง ๐Ÿ’ฏ

Documentation Best Practices | ุดุฑูƒุงุช ูƒุชูŠุฑ ุจุชู‡ู…ู„ู‡ ุฑุบู… ุฃู‡ู…ูŠุชู‡


- ูŠุนู†ูŠ ุฅูŠู‡ Documentation ูˆู„ูŠู‡ ู…ู‡ู…ุฉ ุฌุฏู‹ุง.
- ุฃู†ูˆุงุน ุงู„ู€ Documentation ุงู„ู…ุฎุชู„ูุฉ: README, Code Comments, API Docs, Architecture Docs, RFCs, OPDOCs.
- ุฅุฒุงูŠ ุชูƒุชุจ Docs ูุนู‘ุงู„ุฉ ูˆุณู‡ู„ุฉ ุชุชูู‡ู….
- ุงู„ุฃุฎุทุงุก ุงู„ุดุงุฆุนุฉ ุงู„ู„ูŠ ุจุชุจูˆู‘ุธ ุฃูŠ Documentation.

โ€”โ€”โ€”

https://youtu.be/D92MZJboOxs
โค3
ู…ุฌู…ูˆุนุฉ ู…ู‚ุงู„ุงุช ู…ู…ุชุงุฒุฉ ุชุฎุต Node.js ๐Ÿ’ฏ
.
.
Part 1: Visualizing the Node.js Event Loop

https://www.builder.io/blog/visual-guide-to-nodejs-event-loop

Part 2: Visualizing nextTick and Promise Queues in Node.js

https://www.builder.io/blog/NodeJS-visualizing-nextTick-and-promise-queues

Part 3: Visualizing Timer Queue in Node.js

https://www.builder.io/blog/visualizing-nodejs-timer-queue

Part 4: Visualizing the I/O Queue in the Node.js Event Loop

https://www.builder.io/blog/visualizing-nodejs-io-queue

Part 5: Visualizing I/O Polling in the Node.js Event Loop

https://www.builder.io/blog/visualizing-nodejs-io-polling

Part 6: Visualizing the Check Queue in the Node.js Event Loop

https://www.builder.io/blog/visualizing-nodejs-check-queue

Part 7: Visualizing the Close Queue in the Node.js Event Loop

https://www.builder.io/blog/visualizing-nodejs-close-queue
โค4
๐Ÿ” ุงู„ูุฑู‚ ุจูŠู† Hashing ูˆ Encryption ูˆ Salting ูˆ Pepper
.
.
ุงู„ุฃุฑุจุน ู…ุตุทู„ุญุงุช ู‚ุฑูŠุจูŠู† ู…ู† ุจุนุถ ููŠ ุฅู† ูƒู„ู‡ู… ู„ูŠู‡ู… ุนู„ุงู‚ุฉ ุจุชุฃู…ูŠู† ุงู„ู€ data. ุจุณ ุงู„ุญู‚ูŠู‚ุฉ ุฅู† ูƒู„ ูˆุงุญุฏ ููŠู‡ู… ู„ูŠู‡ ู‡ุฏู ู…ุฎุชู„ู ุชู…ุงู…ู‹ุง ูˆุทุฑูŠู‚ุฉ ุงุณุชุฎุฏุงู… ู…ุฎุชู„ูุฉุŒ ูˆู„ูˆ ุฎู„ุทุช ุจูŠู†ู‡ู… ุฃูˆ ุงุณุชุนู…ู„ุช ุญุงุฌุฉ ู…ูƒุงู† ุงู„ุชุงู†ูŠุฉ ู‡ุชุนู…ู„ ู…ุดูƒู„ุฉ ูƒุจูŠุฑุฉ ููŠ ุงู„ุณูŠุณุชู… ุจุชุงุนูƒ.

ุชุฎูŠู„ ู…ุนุงูŠุง ุฅู†ูƒ ุจุชุนู…ู„ ู…ู†ุตุฉ ููŠู‡ุง ู…ุณุชุฎุฏู…ูŠู† ุจูŠุณุฌู„ูˆุง ุจุงู„ุฅูŠู…ูŠู„ ูˆุงู„ุจุงุณูˆุฑุฏ. ุทุจูŠุนูŠ ุฅู†ูƒ ู„ุงุฒู… ุชุฎุฒู† ุงู„ุจุงุณูˆุฑุฏ ุจุดูƒู„ ุขู…ู†ุŒ ุตุญุŸ ู‡ู†ุง ุจู‚ู‰ ุงู„ุณุคุงู„:

- ู‡ู„ ุฃุฎุฒู† ุงู„ุจุงุณูˆุฑุฏ ุฒูŠ ู…ุง ู‡ูˆ plain textุŸ
- ุทุจ ู‡ู„ ุฃุนู…ู„ู‡ EncryptionุŸ
- ูˆู„ุง Hashing ูƒูุงูŠุฉุŸ
- ุทุจ ุฅูŠู‡ ู„ุงุฒู…ุฉ ุงู„ู€ SaltุŸ ูˆุฅูŠู‡ ุงู„ูุฑู‚ ุจูŠู†ู‡ุง ูˆุจูŠู† ุงู„ู€ PepperุŸ

โ€”โ€”โ€”

๐ŸŸข ุงู„ู€ Hashing


ุงู„ู€ Hashing ู‡ูˆ ุฅู†ูƒ ุจุชุญูˆู„ ุงู„ู€ data (ุฒูŠ ุงู„ุจุงุณูˆุฑุฏ) ู„ุณู„ุณู„ุฉ ู…ู† ุงู„ุฃุฑู‚ุงู… ูˆุงู„ุญุฑูˆู ู…ู„ู‡ุงุด ู…ุนู†ู‰.
ุงู„ู…ูŠุฒุฉ ุงู„ุฃุณุงุณูŠุฉ: ุฏู‡ one-wayุŒ ูŠุนู†ูŠ ุชู‚ุฏุฑ ุชุญูˆู„ ุงู„ุจุงุณูˆุฑุฏ ู„ู€ hashุŒ ู„ูƒู† ู…ุณุชุญูŠู„ ุชุฑุฌุน ู…ู† ุงู„ู€ hash ู„ู„ุจุงุณูˆุฑุฏ.

๐Ÿ“Œ ุงู„ู‡ุฏู: ุชุณุชุฎุฏู…ู‡ ุนุดุงู† ุชุชุญู‚ู‚ ู…ู† ุงู„ุจูŠุงู†ุงุชุŒ ู…ุด ุนุดุงู† ุชุณุชุฑุฌุนู‡ุง.
ู…ุซุงู„: ุงู„ู…ุณุชุฎุฏู… ูŠุฏุฎู„ ุงู„ุจุงุณูˆุฑุฏุŒ ูˆุฃู†ุช ุชุนู…ู„ู‡ hash ุจู†ูุณ ุงู„ู€ algorithm ูˆุชู‚ุงุฑู† ู…ุน ุงู„ู„ูŠ ู…ุฎุฒู†ู‡.

โŒ ุงู„ู…ุดูƒู„ุฉ: ู„ูˆ ุงุชู†ูŠู† ู…ุณุชุฎุฏู…ูŠู† ุนู†ุฏู‡ู… ู†ูุณ ุงู„ุจุงุณูˆุฑุฏุŒ ุงู„ู€ hash ุจุชุงุนู‡ู… ู‡ูŠุจู‚ู‰ ู†ูุณ ุงู„ู†ุชูŠุฌุฉ. ูˆุฏู‡ ุจูŠุฎู„ูŠ ุงู„ู…ูˆุถูˆุน ุนุฑุถุฉ ู„ู‡ุฌู…ุงุช ุฒูŠ ุงู„ู€ Rainbow Tables.

โ€”โ€”โ€”

๐Ÿ”ต ุงู„ู€ Encryption


ุงู„ู€ Encryption ู…ุฎุชู„ู ุชู…ุงู…ู‹ุง. ู‡ู†ุง ุจุชุนู…ู„ ุนู…ู„ูŠุฉ reversible (ูŠุนู†ูŠ ูŠู†ูุน ุชุฑุฌุน ู„ู„ุจูŠุงู†ุงุช ุงู„ุฃุตู„ูŠุฉ).
ุชุฎุฒู† ุงู„ู€ data ู…ุดูุฑุฉุŒ ูˆุชู‚ุฏุฑ ุชููƒู‡ุง ุจุงู„ู€ key.

๐Ÿ“Œ ุงู„ู‡ุฏู: ุญู…ุงูŠุฉ ุงู„ุจูŠุงู†ุงุช ุงู„ู„ูŠ ู„ุงุฒู… ุชุณุชุฑุฌุนู‡ุง ุฒูŠ ุงู„ุฑุณุงุฆู„ุŒ ุงู„ู…ู„ูุงุชุŒ ุจูŠุงู†ุงุช ุงู„ูƒุฑูŠุฏุช ูƒุงุฑุฏโ€ฆ ุฅู„ุฎ.
ู…ุซุงู„: ุชุดููŠุฑ ุฑุณุงู„ุฉ ููŠ ูˆุงุชุณุงุจุŒ ุงู„ู…ุณุชู‚ุจู„ ูŠู‚ุฏุฑ ูŠููƒู‡ุง ุจุงู„ู€ key ูˆุงู„ุฑุณุงู„ุฉ ุงู„ุฃุตู„ูŠุฉ ุชุฑุฌุน.

โŒ ุงู„ู…ุดูƒู„ุฉ: ู„ูˆ ุงู„ู€ key ุงุชุณุฑุจุŒ ูƒู„ ุญุงุฌุฉ ู…ูƒุดูˆูุฉ.

โ€”โ€”โ€”

๐ŸŸก ุงู„ู€ Salting


ุงู„ู€ Salt ู‡ูˆ string ุนุดูˆุงุฆูŠ ุจุชุถูŠูู‡ ู„ู„ุจุงุณูˆุฑุฏ ู‚ุจู„ ู…ุง ุชุนู…ู„ู‡ hash.
ู„ูŠู‡ุŸ ุนุดุงู† ุชู…ู†ุน ุงู„ู‡ุฌู…ุงุช ุงู„ู„ูŠ ุจุชุนุชู…ุฏ ุนู„ู‰ ุฅู† ู†ูุณ ุงู„ุจุงุณูˆุฑุฏ ุนู†ุฏู‡ ู†ูุณ ุงู„ู€ hash.

๐Ÿ“Œ ุงู„ู‡ุฏู: ุชุนู…ู„ ูƒู„ hash ู…ุฎุชู„ู ุญุชู‰ ู„ูˆ ูƒู„ู…ุงุช ุงู„ุณุฑ ู…ุชุดุงุจู‡ุฉ.

ู…ุซุงู„:
- ู…ุณุชุฎุฏู…1 = "123456" + SaltA โ†’ hash1
- ู…ุณุชุฎุฏู…2 = "123456" + SaltB โ†’ hash2

ุฑุบู… ุฅู† ุงู„ุจุงุณูˆุฑุฏ ู‡ูˆ ู†ูุณู‡ุŒ ู„ูƒู† ุงู„ู€ hash ู…ุฎุชู„ู.

โ€”โ€”โ€”

๐Ÿ”ด ุงู„ู€ Pepper


ุงู„ู€ Pepper ุดุจู‡ ุงู„ู€ Salt ู„ูƒู† ููŠ ู†ู‚ุทุฉ ู…ุฎุชู„ูุฉ: ุจูŠูƒูˆู† secret value ุจุชุถูŠูู‡ ู„ู„ุจุงุณูˆุฑุฏ ู‚ุจู„ ุงู„ู€ hashing.
ุจุนูƒุณ ุงู„ู€ Salt ุงู„ู„ูŠ ู…ู…ูƒู† ูŠุชุฎุฒู† ู…ุน ุงู„ู€ hashุŒ ุงู„ู€ Pepper ู…ุด ุจูŠุชุฎุฒู† ููŠ ุงู„ุฏุงุชุงุจูŠุฒุŒ ุจูŠุชุฎุฒู† ููŠ config ุขู…ู† ุฃูˆ environment variable.

๐Ÿ“Œ ุงู„ู‡ุฏู: ุชุถูŠู ุทุจู‚ุฉ ุญู…ุงูŠุฉ ุฅุถุงููŠุฉ ุถุฏ ุฃูŠ ุญุฏ ูŠุณุฑู‚ ุงู„ุฏุงุชุงุจูŠุฒ. ุญุชู‰ ู„ูˆ ู…ุนุงู‡ ุงู„ู€ hashes + saltsุŒ ู„ุณู‡ ู†ุงู‚ุตู‡ ุงู„ู€ pepper.

โ€”โ€”โ€”

ูƒู„ู…ุงุช ุงู„ุณุฑ ู„ุงุฒู… ุชุชุญูุธ ุจุงู„ู€ Hashing + Salt + PepperุŒ ู…ุด ุจุงู„ู€ Encryption.

ุงู„ู€ Encryption ู…ูƒุงู†ู‡ ููŠ ุงู„ุจูŠุงู†ุงุช ุงู„ู„ูŠ ู„ุงุฒู… ุชุณุชุฑุฌุนู‡ุง ุฒูŠ ุงู„ุฑุณุงุฆู„ ุฃูˆ ุงู„ู…ู„ูุงุช.

โ€”โ€”โ€”

ูˆูู‚ูƒู… ุงู„ู„ู‡ ู„ูƒู„ ุฎูŠุฑ ๐ŸŒฟ
โค12๐Ÿ”ฅ5
๐Ÿ”ฐ JavaScript DOM Selection and Manipulation
โค5
ุฏุฑุฏุดุฉ ุณุฑูŠุนุฉ ุนู† ุงู„ู€ OAuth 2.0 ๐Ÿ’ก
.
.
ุชุฎูŠู„ ุฅู†ูƒ ุฏุงุฎู„ ุชุณุฌู‘ู„ ููŠ ุชุทุจูŠู‚ ุฌุฏูŠุฏ ุนู„ุดุงู† ุชุชุงุจุน ูƒูˆุฑุณุงุชุŒ ูˆู„ู…ุง ุฌูŠุช ุชุณุฌู‘ู„ุŒ ุงู„ุชุทุจูŠู‚ ู‚ุงู„ูƒ:
"ุชู‚ุฏุฑ ุชุณุฌู‘ู„ ุจุญุณุงุจ Google ุฃูˆ GitHub ุจุฏู„ ู…ุง ุชุนู…ู„ ุฃูƒูˆู†ุช ุฌุฏูŠุฏ"

ุถุบุทุช ุนู„ู‰ ุฒุฑุงุฑ "Continue with Google"ุŒ ูˆGoogle ุทู„ุจุช ู…ู†ูƒ ุชุฎุชุงุฑ ุงู„ุฅูŠู…ูŠู„ ูˆุชูˆุงูู‚ ุนู„ู‰ ุดูˆูŠุฉ ุตู„ุงุญูŠุงุช.
ุจุนุฏู‡ุง ุงู„ุชุทุจูŠู‚ ูุชุญ ูˆุงุดุชุบู„ ูˆูƒุฃู†ูƒ ุนู…ู„ุช sign up ูุนู„ู‹ุง...

ุฅูŠู‡ ุงู„ู„ูŠ ุญุตู„ ู‡ู†ุงุŸ ๐Ÿค”
ุงู„ู„ูŠ ุญุตู„ ุจุงู„ุถุจุท ู‡ูˆ ุฅู† Google ุงุณุชุฎุฏู…ุช ุญุงุฌุฉ ุงุณู…ู‡ุง OAuth 2.0.

โ€”โ€”โ€”

๐Ÿ“Œ ูŠุนู†ูŠ ุฅูŠู‡ OAuth 2.0ุŸ


ุจุจุณุงุทุฉุŒ ุงู„ู€ OAuth 2.0 ู‡ูˆ ุจุฑูˆุชูˆูƒูˆู„ authorization (ู…ุด authentication)ุŒ ุจูŠุฎู„ู‘ูŠ ุงู„ุชุทุจูŠู‚ุงุช ุชู‚ุฏุฑ ุชุงุฎุฏ ุฅุฐู† ู…ู† ุงู„ู…ุณุชุฎุฏู… ุนุดุงู† ุชุฏุฎู„ ุนู„ู‰ ุฌุฒุก ู…ู† ู…ุนู„ูˆู…ุงุชู‡ ููŠ service ุชุงู†ูŠุฉ (ุฒูŠ Google, Facebook, GitHub) ู…ู† ุบูŠุฑ ู…ุง ูŠุนุฑููˆุง ุงู„ุจุงุณูˆุฑุฏ ุจุชุงุนุชูƒ.

ูŠุนู†ูŠ ุงู„ุชุทุจูŠู‚ ุงู„ู„ูŠ ุจุชุณุชุฎุฏู…ู‡ ู…ุด ุจูŠุดูˆู ุงู„ุจุงุณูˆุฑุฏ ุจุชุงุนุชูƒุŒ ุจุณ ุจูŠุงุฎุฏ ุชูˆูƒู† ู…ุคู‚ุช ูŠู‚ุฏุฑ ูŠุณุชุฎุฏู…ู‡ ูŠุฏุฎู„ ุนู„ู‰ ุงู„ู€ APIs ุงู„ู„ูŠ ุฃู†ุช ูˆุงูู‚ุช ุนู„ูŠู‡ุง.

ูˆุฏู‡ ุจูŠุฎู„ูŠ ุงู„ุนู…ู„ูŠุฉ ุขู…ู†ุฉุŒ ูˆุจูŠุญุงูุธ ุนู„ู‰ ุงู„ุฎุตูˆุตูŠุฉ ุจุชุงุนุชูƒ.

โ€”โ€”โ€”

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


ุชุนุงู„ ู†ู…ุดูŠ ุฎุทูˆุฉ ุจุฎุทูˆุฉ ููŠ ุงู„ู€ flow ุงู„ู…ุดู‡ูˆุฑ ุจุชุงุน Authorization Code Grant FlowุŒ ูˆุงู„ู„ูŠ ุจูŠุณุชุฎุฏู… ููŠ web apps

1- ุงู„ู€ User Requests Login
ุงู„ุชุทุจูŠู‚ (Client) ูŠู‚ูˆู„ูƒ: "ุณุฌู‘ู„ ุจุญุณุงุจ Google ู…ุซู„ู‹ุง"ุŒ ูˆุงู„ู…ุณุชุฎุฏู… ูŠุถุบุท ุนู„ู‰ ุงู„ุฒุฑุงุฑุŒ ูˆูŠุชู… ุชูˆุฌูŠู‡ู‡ ุนู„ู‰ authorization server (ุฒูŠ Google).


2- ุงู„ู€ User Grants Permission
ุฌูˆุฌู„ ูŠุทู„ุจ ู…ู†ูƒ ุชุณุฌู‘ู„ ุฏุฎูˆู„ ูˆุชูˆุงูู‚ ุนู„ู‰ ุงู„ู€ permissions ุงู„ู„ูŠ ุงู„ุชุทุจูŠู‚ ุทุงู„ุจู‡ุง (ุฒูŠ ุงู„ุฅูŠู…ูŠู„ุŒ ุงู„ุงุณู…ุŒ ุฅู„ุฎ).


3- ุงู„ู€ Authorization Code
ู„ูˆ ูˆุงูู‚ุชุŒ Google ู‡ูŠุจุนุช authorization code ู„ู„ุชุทุจูŠู‚ (ุฃูˆ ุชุญุฏูŠุฏู‹ุง ู„ู„ู€ redirect URL ุงู„ู„ูŠ ุงู„ุชุทุจูŠู‚ ุญุฏุฏู‡ ู‚ุจู„ ูƒุฏู‡).


4- ุงู„ู€ Token Exchange
ุงู„ุชุทุจูŠู‚ ูŠุงุฎุฏ ุงู„ู€ authorization code ุฏู‡ ูˆูŠุจุนุช request ู„ู€ token endpoint ุนู„ุดุงู† ูŠุจุฏู„ู‡ ุจู€ access token (ูˆุณุงุนุงุช ูƒู…ุงู† refresh token).


5- ุงู„ู€ Access Protected APIs
ุจู…ุฌุฑุฏ ู…ุง ุงู„ุชุทุจูŠู‚ ูŠุงุฎุฏ ุงู„ู€ access tokenุŒ ูŠู‚ุฏุฑ ูŠุณุชุฎุฏู…ู‡ ูŠุทู„ุจ ุจูŠุงู†ุงุช ู…ู† Google APIsุŒ ุจุณ ููŠ ุญุฏูˆุฏ ุงู„ู€ scope ุงู„ู„ูŠ ูˆุงูู‚ุช ุนู„ูŠู‡.

โ€”โ€”โ€”

ุฅุฒุงูŠ ุจูŠุฃู…ู† ุงู„ู€ APIsุŸ ๐Ÿ”


ู„ูˆ ุนู†ุฏูƒ API ูˆุนุงูŠุฒ ุชุฃู…ู†ู‡ุงุŒ ู…ู…ูƒู† ุชุณุชุฎุฏู… OAuth 2.0 ุจุญูŠุซ:

- ุฃูŠ Client ู…ุด ู‡ูŠู‚ุฏุฑ ูŠูˆุตู„ ู„ู€ API ุบูŠุฑ ู„ู…ุง ูŠู‚ุฏู‘ู… Access Token ุตุงู„ุญ.
- ุงู„ู€ Backend ุจุชุงุนูƒ ูŠู‚ุฏุฑ ูŠุชุญู‚ู‘ู‚ ู…ู† ุงู„ุชูˆูƒู† (ู…ุซู„ู‹ุง JWT ุฃูˆ ุนู† ุทุฑูŠู‚ introspection endpoint).
- ุชู‚ุฏุฑ ุชุชุญูƒู‘ู… ููŠ ุงู„ุตู„ุงุญูŠุงุช ุนู† ุทุฑูŠู‚ ุงู„ู€ scope (ูŠุนู†ูŠ ู…ุซู„ู‹ุง ุชูˆูƒู† ู…ุนูŠู† ูŠู‚ุฏุฑ ูŠู‚ุฑุฃ ุจุณุŒ ูˆุชูˆูƒู† ุชุงู†ูŠ ูŠู‚ุฏุฑ ูŠูƒุชุจ ูˆูŠุนุฏู‘ู„).
- ุชู‚ุฏุฑ ุชุณุญุจ ุตู„ุงุญูŠุงุช ุงู„ุชูˆูƒู† ููŠ ุฃูŠ ูˆู‚ุช (Revoke).


ุจุงู„ุชุงู„ูŠุŒ OAuth 2.0 ุจูŠุฃู…ู‘ู† ุงู„ู€ APIs ุนู† ุทุฑูŠู‚ ุฅู†ู‡:

โœ… ุจูŠู‚ู„ู„ ุงู„ุงุนุชู…ุงุฏ ุนู„ู‰ ูƒู„ู…ุงุช ุงู„ู…ุฑูˆุฑ
โœ… ุจูŠุณู…ุญ ุจุงู„ู€ delegation (ุชุทุจูŠู‚ ูŠุงุฎุฏ ุฅุฐู† ู…ู† ู…ุณุชุฎุฏู… ูŠูˆุตู„ ู„ุญุงุฌุฉ ู…ุด ุจุชุงุนุชู‡)
โœ… ุจูŠุฎู„ูŠ ุงู„ู€ tokens ู…ุคู‚ุชุฉุŒ ูˆู…ู…ูƒู† ุชุชุญูƒู… ููŠ ุตู„ุงุญูŠุงุชู‡ุง ูˆู…ุฏู‘ุชู‡ุง

โ€”โ€”โ€”

๐Ÿ“Œ ุฃู†ูˆุงุน ุงู„ู€Grant Types ุงู„ู…ุดู‡ูˆุฑุฉ:


- ุงู„ู€ Authorization Code (with PKCE): ู„ู„ู…ูˆุจุงูŠู„ ูˆุงู„ูˆูŠุจ.
- ุงู„ู€ Client Credentials: ู„ู„ู€ machine-to-machine apps.
- ุงู„ู€ Password (deprecated): ูƒุงู† ุจูŠุณุชุฎุฏู… ู„ู…ุง ุงู„ู…ุณุชุฎุฏู… ูŠูƒุชุจ ุงู„ู€ username ูˆุงู„ุจุงุณูˆุฑุฏ ููŠ ู†ูุณ ุงู„ุชุทุจูŠู‚ (ุบูŠุฑ ุขู…ู†).
- ุงู„ู€ Implicit (deprecated): ุฒู…ุงู† ูƒุงู† ุจูŠุชุณุชุฎุฏู… ู„ู„ู€ SPA apps ู„ูƒู†ู‡ ุบูŠุฑ ู…ูˆุตู‰ ุจู‡.

โ€”โ€”โ€”

ู„ูˆ ูƒู†ุช ุจุชุณุชุฎุฏู… OAuth 2.0 ููŠ ู…ูˆุจุงูŠู„ ุฃูˆ SPA appุŒ ู„ุงุฒู… ุชุณุชุฎุฏู… ุญุงุฌุฉ ุงุณู…ู‡ุง PKCE (Proof Key for Code Exchange) ุนู„ุดุงู† ุชู…ู†ุน ุงู„ู€ authorization code ู…ู† ุฅู†ู‡ ูŠุชุณุฑู‚.

โ€”โ€”โ€”

ูˆูู‚ูƒู… ุงู„ู„ู‡ ู„ูƒู„ ุฎูŠุฑ ๐ŸŒฟ
โค11
Debugging Tips in Next.js ๐Ÿ’ฏ
โค4
Master Async Iterators โœ…

Make your JavaScript apps faster and smarter with async iterators.

Stream data efficiently, handle errors gracefully, and keep performance top-notch
โค5
ุฏุฑุฏุดุฉ ุณุฑูŠุนุฉ ุนู† ุงู„ู€ RFC ๐Ÿ’ก
.
.
ููŠ ุฃูˆู‚ุงุช ูƒุชูŠุฑ ุจูŠูƒูˆู† ุนู†ุฏูƒ ููƒุฑุฉ ุญู„ูˆุฉ โ€” ู…ู…ูƒู† ุชูƒูˆู† ุชุญุณูŠู† ููŠ ุงู„ุฃุฏุงุกุŒ refactorุŒ ุฃูˆ feature ุฌุฏูŠุฏุฉ โ€”
ุจุณ ุฃูˆู„ ู…ุง ุชุญุงูˆู„ ุชุดุฑุญู‡ุง ู„ู„ุชูŠู…ุŒ ุงู„ุญูˆุงุฑ ุจูŠุจู‚ู‰ ุนุดูˆุงุฆูŠุŒ ูˆุงู„ู†ุงุณ ุจุชูู‡ู… ู†ุต ุงู„ููƒุฑุฉ ุฃูˆ ุชุฑูุถู‡ุง ู‚ุจู„ ู…ุง ุชุณุชูˆุนุจู‡ุง ุฃุตู„ู‹ุง...

ุนู„ุดุงู† ูƒุฏู‡ ุงู„ุชูŠู…ุงุช ููŠ ุงู„ุดุฑูƒุงุช ุงู„ูƒุจูŠุฑุฉ ูˆุงู„ู…ุชูˆุณุทุฉ ุจุชุณุชุฎุฏู… ุญุงุฌุฉ ุงุณู…ู‡ุง RFC โ€“ Request For CommentsุŒ
ูˆุฏูŠ ุจุจุณุงุทุฉ ุทุฑูŠู‚ุฉ ู…ู†ุธู…ุฉ ุจุชุฎู„ูŠูƒ ุชุดุฑุญ ููƒุฑุชูƒ ุจุงู„ุชูุตูŠู„ุŒ ูˆุชุฎู„ูŠ ุงู„ูƒู„ ูŠุดุงุฑูƒ ุฑุฃูŠู‡ ู‚ุจู„ ุงู„ุชู†ููŠุฐ.

โ€”โ€”โ€”

๐Ÿ“Œ ูŠุนู†ูŠ ุฅูŠู‡ RFCุŸ

ุงู„ู€ RFC ุนุจุงุฑุฉ ุนู† ู…ุณุชู†ุฏ ู…ูƒุชูˆุจ ุจูŠุดุฑุญ ููŠู‡ ุตุงุญุจ ุงู„ููƒุฑุฉ ูƒู„ ุญุงุฌุฉ ุนู† ุงู„ู€ feature ุฃูˆ ุงู„ุชุบูŠูŠุฑ ุงู„ู„ูŠ ุนุงูŠุฒ ูŠุนู…ู„ู‡:
ู…ู† ุงู„ู€ contextุŒ ูˆุงู„ู€ problem ุงู„ู„ูŠ ุจูŠุญุงูˆู„ ูŠุญู„ู‡ุงุŒ ู„ุญุฏ ุงู„ู€ proposed solutionุŒ ูˆุงู„ู€ alternativesุŒ ูˆุงู„ู€ trade-offs.

ุงู„ู‡ุฏู ุฅู†ูƒ ุชุดุงุฑูƒ ุงู„ุชููƒูŠุฑ ุจุชุงุนูƒ ู…ุน ุงู„ุชูŠู… ุนู„ุดุงู† ุงู„ูƒู„ ูŠู‚ุฏุฑ ูŠู†ุงู‚ุด ุงู„ููƒุฑุฉ ู…ู† ูˆุฌู‡ุงุช ู†ุธุฑ ู…ุฎุชู„ูุฉ โ€” ู‡ู†ุฏุณูŠุฉุŒ productุŒ ุฃูˆ ุญุชู‰ business.

โ€”โ€”โ€”

๐ŸŽฏ ู„ูŠู‡ ู…ู‡ู… ู†ูƒุชุจ RFCุŸ

ููŠู‡ 3 ุฃุณุจุงุจ ุฑุฆูŠุณูŠุฉ ุจุชุฎู„ูŠ ุงู„ู€ RFCs ู…ู‡ู…ุฉ ุฌุฏู‹ุง ููŠ ุฃูŠ ุชูŠู…:

1- ุจุชู…ู†ุน ุงู„ู‚ุฑุงุฑุงุช ุงู„ูุฑุฏูŠุฉ ุงู„ุนุดูˆุงุฆูŠุฉ:
ุจุฏู„ ู…ุง ุฃูŠ ุญุฏ ูŠุบูŠู‘ุฑ ููŠ ุงู„ู€ codebase ุฃูˆ ุงู„ู€ system architecture ุจู…ุฒุงุฌู‡ุŒ ุงู„ู€ RFC ุจุชุฎู„ูŠ ุงู„ู‚ุฑุงุฑ ุฌู…ุงุนูŠ ูˆู…ุฏุฑูˆุณ.

2- ุจุชูˆุซู‘ู‚ ุงู„ู‚ุฑุงุฑุงุช ุงู„ุชู‚ู†ูŠุฉ:
ุจุนุฏ 6 ุดู‡ูˆุฑ ู„ู…ุง ุญุฏ ูŠุณุฃู„ โ€œู„ูŠู‡ ุงุฎุชุฑู†ุง ู†ุณุชุฎุฏู… Redis ู‡ู†ุงุŸโ€ุŒ ุชู‚ุฏุฑ ุชุฑุฌุน ู„ู€ RFC ูˆุชุดูˆู reasoning ูˆุงุถุญ ุจุฏู„ ู…ุง ุชุนุชู…ุฏ ุนู„ู‰ ุงู„ุฐุงูƒุฑุฉ.

3- ุจุชุญุณู‘ู† ุงู„ุชุนุงูˆู† ุจูŠู† ุงู„ูุฑู‚:
ุงู„ู€ frontendุŒ backendุŒ DevOps... ุงู„ูƒู„ ุจูŠุจู‚ู‰ ุนุงุฑู ุงู„ุงุชุฌุงู‡ ุงู„ุนุงู… ู„ู„ู€ system ูˆุจูŠุดุงุฑูƒ ููŠ ุงู„ู‚ุฑุงุฑ.

โ€”โ€”โ€”

ุฅุฒุงูŠ ุชูƒุชุจ RFC ู…ุญุชุฑู…ุŸ ๐Ÿค”

ุงู„ู€ structure ู…ุด ุซุงุจุชุŒ ุจุณ ููŠู‡ ููˆุฑู…ุงุช ู…ุชุนุงุฑู ุนู„ูŠู‡ ูˆุจูŠุฎู„ูŠ ุงู„ู€ RFC ูˆุงุถุญ ูˆู…ู†ุทู‚ูŠ.

๐Ÿ“ ุงู„ู€ Title + Summary
ุงุจุฏุฃ ุจุนู†ูˆุงู† ุจุณูŠุท ูˆูˆุงุถุญ ูŠุดุฑุญ ู‡ุฏู ุงู„ู€ RFC.

ู…ุซู„ู‹ุง:
RFC: Introduce caching layer for product API


ูˆุจุนุฏู‡ุง ุงุนู…ู„ Summary ุตุบูŠุฑ ุจูŠุดุฑุญ ููŠ ุฌู…ู„ุฉ ุฃูˆ ุงุชู†ูŠู† ุงู„ููƒุฑุฉ ุงู„ุนุงู…ุฉ:
We propose adding a Redis-based caching layer to reduce response time for frequently accessed endpoints.



๐Ÿ“ ุงู„ู€ Context / Background
ุงุญูƒูŠ ุจุงุฎุชุตุงุฑ ุงู„ู€ situation ุงู„ุญุงู„ูŠ ูˆู„ูŠู‡ ู…ุญุชุงุฌูŠู† ุงู„ุชุบูŠูŠุฑ.

ู…ุซู„ู‹ุง:
Currently, our product endpoints are hitting the database directly, leading to high latency during peak hours.

ุงู„ููƒุฑุฉ ุฅู†ูƒ ุชุฏูŠ ุงู„ู‚ุงุฑุฆ ุตูˆุฑุฉ ูƒุงู…ู„ุฉ ุนู† ุงู„ู…ุดูƒู„ุฉ ู‚ุจู„ ู…ุง ูŠุฏุฎู„ ููŠ ุงู„ุญู„.


๐Ÿ“ ุงู„ู€ Problem Statement
ูˆุถุญ ุงู„ู…ุดูƒู„ุฉ ุงู„ุฃุณุงุณูŠุฉ ุงู„ู„ูŠ ุจุชุญุงูˆู„ ุชุญู„ู‡ุง ุจุงู„ุฃุฑู‚ุงู… ู„ูˆ ุฃู…ูƒู†.

ู…ุซู„ู‹ุง:
Average response time increased from 300ms to 900ms under load.

ุฏูŠ ุจุชุฎู„ูŠ ุงู„ู€ RFC ู…ู†ุทู‚ูŠ ูˆู…ุจู†ูŠ ุนู„ู‰ data.


๐Ÿ“ ุงู„ู€ Proposed Solution
ุงุดุฑุญ ุงู„ู€ approach ุงู„ู„ูŠ ู†ุงูˆูŠ ุชุณุชุฎุฏู…ู‡ุŒ ู„ูŠู‡ ุงุฎุชุฑุชู‡ุŒ ูˆุฅุฒุงูŠ ู‡ูŠุดุชุบู„.

ู…ุซู„ู‹ุง:
We'll use Redis to cache product data for 5 minutes. The cache will be invalidated on product update events.

ู…ู…ูƒู† ูƒู…ุงู† ุชุถูŠู diagram ุจุณูŠุท ุฃูˆ pseudo code ู„ูˆ ู…ุญุชุงุฌ ุชูˆุถุญ flow ู…ุนูŠู†.


๐Ÿ“ ุงู„ู€ Alternatives Considered
ุจูŠูˆุถุญ ุฅู†ูƒ ู…ุด ุงุฎุชุฑุช ุงู„ุญู„ ุนุดูˆุงุฆูŠ.

ู…ุซู„ู‹ุง:
Considered using in-memory cache, but it doesnโ€™t scale horizontally. Redis fits better for distributed systems.



๐Ÿ“ ุงู„ู€ Trade-offs
ู‚ูˆู„ ุจุตุฑุงุญุฉ ุฅูŠู‡ ุงู„ุนูŠูˆุจ ุงู„ู„ูŠ ู…ู…ูƒู† ุชุญุตู„.

Cache invalidation adds complexity and increases operational overhead.



๐Ÿ“ ุงู„ู€ Impact / Risks
ู‚ูˆู„ ุฅูŠู‡ ุงู„ู„ูŠ ู…ู…ูƒู† ูŠุชุฃุซุฑ ููŠ ุงู„ู€ system.
Adding caching could lead to stale data if invalidation fails.



๐Ÿ“ ุงู„ู€ Open Questions
ู…ู…ูƒู† ุชุณูŠุจ ููŠ ุงู„ุขุฎุฑ ุดูˆูŠุฉ ุฃุณุฆู„ุฉ ู…ูุชูˆุญุฉ ุนู„ุดุงู† ุงู„ุชูŠู… ูŠู†ุงู‚ุดู‡ุง:
Should we cache all products or only top 100 requested ones?



๐Ÿ“ ุงู„ู€ Next Steps
ุงุฎุชุตุฑ ุฅูŠู‡ ุงู„ู„ูŠ ู‡ูŠุญุตู„ ุจุนุฏ ุงู„ู…ูˆุงูู‚ุฉ.
If approved, implementation will start in sprint 25, and metrics will be collected after deployment.


โ€”โ€”โ€”

๐Ÿ’ก ู†ุตุงุฆุญ ู…ู‡ู…ุฉ ูˆุฃู†ุช ุจุชูƒุชุจ RFC:

- ุฎู„ูŠูƒ ูˆุงุถุญ ูˆุจุณูŠุทุŒ ุจู„ุงุด ู…ุตุทู„ุญุงุช ุชู‚ูŠู„ุฉ ู…ู† ุบูŠุฑ ุฏุงุนูŠ.
- ุงุณุชุฎุฏู… bullet points ุนู„ุดุงู† ุงู„ู†ุงุณ ุชู‚ุฑุฃ ุจุณู‡ูˆู„ุฉ.
- ู„ูˆ ููŠู‡ diagrams ุฃูˆ code snippetsุŒ ุถูŠูู‡ู… ุนู„ุดุงู† ุชุณู‡ู„ ุงู„ูู‡ู….
- ุฎู„ูŠูƒ ู…ุฑู† ููŠ ุงู„ู†ู‚ุงุด... ุงู„ู‡ุฏู ู…ุด ุฅู† ููƒุฑุชูƒ ุชุชู†ูุฐุŒ ุงู„ู‡ุฏู ุฅู† ู†ุฎุชุงุฑ ุฃูุถู„ ุญู„.

โ€”โ€”โ€”

ู…ุด ู…ู‡ู… ุชูƒุชุจ RFC ู…ุซุงู„ูŠุฉ ู…ู† ุฃูˆู„ ู…ุฑุฉุŒ ุงู„ู…ู‡ู… ุฅู†ูƒ ุชุจุฏุฃุŒ ูˆู…ุน ุงู„ูˆู‚ุช ู‡ุชุชุนู„ู… ุฅุฒุงูŠ ุชูˆุตู„ ููƒุฑุชูƒ ุจุฃูˆุถุญ ูˆุฃู‚ูˆู‰ ุทุฑูŠู‚ุฉ ู…ู…ูƒู†ุฉ ๐Ÿ”ฅ

โ€”โ€”โ€”

ูˆูู‚ูƒู… ุงู„ู„ู‡ ู„ูƒู„ ุฎูŠุฑ ๐ŸŒฟ
โค7