Thuta Learning
How the Web Works
ExercisesWeb Developmentbeginner

လေ့ကျင့်ခန်း — အထင်လွဲစရာများနှင့် Web Architecture Decision Guide

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • လေ့ကျင့်ခန်း — အထင်လွဲစရာများနှင့် Web Architecture Decision Guide concept ကို နားလည်ရှင်းပြနိုင်ရန်
  • Diagram ကို ဖတ်ပြီး request/data/event ဘယ်လိုစီးဆင်းသလဲ ခြေရာခံနိုင်ရန်
  • ဒီ piece က web architecture တစ်ခုလုံးထဲမှာ ဘယ်လို ဆက်စပ်နေသလဲ ရှင်းပြနိုင်ရန်

နားလည်ထားရမယ့် အချက်

ဒီ နောက်ဆုံး lesson က အလုပ် နှစ်ခု လုပ်ပေးပါတယ် — web နဲ့ ပတ်သက်တဲ့ အထင်လွဲစရာများကို ပြင်ပေးပြီး Web Architecture Decision Guide တစ်ခု ပေးအပ်ပါတယ် — လိုအပ်ချက်အများစုကို starting point သင့်တော်တဲ့ဆီ ချိတ်ပေးထားတဲ့ table တစ်ခုပါ၊ အခုချက်ချင်း အလွတ်ကျက်ဖို့ မဟုတ်ဘဲ နောက်ပိုင်း ပြန်ကြည့်ဖို့ ရည်ရွယ်ထားပါတယ်။

  • ဆက်စပ်နေတဲ့ အရာနှစ်ခုကို တူတူပဲလို့ ယူဆတာ (Internet/Web, session/cookie, authentication/authorization)
  • စနစ်တစ်ခုလုံးရဲ့ အစိတ်အပိုင်းတစ်ခုကို အားလုံးလို့ ထင်တာ (website ဆိုတာ 'HTML ချည်း', backend ဆိုတာ 'database ချည်း')
  • Tradeoff တစ်ခုကို false absolute တစ်ခုအဖြစ် ပြောင်းလဲလိုက်တာ ('X ဟာ Y ထက် အမြဲပိုကောင်းတယ်')

ဒီနေရာမှာလည်း အနိုင်ရမယ့် technology တစ်ခုတည်း မရှိပါဘူး

အောက်က ပြင်ဆင်ချက်တွေထဲက ဘယ်တစ်ခုမှ technology တစ်ခုက အခြားတစ်ခုထက် အမြဲအနိုင်ရတယ်လို့ မဆိုလိုပါဘူး။ Architecture ဆုံးဖြတ်ချက်အစစ်တွေဟာ project ရဲ့ requirement အစစ်နဲ့ ချိတ်ဆက်ထားတဲ့ tradeoff တွေထဲမှာသာ ရှိပြီး fixed ranking တစ်ခုထဲမှာ မရှိပါဘူး။

text
MYTH VS REALITY
---------------
MYTH:      Internet = Web
REALITY:   Internet contains Web, Email, Messaging, Games, ...

MYTH:      HTTPS = 100% secure
REALITY:   HTTPS = encrypted transport only, one layer of many

MYTH:      Logged in = Authorized for everything
REALITY:   Authentication (who you are)
           != Authorization (what you can do)

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

