ওয়েবহুক ব্যাখ্যা: সাইনড পেলোড এবং রিট্রাই

Backend2026-11-09TryQuickToolBox

আপনি সবেমাত্র একটি পেমেন্ট গেটওয়ে বা CI/CD পরিষেবা সংহত করেছেন, এবং এখন আপনাকে রিয়েল-টাইম ইভেন্ট পেতে হবে। ওয়েবহুক হলো এর আদর্শ সমাধান, তবে এর সাথে দুটি গুরুত্বপূর্ণ চ্যালেঞ্জ আসে: অনুরোধটি সত্যিই প্রেরকের কাছ থেকে এসেছে তা যাচাই করা এবং আপনার সার্ভার সাময়িকভাবে অনুপলব্ধ থাকলে ইভেন্টগুলি যেন হারিয়ে না যায় তা নিশ্চিত করা। এই নিবন্ধে ব্যাখ্যা করা হয়েছে কীভাবে সাইনড পেলোড এবং রিট্রাই মেকানিজম প্রয়োগ করে একটি শক্তিশালী ওয়েবহুক রিসিভার তৈরি করা যায়।

ওয়েবহুক কী?

ওয়েবহুক হলো একটি HTTP কলব্যাক: আপনার অ্যাপ্লিকেশন আপডেটের জন্য একটি API-তে পোলিং করার পরিবর্তে, কোনো ইভেন্ট ঘটলে পরিষেবাটি আপনার দেওয়া একটি URL-এ একটি HTTP POST অনুরোধ পাঠায়। এই পুশ মডেল লেটেন্সি এবং সার্ভার লোড কমায়। তবে, যেহেতু অনুরোধটি বাহ্যিক পরিষেবা থেকে আসে, আপনাকে এটি অবিশ্বস্ত ইনপুট হিসেবে বিবেচনা করতে হবে।

কেন পেলোড সাইন করবেন?

যাচাই ছাড়া, যে কেউ আপনার ওয়েবহুক এন্ডপয়েন্ট খুঁজে পেলে জাল ইভেন্ট পাঠাতে পারে, যা সম্ভাব্যভাবে অননুমোদিত ক্রিয়া ট্রিগার করতে পারে। একটি শেয়ার্ড সিক্রেট দিয়ে পেলোড সাইন করলে আপনি প্রেরকের পরিচয় নিশ্চিত করতে পারেন এবং পেলোডের সাথে ছদ্মবেশ হয়নি তা নিশ্চিত করতে পারেন। সবচেয়ে সাধারণ পদ্ধতি হলো SHA-256 ব্যবহার করে HMAC (হ্যাশ-ভিত্তিক মেসেজ অথেন্টিকেশন কোড)।

HMAC সাইনিং কীভাবে কাজ করে

প্রেরক একটি সিক্রেট কী ব্যবহার করে কাঁচা অনুরোধ বডির একটি HMAC ডাইজেস্ট গণনা করেন এবং এটি একটি হেডারে (যেমন, X-Signature) অন্তর্ভুক্ত করেন। আপনার সার্ভার একই সিক্রেট দিয়ে HMAC পুনরায় গণনা করে এবং প্রাপ্ত স্বাক্ষরের সাথে তুলনা করে। যদি তারা মিলে যায়, অনুরোধটি প্রামাণিক।

// Node.js উদাহরণ: একটি ওয়েবহুক স্বাক্ষর যাচাই করা
const crypto = require('crypto');

function verifySignature(payload, signature, secret) {
  const hmac = crypto.createHmac('sha256', secret);
  hmac.update(payload);
  const digest = hmac.digest('hex');
  // টাইমিং আক্রমণ প্রতিরোধ করতে timingSafeEqual ব্যবহার করুন
  return crypto.timingSafeEqual(
    Buffer.from(digest, 'hex'),
    Buffer.from(signature, 'hex')
  );
}

গুরুত্বপূর্ণ: টাইমিং পার্থক্যের মাধ্যমে তথ্য ফাঁস এড়াতে সর্বদা একটি ধ্রুবক-সময়ের তুলনা ফাংশন (যেমন timingSafeEqual) ব্যবহার করুন। এছাড়াও, কাঁচা বডির উপর HMAC গণনা করুন, পার্স করা JSON-এর উপর নয়, কারণ পুনরায় সিরিয়ালাইজ করা বাইট ক্রম পরিবর্তন করতে পারে।

রিট্রাই প্রয়োগ করা

