Thuta Learning
How the Web Works
IntermediateWeb Developmentbeginner

REST နှင့် GraphQL ကို သဘောတရားအရ

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

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

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

REST သည် URL ဖြင့် ဖော်ပြသော resource များကို HTTP method များဖြင့် ကိုင်တွယ်သည့် API style ဖြစ်သည်။

  • GET /users - user စာရင်း
  • GET /users/42 - user တစ်ဦးတည်း
  • POST /users - user အသစ် ဖန်တီး
  • PATCH /users/42 - user update
  • DELETE /users/42 - user ဖျက်

GraphQL သည် များသောအားဖြင့် endpoint တစ်ခုတည်းကို ဖော်ထုတ်ပြီး client သည် လိုချင်သော field များကို ဖော်ပြသော query ပို့သည်, ဥပမာ { user(id: 42) { name, avatarUrl } }.

AspectREST vs GraphQL
Endpoint shapeREST: resource တစ်ခုချင်းစီအတွက် endpoint များစွာ။ GraphQL: များသောအားဖြင့် endpoint တစ်ခုတည်း။
Data selectionREST: endpoint တစ်ခုချင်းစီအလိုက် server က response ပုံသဏ္ဌာန် ဆုံးဖြတ်သည်။ GraphQL: client က လိုချင်သော field ကို တိတိကျကျ ရွေးချယ်သည်။
CachingREST: ရင့်ကျက်သော HTTP-level caching ကို အကျိုးရှိသည်။ GraphQL: များသောအားဖြင့် custom, application-level caching လိုအပ်သည်။
ComplexityREST: infrastructure ရိုးရှင်း၊ endpoint ပိုများ ထိန်းသိမ်းစရာ။ GraphQL: schema တစ်ခုတည်း ထိန်းသိမ်းရမည်၊ query cost ရှုပ်ထွေးမှု ကိုယ်ပိုင် ရှိသည်။
Good fit forREST: ရိုးရှင်း၊ resource ပုံစံ API များနှင့် caching လိုအပ်ချက်များ။ GraphQL: flexible, တိကျသော data fetching လိုအပ်သော ရှုပ်ထွေးသော client များ။
text
REST VS GRAPHQL SHAPE
---------------------
REST: MULTIPLE ENDPOINTS         GRAPHQL: ONE ENDPOINT
-------------------------         -----------------------

 Client                            Client
   |-- GET /users/42 --> Server      |-- POST /graphql --> Server
   |-- GET /users/42                 |   { user(id:42){
   |     /avatar --------> Server    |     name, avatarUrl } }
   |                                 |<-- { name, avatarUrl }
  (2 requests, fixed shape)         (1 request, chosen shape)

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

page တစ်ခုသည် name နှင့် avatarUrl တစ်ခုတည်းသာ လိုအပ်ပါက REST က call နှစ်ကြိမ်လိုနိုင်ပြီး GraphQL က query တစ်ခုတည်းနှင့် ပြီးနိုင်သည်။

အောက်ပါ code တွင် fetchViaRest နှင့် fetchViaGraphql သည် mock data တူညီအပေါ် run ပြီး result ပုံသဏ္ဌာန်တူညီစွာ ထုတ်ပေးသည်။

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

javascript
// Mock "server-side" data
const usersDb = {
  42: { id: 42, name: "Dana", avatarUrl: "https://cdn.example.com/dana.png", email: "dana@example.com" },
};

// REST-style: separate endpoint calls
function restGetUser(id) {
  return { ...usersDb[id] }; // GET /users/:id returns the full record
}
function restGetAvatar(id) {
  return { avatarUrl: usersDb[id].avatarUrl }; // GET /users/:id/avatar
}

function fetchViaRest(id) {
  const user = restGetUser(id);
  const avatar = restGetAvatar(id);
  return { name: user.name, avatarUrl: avatar.avatarUrl };
}

// GraphQL-style: one call, client picks fields
function graphqlQuery(id, fields) {
  const record = usersDb[id];
  const result = {};
  fields.forEach((field) => {
    result[field] = record[field];
  });
  return result;
}

function fetchViaGraphql(id) {
  return graphqlQuery(id, ["name", "avatarUrl"]);
}

console.log("REST result:", fetchViaRest(42));
console.log("GraphQL result:", fetchViaGraphql(42));
You should see
fetchViaRest(42) နှင့် fetchViaGraphql(42) နှစ်ခုစလုံးသည် တူညီသော ရလဒ် { name: 'Dana', avatarUrl: 'https://cdn.example.com/dana.png' } ကို log ထုတ်သည်။

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

mock user ထဲသို့ 'email' field ထပ်ထည့်ပြီး fetchViaGraphql ကို ၎င်းတောင်းဆိုရန် တိုးချဲ့ကာ REST endpoint call ညီမျှသော တစ်ခု ထပ်ထည့်ခြင်းနှင့် code မည်မျှ ပြောင်းလဲရသည်ကို နှိုင်းယှဉ်ကြည့်ပါ။

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

GraphQL သည် REST ထက် အမြဲတမ်း ပိုမြန် (သို့) ပိုကောင်းသည်ဟု ပြောဆိုခြင်း - caching လိုအပ်ချက်၊ client အမျိုးမျိုးနှင့် team ၏ ကျွမ်းကျင်မှုပေါ် မူတည်သည်။

ဒီသင်ခန်းစာ၏ endpoint စာရင်းကို REST ၏ ပြည့်စုံသော ပုံရိပ်ဟု ယူဆခြင်း - method နှင့် status semantics အပြည့်အစုံကို API Tutorial တွင် လေ့လာနိုင်သည်။

GraphQL.org - Introduction to GraphQLHow the Web Works

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

  • GraphQL သည် REST ထက် အမြဲတမ်း ပိုမြန် (သို့) ပိုကောင်းသည်ဟု ပြောဆိုခြင်း - caching လိုအပ်ချက်၊ client အမျိုးမျိုးနှင့် team ၏ ကျွမ်းကျင်မှုပေါ် မူတည်သည်။
  • ဒီသင်ခန်းစာ၏ endpoint စာရင်းကို REST ၏ ပြည့်စုံသော ပုံရိပ်ဟု ယူဆခြင်း - method နှင့် status semantics အပြည့်အစုံကို API Tutorial တွင် လေ့လာနိုင်သည်။
  • ဒီ course က system map တစ်ခုပါ — REST/DNS/Database/Security ကို နက်နက်ရှိုင်းရှိုင်း လေ့လာချင်ရင် API Tutorial, Cloud & Deployment, SQL, Cybersecurity tutorial တွေဆီ ဆက်သွားပါ။

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

mock user ထဲသို့ 'email' field ထပ်ထည့်ပြီး fetchViaGraphql ကို ၎င်းတောင်းဆိုရန် တိုးချဲ့ကာ REST endpoint call ညီမျှသော တစ်ခု ထပ်ထည့်ခြင်းနှင့် code မည်မျှ ပြောင်းလဲရသည်ကို နှိုင်းယှဉ်ကြည့်ပါ။

You'll know it worked when: fetchViaRest(42) နှင့် fetchViaGraphql(42) နှစ်ခုစလုံးသည် တူညီသော ရလဒ် { name: 'Dana', avatarUrl: 'https://cdn.example.com/dana.png' } ကို log ထုတ်သည်။