ဒီ course တစ်ခုလုံးထဲက စုစည်းထားတဲ့ အထင်လွဲစရာတွေကို အစောပိုင်းကတည်းက ပြင်ထားသင့်ပါတယ်။ တစ်ခုချင်းစီဟာ အပြင်ယောင်အားဖြင့် ကျိုးကြောင်းညီညီ ဖြစ်နေတတ်လို့ ပျံ့နှံ့သွားတာပါ — ပြင်ဆင်ချက်ကသာ shortcut က ချန်ခဲ့တဲ့ အသေးစိတ်ကို ပြန်ပြည့်စုံစေတာ ဖြစ်ပါတယ်။

  • "Internet နဲ့ Web ဟာ တစ်ခုတည်းပဲ" — မှားပါတယ်။ Internet ဆိုတာ ကမ္ဘာတစ်ဝှမ်း device တွေကို ချိတ်ဆက်ပေးတဲ့ physical/network infrastructure ဖြစ်ပြီး Web ဆိုတာ email, messaging, online game တွေနဲ့ အတူ ဒီအပေါ်မှာ တည်ဆောက်ထားတဲ့ service တစ်ခုပဲ ဖြစ်ပါတယ်။
  • "Website ဆိုတာ HTML file တစ်ခုပဲ" — မှားပါတယ်။ Site အစစ်အများစုမှာ ဒီ HTML နောက်ကွယ်မှာ server, database, API, authentication တွေပါ အလုပ်လုပ်နေကြပါတယ်။
  • "Frontend ဆိုတာ CSS ပဲ" — မှားပါတယ်။ Frontend မှာ layout, styling အပြင် user click နှိပ်တဲ့ interactive logic, application behavior တွေပါ ပါဝင်ပါတယ်။
  • "Backend ဆိုတာ database ပဲ" — မှားပါတယ်။ Backend က business logic, authentication, API endpoint, file handling တွေပါ ကိုင်တွယ်ပေးပြီး database ကတော့ သူ ဆက်သွယ်နေတဲ့ အစိတ်အပိုင်းတစ်ခုပဲ ဖြစ်ပါတယ်။
  • "Domain နဲ့ hosting ဟာ တစ်ခုတည်းပဲ" — မှားပါတယ်။ Domain ဆိုတာ register လုပ်ထားတဲ့ နာမည်ဖြစ်ပြီး hosting ဆိုတာ site ရဲ့ file တွေ တကယ်နေတဲ့ server space ပါ — provider မတူလည်း နှစ်ခုစလုံး လိုပါတယ်။
  • "DNS က hosting ပေးတယ်" — မှားပါတယ်။ DNS က domain name ကို server address မှန်မှန်ဆီ ညွှန်ပြပေးရုံပဲ ဖြစ်ပြီး site ရဲ့ file ကို ကိုယ်တိုင် သိမ်းမထားပါဘူး၊ serve လည်း မလုပ်ပါဘူး။
  • "HTTPS ဆိုရင် 100% လုံခြုံတယ်" — မှားပါတယ်။ HTTPS က browser နဲ့ server ကြား connection ကို encrypt လုပ်ပေးရုံပဲ ဖြစ်ပြီး password အားနည်းမှု၊ phishing၊ application ကိုယ်တိုင်ရဲ့ bug တွေကို ဘာမှ မကာကွယ်ပေးပါဘူး။
  • "Cookie အားလုံးဟာ tracking cookie ချည်းပဲ" — မှားပါတယ်။ Cookie အများစုက login state ထိန်းထားတာ၊ cart item မှတ်ထားတာ၊ preference သိမ်းထားတာအတွက်ပဲ ရှိပြီး tracking ရည်ရွယ်ချက် လုံးဝ မပါတာလည်း အများကြီးပါ။
  • "Session ဆိုတာ cookie ပဲ" — အပြည့်အဝ မှန်ပါဘူး။ Session ဆိုတာ server-side state ဖြစ်ပြီး cookie ကတော့ အဲဒီ state ကို ပြန်ညွှန်းတဲ့ reference ID ကို သယ်ဆောင်ပေးရုံပဲ ဖြစ်လေ့ရှိပါတယ်။
  • "Login ဝင်ထားရင် အားလုံးကို ခွင့်ပြုချက်ရတယ်" — မှားပါတယ်။ Authentication က မင်းဘယ်သူဖြစ်တယ်ဆိုတာ အတည်ပြုပေးပြီး authorization ကတော့ ဘာလုပ်ခွင့်ရှိလဲဆိုတာ သီးခြား ဆုံးဖြတ်ပေးတာပါ — login ဝင်ထားတာနဲ့ ခွင့်ပြုချက် အားလုံး ရမှာ မဟုတ်ပါဘူး။
  • "REST API နဲ့ backend ဟာ တစ်ခုတည်းပဲ" — မှားပါတယ်။ API ဆိုတာ backend က ဖော်ပြပေးတဲ့ interface ဖြစ်ပြီး backend ကတော့ အဲဒီ interface နောက်ကွယ်က logic, data, service တွေ ပါဝင်တဲ့ ပိုကျယ်ပြန့်တဲ့ စနစ်ပါ။
  • "GraphQL ဟာ REST ထက် အမြဲပိုကောင်းတယ်" — မှားပါတယ်။ GraphQL က flexible ဖြစ်တဲ့ nested data requirement တွေနဲ့ ကိုက်ညီပြီး REST ကတော့ straightforward CRUD-style API တွေအတွက် ရိုးရှင်းပြီး လုံလောက်လေ့ ရှိပါတယ်။
  • "SSR ဟာ CSR ထက် အမြဲပိုမြန်တယ်" — မှားပါတယ်။ SSR က first paint ကို လျှော့ပေးနိုင်ပေမယ့် server နှေးတာ (သို့) request တစ်ခုချင်းစီအတွက် အလုပ်များနေတာက cache ကောင်းကောင်းလုပ်ထားတဲ့ CSR app ထက် ပိုနှေးသွားစေနိုင်ပါတယ်။
  • "WebSocket သုံးရင် HTTP မလိုတော့ဘူး" — မှားပါတယ်။ WebSocket connection တွေကို HTTP handshake အစနဲ့ စတင်ညှိနှိုင်းလေ့ ရှိပြီး app အများစုက real-time မဟုတ်တဲ့ အရာအားလုံးအတွက် HTTP ကိုပဲ ဆက်သုံးနေကြဆဲပါ။
  • "PWA ဟာ native app နဲ့ အတူတူပဲ" — မှားပါတယ်။ PWA ဆိုတာ install လုပ်လို့ရတာ၊ offline အလုပ်လုပ်နိုင်တာလို app ပုံစံ feature ပါတဲ့ web app တစ်ခုပါ — ဒါပေမယ့် browser engine ထဲမှာပဲ run နေဆဲဖြစ်ပြီး native platform အပြည့်အစုံ compile ဖြစ်မသွားပါဘူး။

