လွယ်လွယ်ပြောရရင် 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 လိုအပ်ချက် ရှုပ်ထွေးလာမှ ထုတ်သုံးတဲ့ လက်နက်ကြီးလို့ မှတ်ထားတယ်။ လက်နက်ကြီးတိုင်းလို၊ လိုအပ်တဲ့နေရာမှ သုံးမှ တန်တယ်။ 🙂