နားလည်ထားရမယ့် အချက်
GraphQL က API များအတွက် query language တစ်ခုနဲ့ server-side runtime တစ်ခုဖြစ်ပါတယ်။ REST မှာ endpoint တစ်ခုစီက fixed shape data ပြန်ပေးပေမယ့် GraphQL မှာတော့ client က request တစ်ခုထဲမှာ ကိုယ်လိုချင်တဲ့ fields များကိုတိတိကျကျရွေးချယ်နိုင်ပါတယ်။ ဒါကြောင့် mobile app က field နည်းနည်းပဲလိုချင်ပေမယ့် REST endpoint က object တစ်ခုလုံးပြန်ပေးတဲ့ over-fetching နဲ့ nested data ရဖို့ endpoint အများကြီး ခေါ်ရတဲ့ under-fetching ပြဿနာနှစ်ခုလုံးကို ဖြေရှင်းပေးနိုင်ပါတယ်။ GraphQL ကိုယ်တိုင်က database မဟုတ်ဘဲ existing data sources (SQL database၊ REST API၊ microservices) အပေါ်မှာတည်ဆောက်ထားတဲ့ layer တစ်ခုသာဖြစ်ပါတယ်။
လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်
ဒီ course တစ်ခုလုံးမှာ Tutorial Platform ဆိုတဲ့ blog/course-catalog project တစ်ခုကို running example အဖြစ်သုံးသွားမယ်။ REST version မှာ tutorial card list ကို ဖတ်ရင် author bio၊ full lesson content အားလုံး ပါလာတတ်ပေမယ့် GraphQL version မှာတော့ card view အတွက် title နဲ့ summary ကိုပဲ တောင်းနိုင်ပါတယ်။ Course roadmap အနေနဲ့ schema/types → queries/mutations → intermediate patterns (pagination, N+1) → Apollo Server/Client → production concerns (auth, federation, performance) ဆီအထိ တစ်ဆင့်ချင်းသွားမယ်။
အတူတူ စမ်းရေးကြည့်မယ်
Client
|
| POST /graphql { query: "{ tutorial(id:1){ title } }" }
v
GraphQL Server (single endpoint)
|
| resolvers route each field
v
Resolvers ---> PostgreSQL (tutorials, authors)
---> REST service (analytics)
---> Cache (Redis)GraphQL က ဘယ်ပြဿနာကိုဖြေရှင်းလဲနှင့် ဒီ course ရဲ့ project ကို ရှင်းပြနိုင်မည်။၅ မိနစ် စမ်းကြည့်
မိမိသိထားတဲ့ REST API တစ်ခုကို စဉ်းစားပြီး client တစ်ခုအတွက် over-fetch ဖြစ်ခဲ့တဲ့ field သုံးခု၊ nested data ရဖို့ endpoint နှစ်ခုခေါ်ရခဲ့ရတဲ့ under-fetch ဥပမာတစ်ခုရေးပါ။
သတိလေးတစ်ချက်
GraphQL ကို database တစ်ခုလို သို့မဟုတ် REST ထက် အလိုအလျောက်မြန်တယ်လို့ မမှတ်ယူပါနှင့်။ Underlying data source (SQL query, network call) တွေကတော့ မပြောင်းလဲပါ—naive resolver ရေးရင် REST ထက်တောင် နှေးနိုင်ပါတယ်။
GraphQL — Introduction to GraphQL — GraphQL