Decision guide ကို starting point အဖြစ်ပဲ သုံးပါ

အောက်က Web Architecture Decision Guide က လိုအပ်ချက်အများစုကို သင့်တော်တဲ့ ပထမဆုံး ရွေးချယ်မှုတွေနဲ့ ချိတ်ပေးထားပါတယ်။ Row တစ်ခုချင်းစီကို ကိုယ့် project အစစ်အမှန်နဲ့ ပြန်လည်ချိန်ဆသင့်တဲ့ starting point တစ်ခုအဖြစ်ပဲ သဘောထားပါ၊ absolute rule အဖြစ် မယူပါနဲ့။

အတူတူ စမ်းရေးကြည့်မယ်

javascript
const misconceptionLookup = {
  "internet-is-web":
    "False. The Internet is the network of connected computers; the Web is one service that runs on it, alongside email, messaging, and gaming.",
  "website-is-html-file":
    "False. Most real sites also need a server, a database, APIs, and authentication behind that HTML.",
  "https-is-100-percent-secure":
    "False. HTTPS encrypts the connection; it does not stop weak passwords, phishing, or bugs in the app itself.",
  "logged-in-means-authorized":
    "False. Authentication proves who you are; authorization decides what you are allowed to do next.",
  "graphql-always-better-than-rest":
    "False. GraphQL suits flexible, nested data needs; REST is often simpler for straightforward CRUD APIs.",
  "ssr-always-faster-than-csr":
    "False. SSR can shorten first paint, but a slow server or heavy per-request work can make it slower overall.",
  "pwa-is-same-as-native-app":
    "False. A PWA is a web app with app-like features; it still runs in a browser engine, not the full native platform."
};

function explainMisconceptions(keys) {
  return keys.map((key) => {
    const explanation = misconceptionLookup[key];
    return explanation
      ? `${key}: ${explanation}`
      : `${key}: no explanation on file yet`;
  });
}

const toCheck = [
  "internet-is-web",
  "https-is-100-percent-secure",
  "logged-in-means-authorized",
  "ssr-always-faster-than-csr"
];

for (const line of explainMisconceptions(toCheck)) {
  console.log(line);
}
You should see
internet-is-web: မှားပါတယ်။ Internet ဆိုတာ ချိတ်ဆက်ထားတဲ့ computer တွေရဲ့ network ဖြစ်ပြီး Web ဆိုတာ email, messaging, game တွေနဲ့ အတူ ဒီအပေါ်မှာ run နေတဲ့ service တစ်ခုပါ။
https-is-100-percent-secure: မှားပါတယ်။ HTTPS က connection ကို encrypt လုပ်ပေးရုံပဲ ဖြစ်ပြီး password အားနည်းမှု၊ phishing၊ app ကိုယ်တိုင်ရဲ့ bug တွေကို မတားဆီးပေးပါဘူး။
logged-in-means-authorized: မှားပါတယ်။ Authentication က မင်းဘယ်သူဖြစ်တယ်ဆိုတာ သက်သေပြပေးပြီး authorization ကတော့ ဘာလုပ်ခွင့်ရှိလဲဆိုတာ ဆုံးဖြတ်ပေးတာပါ။
ssr-always-faster-than-csr: မှားပါတယ်။ SSR က first paint ကို လျှော့ပေးနိုင်ပေမယ့် server နှေးတာ (သို့) request တစ်ခုချင်းစီမှာ အလုပ်များနေတာက overall အနေနဲ့ ပိုနှေးစေနိုင်ပါတယ်။

