နားလည်ထားရမယ့် အချက်
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 } }.
| Aspect | REST vs GraphQL |
|---|---|
| Endpoint shape | REST: resource တစ်ခုချင်းစီအတွက် endpoint များစွာ။ GraphQL: များသောအားဖြင့် endpoint တစ်ခုတည်း။ |
| Data selection | REST: endpoint တစ်ခုချင်းစီအလိုက် server က response ပုံသဏ္ဌာန် ဆုံးဖြတ်သည်။ GraphQL: client က လိုချင်သော field ကို တိတိကျကျ ရွေးချယ်သည်။ |
| Caching | REST: ရင့်ကျက်သော HTTP-level caching ကို အကျိုးရှိသည်။ GraphQL: များသောအားဖြင့် custom, application-level caching လိုအပ်သည်။ |
| Complexity | REST: infrastructure ရိုးရှင်း၊ endpoint ပိုများ ထိန်းသိမ်းစရာ။ GraphQL: schema တစ်ခုတည်း ထိန်းသိမ်းရမည်၊ query cost ရှုပ်ထွေးမှု ကိုယ်ပိုင် ရှိသည်။ |
| Good fit for | REST: ရိုးရှင်း၊ resource ပုံစံ API များနှင့် caching လိုအပ်ချက်များ။ GraphQL: flexible, တိကျသော data fetching လိုအပ်သော ရှုပ်ထွေးသော client များ။ |
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 ပုံသဏ္ဌာန်တူညီစွာ ထုတ်ပေးသည်။
အတူတူ စမ်းရေးကြည့်မယ်
// 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));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 GraphQL — How the Web Works