Thuta Learning
ရှာဖွေရန်
ExercisesWeb Developmentintermediate

Practice Set 2: CRUD, Pagination & Error Handling ပေါင်းစပ်ခြင်း

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

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

  • Practice Set 2: CRUD, Pagination & Error Handling ပေါင်းစပ်ခြင်း ကို ကိုယ်တိုင် လေ့ကျင့်ကြည့်မယ်
  • သင်ခဲ့ပြီးသား skill တွေကို practice လုပ်ပြီး ခိုင်မာအောင်လုပ်မယ်
  • အမှားရှာ၊ ပြင်တတ်၊ ကိုယ်တိုင် check လုပ်တတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

ဒီ Practice Set က Practice Set 1 ထက် တစ်ဆင့်တက်ပြီး Create/Read/Update/Delete, Pagination query params, Error/Rate-limit handling တွေကို တစ်ခါတည်း ပေါင်းသုံးဖို့ ရည်ရွယ်ပါတယ်။ Real project မှာ request တစ်ခုချင်းစီက အမှားမဖြစ်ဘူးလို့ သေချာနိုင်တာမဟုတ်တဲ့အတွက် success flow တစ်ခုတည်းမက error flow ကိုပါ တွက်ချက်တတ်ဖို့ အလေ့အကျင့်ရအောင် ဒီ task 4 ခုကို ပြင်ဆင်ထားပါတယ်။ Task တစ်ခုစီကို ပြီးအောင်ရေးပြီးရင် အောက်ခြေမှာ ရေးထားတဲ့ Common Mistakes တွေနဲ့ ကိုယ့် code ကို နှိုင်းယှဉ်ကြည့်ပါ။

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

Task 1: user 3 ယောက်ကို loop နဲ့ POST create လုပ်ပြီးရင် GET /v1/users?page=1&limit=2 နဲ့ page=2&limit=2 ကို ခေါ်ကာ user 3 ယောက်စလုံး page နှစ်ခုကွဲပြီး ပြန်ရလားစစ်ဆေးပါ။ Task 2: create ထားတဲ့ user တစ်ယောက်ရဲ့ email ကို PUT request နဲ့ update လုပ်ပြီး ပြန် GET ခေါ်ကာ ပြောင်းသွားမှန်း verify လုပ်ပါ။ Task 3: user တစ်ယောက်ကို DELETE လုပ်ပြီးရင် အဲဒီ id နဲ့ ထပ်GET ခေါ်ကြည့်ကာ status 404 ပြန်ရမှန်း confirm လုပ်ပါ။ Task 4: token ကို တမင်မှားထားပြီး request ပို့ကာ 401 error ကို catch လုပ်ကာ "Token မှားနေပါတယ်၊ ပြန်စစ်ဆေးပါ" ဆိုတဲ့ user-friendly message ထုတ်တဲ့ error handler ရေးပါ။

Code နမူနာ

javascript
// Task 1 skeleton
async function createThreeUsers() {
  const users = [
    { name: 'A', email: 'a@example.com' },
    { name: 'B', email: 'b@example.com' },
    { name: 'C', email: 'c@example.com' },
  ];
  for (const u of users) {
    await createUser(u.name, u.email); // Part 2 ရဲ့ function ကို ပြန်သုံးနိုင်ပါတယ်
  }
}

// Task 4 skeleton
async function testInvalidToken() {
  try {
    const res = await fetch('https://api.example.com/v1/users', {
      headers: { Authorization: 'Bearer WRONG_TOKEN' },
    });
    if (res.status === 401) {
      throw new Error('UNAUTHORIZED');
    }
  } catch (err) {
    console.error('Token မှားနေပါတယ်၊ ပြန်စစ်ဆေးပါ');
  }
}
You should see
Task 1-3 က pagination, update, delete flow အသီးသီး မှန်ကန်စွာ အလုပ်လုပ်မှန်း console output ကနေ confirm ရမှာဖြစ်ပြီး Task 4 က friendly error message တစ်ကြောင်း ထွက်လာပါလိမ့်မယ်။

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

5 မိနစ်အတွင်း Task 1 ကို run ပြီး page=1 limit=2 ရလဒ်ထဲမှာ user ဘယ်နှစ်ယောက်ပါလာလဲ manually ရေတွက်ကြည့်ပါ။

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

Loop ထဲမှာ create request များစွာကို connection တစ်ခါတည်း parallel ပို့ရင် rate limit ကို လျင်မြန်စွာ ထိနိုင်တဲ့အတွက် Task 1 ကို sequential (await တစ်ခုပြီးမှ နောက်တစ်ခု) လုပ်ဆောင်ပါ။

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

  • Pagination page/limit ကို string အနေနဲ့ query ထဲထည့်ရာမှာ URL encode မလုပ်ဘဲ space ပါတဲ့ value နဲ့ error ဖြစ်တတ်ကြပါတယ်
  • Delete လုပ်ပြီးနောက် ပြန် GET verify မလုပ်ဘဲ 'ပြီးပြီ' ဟု ယူဆကာ data ရှိမရှိ သေချာမစစ်တတ်ကြပါတယ်

အခု ကိုယ်တိုင် စမ်းကြည့်

5 မိနစ်အတွင်း Task 1 ကို run ပြီး page=1 limit=2 ရလဒ်ထဲမှာ user ဘယ်နှစ်ယောက်ပါလာလဲ manually ရေတွက်ကြည့်ပါ။

You'll know it worked when: Task 1-3 က pagination, update, delete flow အသီးသီး မှန်ကန်စွာ အလုပ်လုပ်မှန်း console output ကနေ confirm ရမှာဖြစ်ပြီး Task 4 က friendly error message တစ်ကြောင်း ထွက်လာပါလိမ့်မယ်။

Practice Set 2: CRUD, Pagination & Error Handling ပေါင်းစပ်ခြင်း | Thuta Learning