၅ မိနစ် စမ်းကြည့်

အောက်က Web Architecture Decision Guide ကနေ row နှစ်ခုကို ရွေးပြီး တကယ် တည်ဆောက်ချင်တဲ့ idea တစ်ခု — personal portfolio, e-commerce shop ငယ်ငယ်တစ်ခု, community forum တစ်ခု — မှာ အသုံးချကြည့်ပါ။ Row တစ်ခုချင်းစီက ဘယ် starting point ကို အကြံပြုလဲ ချရေးပြီး ကိုယ့် project က ဘာကြောင့် အဲဒီအကြံပြုချက်ကနေ ကွဲသွားနိုင်လဲဆိုတာ အကြောင်းပြချက် တစ်ချက် မှတ်ထားပါ။ နောက်ဆုံးအနေနဲ့ misconception list ကို ထပ်ဖတ်ပြီး ဒီ course မတိုင်ခင် ကိုယ်တိုင် အမှန်လို့ ထင်ခဲ့တဲ့ အထင်လွဲစရာ ဘယ်ဟာလဲဆိုတာ ရှာကြည့်ပါ။

သတိလေးတစ်ချက်

ဒီ ပြင်ဆင်ချက်တွေကို ဆန့်ကျင်ဘက်ဖက်က absolute rule အသစ်တစ်ခုအဖြစ် ယူသုံးမိတာ — တကယ်တော့ tradeoff ကို ပြန်ထည့်သွင်းစဉ်းစားစေဖို့ ရည်ရွယ်ထားတာပါ။

Web Architecture Decision Guide ရဲ့ 'starting point' ဆိုတဲ့ သတိပေးချက်ကို ကျော်ပြီး row တစ်ခုကို မဖြစ်မနေ လိုက်နာရမယ့် rule အဖြစ် ယူသုံးမိတာ။

MDN Web Docs -- How the Web WorksHow the Web Works

Web Development Glossary — အသုံးများသော ဝေါဟာရများ

