Webhook হলো এমন একটি HTTP-based কলব্যাক মেকানিজম, যা কোনো নির্দিষ্ট ইভেন্ট ঘটলে স্বয়ংক্রিয়ভাবে নির্দিষ্ট URL-এ ডেটা পাঠায়। এটি API-র বিপরীতে, যেখানে ক্লায়েন্টকে বারবার চেক করতে হয় (polling)। Webhook ইভেন্ট-ড্রিভেন আর্কিটেকচারের জন্য খুবই কার্যকর।
Webhook কীভাবে কাজ করে?
১. ইভেন্ট সোর্স (যেমন: পেমেন্ট গেটওয়ে, গিটহাব) কোনো ইভেন্ট ঘটলে,
২. Webhook Endpoint-এ HTTP POST রিকোয়েস্ট পাঠায়,
৩. Endpoint সেই ডেটা প্রসেস করে, ডাটাবেজে সংরক্ষণ করে, অথবা অন্য সার্ভিসে পাঠায়।
কেন PostgreSQL ও Redis?
- PostgreSQL:
রিলেশনাল ডাটাবেজ, পারসিস্টেন্ট স্টোরেজ ও জটিল কুয়েরির জন্য। - Redis:
ইন-মেমরি ডাটাবেজ, দ্রুত ক্যাশিং ও কিউ ম্যানেজমেন্টের জন্য।
Step-by-Step Implementation
১. Webhook Endpoint তৈরি (Node.js + Express)
const express = require("express");
const bodyParser = require("body-parser");
const { Pool } = require("pg");
const Redis = require("ioredis");
const app = express();
app.use(bodyParser.json());
// PostgreSQL ও Redis কানেকশন
const pool = new Pool({ connectionString: process.env.PG_URL });
const redis = new Redis(process.env.REDIS_URL);
// Webhook Endpoint
app.post("/webhook", async (req, res) => {
const event = req.body;
// ১. ডেটা Redis-এ ক্যাশ করুন (ফাস্ট প্রসেসিং)
await redis.lpush("webhook_events", JSON.stringify(event));
// ২. ডেটা PostgreSQL-এ সংরক্ষণ করুন (পারসিস্টেন্স)
await pool.query(
"INSERT INTO webhook_events (event_type, payload, received_at) VALUES ($1, $2, NOW())",
[event.type, JSON.stringify(event.payload)]
);
res.status(200).json({ received: true });
});
app.listen(4000, () => console.log("Webhook server running on port 4000"));
২. PostgreSQL টেবিল স্কিমা
CREATE TABLE webhook_events (
id SERIAL PRIMARY KEY,
event_type VARCHAR(255),
payload JSONB,
received_at TIMESTAMP DEFAULT NOW()
);
৩. Redis কীভাবে ব্যবহার হচ্ছে?
- লিস্ট (Queue) হিসেবে:
ইভেন্ট দ্রুত প্রসেসিং বা ব্যাকগ্রাউন্ড জব-এর জন্য Redis-এ রাখা হয়। - ক্যাশিং:
সাম্প্রতিক ইভেন্ট দ্রুত দেখাতে বা ড্যাশবোর্ডে রিয়েল-টাইম আপডেট দিতে।
৪. ব্যাকগ্রাউন্ড প্রসেসিং (Worker Example)
// worker.js
const Redis = require("ioredis");
const redis = new Redis(process.env.REDIS_URL);
async function processEvents() {
while (true) {
const event = await redis.brpop("webhook_events", 0);
if (event) {
const data = JSON.parse(event[1]);
// এখানে ব্যাকগ্রাউন্ড প্রসেসিং (যেমন: ইমেইল, নোটিফিকেশন)
console.log("Processing event:", data);
}
}
}
processEvents();
ডায়াগ্রাম: Webhook আর্কিটেকচার
বেস্ট প্র্যাকটিস
- ডেটা ভ্যালিডেশন: Webhook ডেটা অবশ্যই যাচাই করুন।
- রেট লিমিটিং: একাধিক রিকোয়েস্ট থেকে সার্ভার বাঁচাতে।
- রিট্রাই মেকানিজম: ফেইল হলে পুনরায় প্রসেস করার ব্যবস্থা।
- লগিং ও মনিটরিং: ইভেন্ট প্রসেসিং ট্র্যাক করুন।
উপসংহার
Node.js-এ Webhook ইমপ্লিমেন্টেশন সহজ, তবে স্কেলেবল ও রিলায়েবল সিস্টেমের জন্য PostgreSQL ও Redis-এর মতো টুল ব্যবহার করা জরুরি। এই আর্কিটেকচারে আপনি দ্রুত, রিয়েল-টাইম ও পারসিস্টেন্ট ইভেন্ট প্রসেসিং