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

Backend2026-10-07TryQuickToolBox

কেন ওয়েবহুকস শক্তিশালী এবং ভঙ্গুর উভয়ই

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

ওয়েবহুক কী?

ওয়েবহুক হলো একটি HTTP POST রিকোয়েস্ট যা একটি ইভেন্ট ঘটলে প্রদানকারী দ্বারা গ্রাহকের কাছে পাঠানো হয়। পোলিংয়ের বিপরীতে, ওয়েবহুকস প্রায় রিয়েল-টাইমে ডেটা পুশ করে, লেটেন্সি এবং সার্ভার লোড কমায়। প্রদানকারীকে অবশ্যই নিশ্চিত করতে হবে যে রিকোয়েস্টটি প্রামাণিক; গ্রাহককে অবশ্যই এটি নির্ভরযোগ্যভাবে প্রক্রিয়া করতে হবে।

সাইনড পেলোড দিয়ে ওয়েবহুকস সুরক্ষিত করা

সাইনড পেলোড একটি গোপন কী ব্যবহার করে রিকোয়েস্ট বডির একটি ক্রিপ্টোগ্রাফিক সিগনেচার (সাধারণত HMAC-SHA256) তৈরি করে। রিসিভার সিগনেচারটি পুনরায় গণনা করে এবং হেডারে থাকা সিগনেচারের সাথে তুলনা করে। যদি তারা মিলে যায়, পেলোডটি প্রামাণিক এবং পরিবর্তনহীন।

কীভাবে সিগনেচার তৈরি এবং যাচাই করবেন

এখানে একটি সাধারণ প্রবাহ:

  1. প্রদানকারী এবং গ্রাহক একটি গোপন কী শেয়ার করে (যেমন, ড্যাশবোর্ডের মাধ্যমে)।
  2. প্রদানকারী HMAC-SHA256(secret, payload) গণনা করে এবং X-Signature এর মতো হেডারে পাঠায়।
  3. গ্রাহক কাঁচা বডি পড়ে, একই HMAC গণনা করে এবং একটি ধ্রুবক-সময় ফাংশন ব্যবহার করে তুলনা করে।

Node.js-এ উদাহরণ:

const crypto = require('crypto');

function verifySignature(secret, payload, signature) {
  const hmac = crypto.createHmac('sha256', secret);
  hmac.update(payload);
  const digest = hmac.digest('hex');
  return crypto.timingSafeEqual(Buffer.from(digest), Buffer.from(signature));
}

টাইমিং অ্যাটাক প্রতিরোধ করতে সর্বদা ধ্রুবক-সময় তুলনা ব্যবহার করুন। যাচাইয়ের আগে কখনও বডি পার্স করবেন না—কাঁচা বডি মিডলওয়্যার ব্যবহার করুন।

নির্ভরযোগ্য ডেলিভারির জন্য রিট্রাই বাস্তবায়ন

সিগনেচার থাকা সত্ত্বেও, নেটওয়ার্ক ব্যর্থতা বা সাময়িক বিভ্রাট ওয়েবহুক ডেলিভারি ব্যর্থ করতে পারে। একটি দৃঢ় রিট্রাই মেকানিজম চূড়ান্ত ডেলিভারি নিশ্চিত করে।

রিট্রাই কৌশল

Python-এ উদাহরণ রিট্রাই লজিক:

import time
import requests

def send_webhook(url, payload, max_retries=5):
    for attempt in range(max_retries):
        try:
            response = requests.post(url, json=payload, timeout=5)
            if response.status_code == 200:
                return True
        except requests.RequestException:
            pass
        time.sleep(2 ** attempt)  # exponential backoff
    return False

ওয়েবহুক গ্রাহকদের জন্য সেরা অনুশীলন

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

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

সাধারণ প্রশ্ন

সাইনড ওয়েবহুক পেলোড কী?

একটি সাইনড পেলোডে একটি ক্রিপ্টোগ্রাফিক সিগনেচার (যেমন, HMAC) থাকে যা রিসিভারকে যাচাই করতে দেয় যে অনুরোধটি একটি বিশ্বস্ত উৎস থেকে এসেছে এবং টেম্পার করা হয়নি।

একটি ব্যর্থ ওয়েবহুক কতবার রিট্রাই করা উচিত?

কোনও সর্বজনীন সংখ্যা নেই, তবে এক্সপোনেনশিয়াল ব্যাকঅফের সাথে 3–5 বার প্রচেষ্টা সাধারণ। এর পরে, ম্যানুয়াল পর্যালোচনার জন্য ইভেন্ট লগ করুন।

ওয়েবহুক সিগনেচারের জন্য HMAC-এর পরিবর্তে JWT ব্যবহার করতে পারি?

হ্যাঁ, কিছু প্রদানকারী JWT ব্যবহার করে। নীতিটি একই: পেলোড বিশ্বাস করার আগে টোকেনের সিগনেচার এবং ক্লেইম যাচাই করুন।

ওয়েবহুক পেলোড বা লগ পরিদর্শন করতে হবে? JSON পেলোড দ্রুত সুন্দরভাবে প্রিন্ট এবং যাচাই করতে আমাদের JSON Formatter ব্যবহার করে দেখুন।