Termအဓိပ္ပာယ်
Internetကမ္ဘာတစ်ဝှမ်းက device တွေနဲ့ network တွေကို ချိတ်ဆက်ပြီး data သယ်ဆောင်ပေးတဲ့ global network — Web ဆိုတာ ဒီအပေါ်မှာ run နေတဲ့ အရာတစ်ခုပဲ ဖြစ်ပါတယ်။
WebBrowser, URL, HTTP တွေကို သုံးပြီး Internet ပေါ်က ချိတ်ဆက်ထားတဲ့ page နဲ့ application တွေကို access လုပ်နိုင်စေတဲ့ စနစ်တစ်ခု။
WebsiteDomain တစ်ခုအောက်မှာ အများအားဖြင့် ရှိတဲ့ ဆက်နွှယ်နေတဲ့ web page စုစည်းမှုတစ်ခု၊ ခရီးဆုံးတစ်ခုတည်းအဖြစ် ထုတ်ဝေထားတာ။
Web PageBrowser တစ်ခုက load လုပ်ပြီး ပြသနိုင်တဲ့ ကိုယ်ပိုင် URL ပါတဲ့ document တစ်ခု၊ ပုံမှန်အားဖြင့် website ကြီးတစ်ခုရဲ့ တစ်စိတ်တစ်ပိုင်း။
Web ApplicationStatic content ပြသရုံထက် input လက်ခံ၊ state စီမံ၊ user လုပ်ဆောင်ချက်ကို တုံ့ပြန်တဲ့ software နဲ့ ပိုတူတဲ့ website တစ်မျိုး။
BrowserWeb page ကို တောင်းဆို၊ ၎င်းရဲ့ code ကို run ပြီး user အတွက် ရလဒ်ကို ပြသပေးတဲ့ software (Chrome, Firefox, Safari စသည်)။
URLBrowser တစ်ခုက ဘယ် resource ကို ဘယ်နေရာက ယူရမလဲဆိုတာ တိတိကျကျ ဖော်ပြပေးတဲ့ address။
ProtocolSystem နှစ်ခု မှန်ကန်စွာ ဆက်သွယ်နိုင်ဖို့ လိုက်နာကြတဲ့ သဘောတူထားတဲ့ rule အစုအဝေး၊ ဥပမာ web traffic အတွက် HTTP။
HostURL တစ်ခုက ညွှန်ပြထားတဲ့ request ကို ဖြေကြားပေးမယ့် စက် (သို့) service အတိအကျ — 'site နေထိုင်ရာနေရာ' လို့လည်း ရိုးရိုး သုံးလေ့ရှိတယ်။
Portစက်တစ်ခုတည်းပေါ်မှာ run နေတဲ့ service မတူတွေကို ခွဲခြားပေးတဲ့ နံပါတ်တပ် channel တစ်ခု၊ ဥပမာ HTTPS အတွက် 443။
ClientRequest ကို စတင်တောင်းဆိုသူ system ရဲ့ ဘက်တစ်ဖက် — ပုံမှန်အားဖြင့် user ကိုယ်စား လုပ်ဆောင်နေတဲ့ browser (သို့) app။
ServerRequest ကို စောင့်နားထောင်ပြီး response ပြန်ပေးတဲ့ system ရဲ့ ဘက်တစ်ဖက် — network ကနေ ရောက်နိုင်တဲ့နေရာမှာ အမြဲ run နေလေ့ရှိတယ်။
FrontendUser ရဲ့ browser ထဲမှာ run ပြီး သူမြင်ရ ထိတွေ့ရတဲ့ အပိုင်းကို ကိုင်တွယ်ပေးတဲ့ application ရဲ့ တစ်စိတ်တစ်ပိုင်း။
BackendLogic, data, authentication တွေကို နောက်ကွယ်က ကိုင်တွယ်ပေးတဲ့ application ရဲ့ server-side အပိုင်း။
Full-stackFrontend နဲ့ backend နှစ်ခုစလုံးမှာ အလုပ်လုပ်နိုင်တဲ့ စွမ်းရည် — နှစ်ခုစလုံးထဲက tool အားလုံးကို ကျွမ်းကျင်ဖို့ မလိုအပ်ပါ။
HTTPWeb ပေါ်မှာ browser နဲ့ server request/response လဲလှယ်ဖို့ သုံးတဲ့ protocol။
HTTPSEncrypt လုပ်ထားတဲ့ connection ပေါ်က HTTP — browser နဲ့ server ကြားသွားတဲ့ data ကို လမ်းကြားမှာ ဖတ်လို့ (သို့) ပြင်လို့ မရအောင် ကာကွယ်ပေးတယ်။
TLSHTTPS ရဲ့ နောက်ကွယ်က encryption protocol — system နှစ်ခုကြား လုံခြုံပြီး ကိုယ်ပိုင်ဖြစ်တဲ့ connection ကို တည်ဆောက်ပေးတယ်။
RequestClient တစ်ခုက resource (သို့) action တစ်ခု တောင်းဆိုပြီး server ဆီ ပို့လိုက်တဲ့ message။
ResponseServer က client ရဲ့ request ကို ဆောင်ရွက်ပြီးနောက် ပြန်ပို့ပေးတဲ့ message။
Status CodeHTTP response ထဲက ဘာဖြစ်ခဲ့တယ်ဆိုတာ အကျဉ်းချုပ်ပြပေးတဲ့ ဂဏန်းတို — အောင်မြင်တယ်၊ redirect ဖြစ်တယ်၊ client error၊ server error။
DomainSite တစ်ခုကို ညွှန်ပြပေးတဲ့ လူဖတ်လို့ရတဲ့ နာမည် (ဥပမာ example.com) — တခြားသူ မသုံးနိုင်အောင် register လုပ်ထားတယ်။
SubdomainDomain တစ်ခုရဲ့ အမည်တပ်ထားတဲ့ ခွဲထားသောအပိုင်း၊ ဥပမာ blog.example.com — site (သို့) service ရဲ့ အစိတ်အပိုင်းတွေ ခွဲဖို့ သုံးလေ့ရှိတယ်။
TLDDomain name ရဲ့ နောက်ဆုံးအပိုင်း၊ ဥပမာ .com, .org — အမျိုးအစား (သို့) မူလ အစကို ညွှန်ပြပေးတယ်။
RegistrarDomain name ပိုင်ဆိုင်မှု register လုပ်ဖို့ (သို့) စီမံဖို့ သုံးရတဲ့ အသိအမှတ်ပြု ကုမ္ပဏီ။
DNSလူဖတ်လို့ရတဲ့ domain name တွေကို computer တွေ တကယ်သုံးတဲ့ IP address အဖြစ် ပြန်ဘာသာပြန်ပေးတဲ့ စနစ်။
IP AddressNetwork ပေါ်က device တစ်ခုကို ဖော်ပြပေးတဲ့ ဂဏန်း address — data အတွက် postal address နဲ့ ဆင်တူတယ်။
HostingSite ရဲ့ file တွေကို သိမ်းပြီး visitor တွေဆီ serve ပေးတဲ့ service — hosting provider ဆီက ငှားရမ်းလေ့ရှိတယ်။
CDNနေရာအများကြီးမှာ ဖြန့်ကျက်ထားတဲ့ server network တစ်ခု — content ကို cache လုပ်ပြီး visitor နဲ့ အနီးဆုံး copy ကနေ serve ပေးတယ်။
OriginProtocol, domain, port ပေါင်းစပ်ထားတာ — browser က security ရည်ရွယ်ချက်အတွက် 'site တူတူ' လို့ သတ်မှတ်ပေးတဲ့ source တစ်ခုတည်း။
Cacheပြန်လည် ရယူ (သို့) တွက်ချက်စရာ မလိုအောင် ပိုမြန်တဲ့နေရာမှာ ခဏထားတဲ့ data ရဲ့ copy။
CookieSite တစ်ခုကိုယ်စား browser က သိမ်းထားတဲ့ data အသေး — နောက်ပိုင်း request တွေမှာ ပြန်ပို့ပြီး visitor အကြောင်း တစ်ခုခု မှတ်ထားပေးတယ်။
SessionVisitor တစ်ဦးအတွက် request အများကြီးကို ဖြတ်ကျော်ပြီး ခြေရာခံထားတဲ့ server-side state — cookie ထဲက reference ID နဲ့ ချိတ်ဆက်လေ့ရှိတယ်။
AuthenticationUser ဟာ ဘယ်သူဖြစ်တယ်ဆိုတာ သက်သေပြပေးတဲ့ လုပ်ငန်းစဉ် — password, token, သို့ ID သက်သေခံမှု တခြားနည်းလမ်း သုံးလေ့ရှိတယ်။
Authorizationအတည်ပြုပြီးသား user တစ်ဦးက ဘာလုပ်ခွင့် (သို့) ဘာ access ရှိလဲဆိုတာ ဆုံးဖြတ်ပေးတဲ့ လုပ်ငန်းစဉ်။
DatabaseApplication ရဲ့ data ကို ယုံကြည်စိတ်ချစွာ သိမ်းဆည်း၊ စီစဉ်၊ ပြန်ထုတ်ပေးဖို့ တည်ဆောက်ထားတဲ့ စနစ်တစ်ခု။
SQLRelational database တစ်ခုရဲ့ table ပုံစံ data ကို သတ်မှတ်၊ ဖတ်၊ ပြောင်းလဲဖို့ သုံးတဲ့ structured query language။
NoSQLData ကို fixed table အစား flexible ပုံစံ (document, key-value, graph) နဲ့ သိမ်းတဲ့ database အမျိုးအစား တစ်ခု။
APISoftware တစ်ခုက အခြားတစ်ခုရဲ့ internal ကို သိစရာမလိုဘဲ data (သို့) action တောင်းဆိုနိုင်ဖို့ သတ်မှတ်ထားတဲ့ contract။
RESTStandard HTTP method တွေနဲ့ resource ပုံစံ URL (ဥပမာ GET /users/5) ကို အခြေခံတဲ့ API ဒီဇိုင်း style တစ်ခု။
GraphQLFixed endpoint အများကြီးကို သွားဖို့ အစား client က query တစ်ခုတည်းထဲမှာ ဘယ် field လိုအပ်လဲဆိုတာ တိတိကျကျ သတ်မှတ်နိုင်တဲ့ API style တစ်ခု။
EndpointAPI တစ်ခုက request အမျိုးအစား တစ်ခုအတွက် ဖော်ပြပေးထားတဲ့ URL အတိအကျ၊ ဥပမာ /users, /orders/12။
JSONFrontend, backend, API တွေကြား structured data ပို့ဖို့ သုံးတဲ့ text-based data format ပေါ့ပါးတစ်ခု။
CSRClient-Side Rendering — browser က HTML အလွတ်နီးပါးတစ်ခုနဲ့ JavaScript ကို download လုပ်ပြီး မြင်ရမယ့် page ကို ကိုယ်တိုင် တည်ဆောက်တာ။
SSRServer-Side Rendering — server က request တစ်ခုချင်းစီအတွက် ပြည့်စုံတဲ့ HTML page ကို browser ဆီ မပို့ခင် တည်ဆောက်ပေးတာ။
SSGStatic Site Generation — page တွေကို ကြိုတင် တစ်ခါတည်း တည်ဆောက်ထားပြီး visitor အားလုံးဆီ အသင့်ဖြစ်နေတဲ့ file အဖြစ် serve ပေးတာ။
HydrationServer-rendered HTML ရောက်ပြီးသားပေါ်မှာ browser က interactivity ကို ချိတ်တပ်ပေးတဲ့ အဆင့်။
WebSocketClient နဲ့ server ကြား connection တစ်ခုကို ဖွင့်ထားပြီး ဘက်နှစ်ဖက်စလုံးက အချိန်မရွေး message ပို့နိုင်စေတဲ့ protocol တစ်ခု။
SSEServer-Sent Events — server က connection ရှည်ကြာတစ်ခုအပေါ်က browser ဆီ update တွေကို ဆက်တိုက် push ပို့ပေးတဲ့ တစ်လမ်းသွား channel တစ်ခု။
PollingPersistent connection မလိုဘဲ real-time update ကို simulate လုပ်ဖို့ server ကို timer နဲ့ ထပ်ခါထပ်ခါ 'အသစ်ရှိလား' လို့ မေးနေတာ။
PWAProgressive Web App — native app နဲ့ ပိုတူအောင် feature (install လုပ်လို့ရ၊ offline အလုပ်လုပ်နိုင်) ပါတဲ့ web app တစ်မျိုး၊ ဒါပေမယ့် browser engine ထဲမှာပဲ run နေဆဲ။
Service WorkerPage နဲ့ သီးခြား browser က background မှာ run ပေးတဲ့ script — offline caching, push notification လို feature တွေကို ဖြစ်စေတယ်။
Web ManifestWeb app ကို app တစ်ခုလို install လုပ်လို့ရအောင် သူ့နာမည်၊ icon၊ display setting တွေကို ဖော်ပြပေးတဲ့ JSON file အသေးလေး။
CORSCross-Origin Resource Sharing — origin တစ်ခုက page တစ်ခုက အခြား origin ကနေ data တောင်းဆိုနိုင်လား ဆိုတာကို ထိန်းချုပ်ပေးတဲ့ browser rule။
XSSCross-Site Scripting — attacker တစ်ယောက်က malicious script ကို page ထဲထည့်ပြီး user တခြားတွေရဲ့ browser ထဲမှာ run သွားစေတဲ့ security ချို့ယွင်းချက်တစ်ခု။
CSRFCross-Site Request Forgery — malicious site တစ်ခုက login ဝင်ထားတဲ့ user ရဲ့ browser ကို လှည့်ဖြားပြီး အခြား site တစ်ခုဆီ လိုချင်မထားတဲ့ request ပို့စေတဲ့ security ချို့ယွင်းချက်တစ်ခု။

