နားလည်ထားရမယ့် အချက်
အခုအထိ လုပ်ခဲ့တဲ့ API call တွေအားလုံးက ပုံစံတစ်မျိုးတည်းပါ — သင့် application က server ကို request ပို့ပြီး တစ်ခုခုတောင်းဆိုတယ်၊ server ကလည်း response ပြန်ပေးတယ်။ သင့်အက်ပ်ဟာ request ကိုစတင်ပို့သူ client အနေနဲ့ အမြဲရှိနေပြီး၊ conversation ဘယ်အချိန်စမလဲဆိုတာကိုလည်း အမြဲထိန်းချုပ်ထားတယ်။ Webhook ကတော့ ဒီဆက်ဆံရေးတစ်ခုလုံးကို ဆန့်ကျင်ပြောင်းလိုက်တာပါ။
- Payment processor (ဥပမာ- charge တစ်ခု ပြီးဆုံးချိန်)
- Chat platform (ဥပမာ- message တစ်ခု post လုပ်ချိန်)
- CI/CD pipeline (ဥပမာ- build တစ်ခု ပြီးဆုံးချိန်)
- Version control host (ဥပမာ- repository ကို push လုပ်ချိန်)
Webhook နဲ့ဆိုရင် ဒီလို external service တစ်ခုက သူတို့ဘက်မှာ တစ်ခုခုဖြစ်လိုက်တာနဲ့ တစ်ပြိုင်နက် သင့် server ပိုင်တဲ့ URL ဆီကို HTTP POST request ကို ပို့လိုက်ပါတယ်။ သင်က မေးမြန်းသူ မဟုတ်တော့ဘဲ request ကို လက်ခံရရှိသူ ဖြစ်သွားပါတယ်။ သင့် server ဟာ ဝင်လာတဲ့ HTTP request ကို နားထောင်နေရမယ်၊ body ကို parse လုပ်ရမယ်၊ ဘာလုပ်မလဲ ဆုံးဖြတ်ရမယ် — ဒါက ပုံမှန် API server တစ်ခုရဲ့ အခန်းကဏ္ဍနဲ့ အတိအကျ တူနေပါတယ်။
ဒါကြောင့် webhook တွေက စလေ့လာချိန်မှာ ရင်ဆိုင်ရခက်ခဲတာပါ — prerequisite course တစ်လျှောက်လုံးမှာ သင့်ကုဒ်က request ပို့ပြီး response ဖတ်တယ်လို့ ယူဆထားခဲ့တာပါ။ အခုတော့ သင့်ကုဒ်က request ကို လက်ခံပြီး acknowledge လုပ်ဖို့ response ပြန်ပို့ရပါတယ်။ Webhook လက်ခံနိုင်ဖို့ သင့် server မှာ public ကနေ ရောက်နိုင်တဲ့ URL တစ်ခု ရှိရမယ်၊ ကြိုတင် external service ဆီမှာ register လုပ်ထားရပါတယ်။
- Webhook
- Webhook ဆိုတာ HTTP callback တစ်မျိုးပါ — event တစ်ခု ဖြစ်လိုက်တာနဲ့ external service က သင့် server ဆီကို HTTP POST request ကို တိုက်ရိုက်ပို့နိုင်ဖို့ ကြိုတင် register လုပ်ထားတဲ့ URL တစ်ခုပါ၊ သင့် server ကနေ update ကို မေးနေစရာ မလိုတော့ပါဘူး။
NORMAL API CALL VS WEBHOOK
--------------------------
-----
Normal API (pull):
Your App --- asks for data ---> API Server
Your App <-------- response ---- API Server
Webhook (push):
External Service: event happens
External Service --- POST request ---> Your Server
Your Server --- 200 OK ack ---> External Service
Note: Your server now RECEIVES a request, it does not send one.လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်
ဒီသင်ခန်းစာမှာ production webhook receiver အပြည့်အစုံကို ရေးမှာ မဟုတ်ပါဘူး — အဲဒါအတွက် real server framework လိုအပ်ပါတယ် — ဒါပေမဲ့ request တစ်ခု ရောက်လာချိန်မှာ သင့် server run မယ့် logic အတိအကျကို လေ့ကျင့်ကြည့်နိုင်ပါတယ်။
အောက်က code က ဝင်လာတဲ့ webhook request တစ်ခုကို plain object အနေနဲ့ model လုပ်ထားပါတယ် — HTTP method၊ URL path၊ JSON string body ပါပဲ။ Function က method က POST ဟုတ်မဟုတ် စစ်ပါတယ်၊ body ကို parse လုပ်ပါတယ်၊ ဘာတွေတွေ့ရှိလဲ ပြန်ပြောပါတယ်။
Run ကြည့်ပြီး output ကို သတိထားကြည့်ပါ — တစ်ခုခုကို 'received' လို့ ပြောထားတယ်၊ 'sent' မဟုတ်ဘူး။ ဒီပြောင်းပြန်ဖြစ်မှုပဲ ဒီသင်ခန်းစာရဲ့ အနှစ်ချုပ်ပါ။
အတူတူ စမ်းရေးကြည့်မယ်
function receiveWebhookRequest(request) {
if (request.method !== "POST") {
return { accepted: false, reason: `Expected POST, got ${request.method}` };
}
const event = JSON.parse(request.body);
return {
accepted: true,
route: request.url,
eventType: event.type,
summary: `Received '${event.type}' event pushed FROM the external service TO our server`
};
}
const incomingRequest = {
method: "POST",
url: "/webhooks/payments",
body: JSON.stringify({ type: "payment.completed", id: "evt_001" })
};
console.log(receiveWebhookRequest(incomingRequest));{
accepted: true,
route: '/webhooks/payments',
eventType: 'payment.completed',
summary: "Received 'payment.completed' event pushed FROM the external service TO our server"
}၅ မိနစ် စမ်းကြည့်
receiveWebhookRequest function ကို ပြင်ပြီး body မပါဘူး ဒါမှမဟုတ် ဗလာဖြစ်နေတဲ့ request တွေကိုပါ ငြင်းပယ်အောင် ပြင်ပါ — JSON.parse မအောင်မြင်ရင် error throw မလုပ်ဘဲ ရှင်းလင်းတဲ့ အကြောင်းပြချက် string ကို ပြန်ပေးပါ။
သတိလေးတစ်ချက်
200 OK လို success response ကို မြန်မြန်မပြန်ပေးရင် provider က delivery မအောင်မြင်ဘူးလို့ ထင်ပြီး event တူတူကို ထပ်ကာထပ်ကာ retry ပို့နိုင်ပါတယ်။
Webhook URL ကို ဘယ်သူ့ကိုမှ မဖော်ပြထားလို့ private ဖြစ်နေမယ်လို့ မထင်ပါနဲ့ — ရှာတွေ့သူ ဒါမှမဟုတ် ခန့်မှန်းတွေ့သူတိုင်း ဒီ URL ကို ရောက်နိုင်ပါတယ်။
Webhook — Wikipedia — API Integration & Webhooks