স্বাক্ষর থাকা সত্ত্বেও, নেটওয়ার্ক সমস্যা বা সার্ভার ত্রুটির কারণে ওয়েবহুক ডেলিভারি ব্যর্থ হতে পারে। একটি নির্ভরযোগ্য প্রেরক ব্যর্থ ডেলিভারি পুনরায় চেষ্টা করবে, সাধারণত এক্সপোনেনশিয়াল ব্যাকঅফের সাথে। একজন রিসিভার হিসেবে, আপনার এন্ডপয়েন্টটি আইডেম্পোটেন্ট হওয়া উচিত এবং উপযুক্ত স্ট্যাটাস কোড ফেরত দেওয়া উচিত।

প্রেরকের দৃষ্টিকোণ থেকে রিট্রাই কৌশল

একটি আইডেম্পোটেন্ট রিসিভার ডিজাইন করা

যেহেতু রিট্রাই ডুপ্লিকেট ডেলিভারি ঘটাতে পারে, আপনার রিসিভারকে একই ইভেন্ট একাধিকবার প্রক্রিয়া করতে হবে কোনো বিরূপ প্রভাব ছাড়াই। পেলোডে (বা হেডারে) একটি অনন্য ইভেন্ট আইডি অন্তর্ভুক্ত করুন এবং প্রক্রিয়াকৃত আইডি সংরক্ষণ করুন। যদি একটি ইভেন্ট আইডি ইতিমধ্যে প্রক্রিয়া করা হয়ে থাকে, তবে পুনরায় প্রক্রিয়া না করে অবিলম্বে একটি 200 OK ফেরত দিন।

// আইডেম্পোটেন্ট ওয়েবহুক হ্যান্ডলিংয়ের সিউডোকোড
function handleWebhook(event) {
  if (processedEvents.has(event.id)) {
    return { status: 200, body: 'Already processed' };
  }
  // ইভেন্ট প্রক্রিয়া করুন...
  processedEvents.add(event.id);
  return { status: 200, body: 'Success' };
}

ওয়েবহুক সুরক্ষা এবং নির্ভরযোগ্যতার জন্য সেরা অনুশীলন

তুলনা: পোলিং বনাম ওয়েবহুক

দিকপোলিংওয়েবহুক
লেটেন্সিব্যবধানের উপর নির্ভর করেপ্রায় রিয়েল-টাইম
সার্ভার লোডউচ্চ (ঘন ঘন অনুরোধ)কম (শুধুমাত্র ইভেন্টে)
জটিলতাবাস্তবায়ন করা সহজস্বাক্ষর যাচাই এবং রিট্রাই হ্যান্ডলিং প্রয়োজন
নির্ভরযোগ্যতাআপনি রিট্রাই নিয়ন্ত্রণ করেনপ্রেরকের রিট্রাই নীতির উপর নির্ভর করে

সাধারণ জিজ্ঞাসা

আমি কীভাবে একটি ওয়েবহুক স্বাক্ষর যাচাই করব?

শেয়ার্ড সিক্রেট ব্যবহার করে কাঁচা অনুরোধ বডির একটি HMAC গণনা করুন, তারপর একটি ধ্রুবক-সময়ের তুলনা ফাংশন ব্যবহার করে হেডারে থাকা স্বাক্ষরের সাথে তুলনা করুন।

আমার ওয়েবহুক এন্ডপয়েন্ট কী ফেরত দেওয়া উচিত?

ইভেন্ট পাওয়ার সাথে সাথে একটি 2xx স্ট্যাটাস কোড (যেমন, 200 OK) ফেরত দিন। যদি আপনি 4xx বা 5xx ফেরত দেন, প্রেরক পুনরায় চেষ্টা করতে পারে বা ডেলিভারি ব্যর্থ হিসেবে চিহ্নিত করতে পারে।

আমি কি স্বাক্ষর ছাড়া ওয়েবহুক ব্যবহার করতে পারি?

এটি সুপারিশ করা হয় না। স্বাক্ষর ছাড়া, আপনি প্রেরক যাচাই করতে পারবেন না, ফলে আপনার এন্ডপয়েন্ট জাল অনুরোধের জন্য ঝুঁকিপূর্ণ হয়ে পড়ে। উৎপাদনে সর্বদা স্বাক্ষর ব্যবহার করুন।

ওয়েবহুক পেলোড ডিবাগ করার সময়, JSON ফরম্যাটিং অপরিহার্য। আগত JSON ডেটা দ্রুত সুন্দরভাবে মুদ্রণ এবং যাচাই করতে আমাদের JSON ফরম্যাটার ব্যবহার করুন।