Web Architecture Decision Guide

လိုအပ်ချက်ရွေးချယ်သင့်သည်
Need a simple marketing siteContent ဟာ public ဖြစ်ပြီး ရှားရှားပါးပါးပဲ ပြောင်းလဲတာမို့ static (သို့) SSG approach သင့်တော်လေ့ ရှိပါတယ် — build time မှာ တစ်ခါတည်း pre-render လုပ်တာက အကျိုးရှိပါတယ်။
Need a highly interactive dashboardExperience ဟာ document ထက် software နဲ့ ပိုတူတာကြောင့် client-side application (CSR) က အသုံးဝင်နိုင်ပါတယ်။
Need dynamic content generated per requestVisitor (သို့) request တစ်ခုချင်းစီအတွက် အသစ် တည်ဆောက်ပေးရမှာမို့ SSR က ကိုက်ညီနိုင်ပါတယ်။
Need database access or business logicFrontend တစ်ခုတည်းက လုံခြုံစွာ မကိုင်တွယ်နိုင်တဲ့ rule, validation, data ကို ပိုင်ဆိုင်ရမယ့် backend တစ်ခု လိုအပ်ပါတယ်။
Need data to move between frontend and backendREST, GraphQL ဘယ်ဟာရွေးရွေး frontend, backend data ခန့်မှန်းနိုင်တဲ့ပုံစံနဲ့ လဲလှယ်ဖို့ API ဟာ လိုအပ်တဲ့ အစိတ်အပိုင်းပါ။
Need real-time updatesUpdate တွေက ဘယ်လောက် bidirectional ဖြစ်ဖို့ လိုအပ်လဲဆိုတာအလိုက် WebSocket, Server-Sent Events, (သို့) managed realtime platform ကို စဉ်းစားထိုက်ပါတယ်။
Want an offline or installable experiencePWA ကို စဉ်းစားပါ — service worker နဲ့ web manifest တို့ဟာ native မဖြစ်ဘဲ install လုပ်လို့ရမှု၊ offline support ရအောင် ကူညီပေးနိုင်ပါတယ်။
Need to reach many geographic regions fastCDN တစ်ခုက content ကို visitor တစ်ယောက်စီနဲ့ ပိုနီးတဲ့ တည်နေရာကနေ cache လုပ်ပြီး serve ပေးလို့ အထောက်အကူ ဖြစ်စေပါတယ်။
Need user accountsAuthentication တစ်ခုနဲ့ နောက်ပိုင်း identity ခြေရာခံဖို့ session (သို့) token၊ ပြီးတော့ account တစ်ခုချင်းစီ ဘာလုပ်ခွင့်ရှိလဲ ဆုံးဖြတ်ဖို့ authorization လိုအပ်ပါလိမ့်မယ်။
Need to accept paymentsBackend ကို payment provider နဲ့ တွဲသုံးပါ — raw card data ကို ကိုယ့် frontend (သို့) server ပေါ်မှာ တိုက်ရိုက် ဘယ်တော့မှ မကိုင်တွယ်ပါနဲ့။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • ဒီ ပြင်ဆင်ချက်တွေကို ဆန့်ကျင်ဘက်ဖက်က absolute rule အသစ်တစ်ခုအဖြစ် ယူသုံးမိတာ — တကယ်တော့ tradeoff ကို ပြန်ထည့်သွင်းစဉ်းစားစေဖို့ ရည်ရွယ်ထားတာပါ။
  • Web Architecture Decision Guide ရဲ့ 'starting point' ဆိုတဲ့ သတိပေးချက်ကို ကျော်ပြီး row တစ်ခုကို မဖြစ်မနေ လိုက်နာရမယ့် rule အဖြစ် ယူသုံးမိတာ။
  • ဒီ course က system map တစ်ခုပါ — REST/DNS/Database/Security ကို နက်နက်ရှိုင်းရှိုင်း လေ့လာချင်ရင် API Tutorial, Cloud & Deployment, SQL, Cybersecurity tutorial တွေဆီ ဆက်သွားပါ။

