လွယ်လွယ်ပြောရရင် REST နဲ့ GraphQL နှစ်ခုလုံးက ကိုယ့် app ဒါမှမဟုတ် website ကနေ server ဆီ data သွားတောင်းတဲ့ “စကားပြောပုံစံ” — API design လုပ်တဲ့ စတိုင်လ် နှစ်မျိုးပါ။ တစ်ခုက စတိုင်အဟောင်း (ဒါပေမယ့် အခုထိ ဘုရင်)၊ နောက်တစ်ခုက Facebook က တီထွင်ထားတဲ့ စတိုင်အသစ်။

စားသောက်ဆိုင်နဲ့ ဥပမာ ပြောရအောင်။ REST ဆိုတာ set menu ဆိုင်နဲ့ တူတယ်။ Menu မှာ “မုန့်ဟင်းခါး တစ်ပွဲ” လို့ ရေးထားရင် မှာလိုက်တာနဲ့ ဆိုင်က သတ်မှတ်ထားတဲ့အတိုင်း တစ်ပွဲလုံး ချပေးတယ် — ကိုယ် အရွက်မကြိုက်လည်း အရွက်ပါလာမယ်။ Endpoint တစ်ခုက data အစုံအလင် ပြန်ပေးတာ။ GraphQL ကျတော့ ကိုယ်စားချင်တာပဲ တစ်မျိုးချင်း မှာလို့ရတဲ့ ဆိုင်။ “ခေါက်ဆွဲ၊ အသားပဲ၊ အရွက်မထည့်နဲ့” လို့ ပြောလို့ရတယ်။ ကိုယ်တောင်းသလောက်ပဲ ရတယ် — ပိုမရ၊ လိုမရ။

တကယ့် ဥပမာနဲ့ ကြည့်ရအောင်။ User တစ်ယောက်ရဲ့ နာမည်နဲ့ သူ့ရဲ့ post ခေါင်းစဉ်တွေ လိုချင်တယ်ဆိုပါစို့။

REST နဲ့ဆို ဒီလို တောင်းရတယ် —


GET /users/123          → နာမည်၊ email၊ လိပ်စာ၊ ဖုန်း... အကုန်ပါလာတယ်
GET /users/123/posts    → post တွေရဲ့ အကြောင်းအရာအပြည့်အစုံ ပါလာတယ်

Request နှစ်ခု လုပ်ရတယ်။ ပြီးတော့ ကိုယ် နာမည်ပဲ လိုချင်တာ၊ email နဲ့ လိပ်စာပါ ပါလာတယ် — ဒါကို over-fetching လို့ ခေါ်တယ်။ Data အပို သယ်ရတာ။ ဖုန်း internet နှေးတဲ့နေရာဆို ဒါက တော်တော် သိသာတယ်။

GraphQL နဲ့ဆို request တစ်ခုတည်း၊ endpoint တစ်ခုတည်း (/graphql) —


{
  user(id: 123) {
    name
    posts {
      title
    }
  }
}

ကိုယ်ရေးတဲ့ query အတိုင်း နာမည်နဲ့ ခေါင်းစဉ်ပဲ ပြန်လာတယ်။ ပိုမပါ၊ လိုမရှိ။ ဒါ GraphQL ရဲ့ အလှပဲ။

ဒါဆို ဘာလို့ လူတိုင်း GraphQL မသုံးကြတာလဲ? အကြောင်းရှိတယ်။ REST က ရိုးရိုးရှင်းရှင်းပဲ — endpoint တစ်ခုကို browser မှာ ရိုက်ထည့်ကြည့်လို့ရတယ်၊ cache လုပ်ရလွယ်တယ်၊ debug လုပ်ရလွယ်တယ်။ API အသေးစား၊ သာမန် website တွေအတွက် REST က လုံလောက်တာထက် ပိုတယ်။ GraphQL ကျတော့ server ဘက်မှာ setup လုပ်ရ ပိုရှုပ်တယ်။ Query တစ်ခုက data အများကြီး တစ်ပြိုင်နက် တောင်းလို့ရတော့ server ကို မေးခွန်းဆိုးနဲ့ ဝိုင်းမေးသလို ဖြစ်ပြီး ပျက်သွားနိုင်တယ် — ဒါကို ကာဖို့ rate limiting၊ query depth limit တို့လို အပို ကာကွယ်မှုတွေ လိုတယ်။

ဘယ်ဟာ ရွေးရမလဲဆိုတာ ဒီလို စဉ်းစားပါ —

API အသစ် အသေးစား စလုပ်မယ်၊ team လည်း ငယ်တယ် → REST ကနေ စ
Mobile app တစ်ခု၊ screen မျိုးစုံက data ပုံစံမျိုးစုံ လိုတယ် → GraphQL စဉ်းစား
Third-party developer တွေ သုံးမယ့် public API → REST (လူတိုင်း နားလည်တယ်)
Microservices အများကြီးရဲ့ data ကို တစ်နေရာတည်း စုတောင်းချင်တယ် → GraphQL gateway
Cache ကောင်းကောင်း လိုတယ် (CDN နဲ့) → REST က ပိုလွယ်

ကျွန်တော် ကိုယ်တိုင်ဆိုရင် side project အသေးလေးတွေမှာ REST ပဲ သုံးတယ်။ ရိုးတယ်၊ မြန်တယ်၊ ခေါင်းမစားရဘူး။ GraphQL က data လိုအပ်ချက် ရှုပ်ထွေးလာမှ ထုတ်သုံးတဲ့ လက်နက်ကြီးလို့ မှတ်ထားတယ်။ လက်နက်ကြီးတိုင်းလို၊ လိုအပ်တဲ့နေရာမှ သုံးမှ တန်တယ်။ 🙂