လေ့ကျင့်ခန်း

အောက်က Web Architecture Decision Guide ကနေ row နှစ်ခုကို ရွေးပြီး တကယ် တည်ဆောက်ချင်တဲ့ idea တစ်ခု — personal portfolio, e-commerce shop ငယ်ငယ်တစ်ခု, community forum တစ်ခု — မှာ အသုံးချကြည့်ပါ။ Row တစ်ခုချင်းစီက ဘယ် starting point ကို အကြံပြုလဲ ချရေးပြီး ကိုယ့် project က ဘာကြောင့် အဲဒီအကြံပြုချက်ကနေ ကွဲသွားနိုင်လဲဆိုတာ အကြောင်းပြချက် တစ်ချက် မှတ်ထားပါ။ နောက်ဆုံးအနေနဲ့ misconception list ကို ထပ်ဖတ်ပြီး ဒီ course မတိုင်ခင် ကိုယ်တိုင် အမှန်လို့ ထင်ခဲ့တဲ့ အထင်လွဲစရာ ဘယ်ဟာလဲဆိုတာ ရှာကြည့်ပါ။

You'll know it worked when: internet-is-web: မှားပါတယ်။ Internet ဆိုတာ ချိတ်ဆက်ထားတဲ့ computer တွေရဲ့ network ဖြစ်ပြီး Web ဆိုတာ email, messaging, game တွေနဲ့ အတူ ဒီအပေါ်မှာ run နေတဲ့ service တစ်ခုပါ။ https-is-100-percent-secure: မှားပါတယ်။ HTTPS က connection ကို encrypt လုပ်ပေးရုံပဲ ဖြစ်ပြီး password အားနည်းမှု၊ phishing၊ app ကိုယ်တိုင်ရဲ့ bug တွေကို မတားဆီးပေးပါဘူး။ logged-in-means-authorized: မှားပါတယ်။ Authentication က မင်းဘယ်သူဖြစ်တယ်ဆိုတာ သက်သေပြပေးပြီး authorization ကတော့ ဘာလုပ်ခွင့်ရှိလဲဆိုတာ ဆုံးဖြတ်ပေးတာပါ။ ssr-always-faster-than-csr: မှားပါတယ်။ SSR က first paint ကို လျှော့ပေးနိုင်ပေမယ့် server နှေးတာ (သို့) request တစ်ခုချင်းစီမှာ အလုပ်များနေတာက overall အနေနဲ့ ပိုနှေးစေနိုင်ပါတယ်။

လေ့ကျင့်ခန်း — အထင်လွဲစရာများနှင့် Web Architecture Decision Guide | Thuta Learning