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

Backend2026-10-24TryQuickToolBox

আপনি একটি API তৈরি করেছেন এবং এখন ইভেন্ট ঘটলে অন্যান্য পরিষেবাগুলিকে অবহিত করতে চান। আপনি একটি ওয়েবহুক এন্ডপয়েন্ট সেট আপ করেছেন, কিন্তু শীঘ্রই বুঝতে পারবেন যে HTTP অনুরোধগুলি নির্ভরযোগ্যভাবে ডেলিভার করা দেখতে যতটা সহজ মনে হয় ততটা নয়। নেটওয়ার্ক ব্যর্থতা, দূষিত অভিনেতা এবং ডুপ্লিকেট ইভেন্ট বিশৃঙ্খলা সৃষ্টি করতে পারে। এই গাইডটি ব্যাখ্যা করে কীভাবে সাইনড পেলোড এবং পুনঃপ্রচেষ্টা সহ ওয়েবহুক প্রয়োগ করবেন যাতে আপনি একটি শক্তিশালী ইন্টিগ্রেশন তৈরি করতে পারেন।

ওয়েবহুক কী?

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

উদাহরণস্বরূপ, একটি পেমেন্ট প্রসেসর চার্জ সফল হলে আপনার অ্যাপে একটি ওয়েবহুক পাঠাতে পারে। আপনার অ্যাপ তখন অবিলম্বে অর্ডার স্ট্যাটাস আপডেট করতে পারে।

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

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

সাইনিং সাধারণত প্রেরক এবং প্রাপকের মধ্যে ভাগ করা একটি গোপন কী ব্যবহার করে। প্রেরক পেলোডের উপর একটি হ্যাশ-ভিত্তিক মেসেজ অথেন্টিকেশন কোড (HMAC) গণনা করে এবং এটি একটি হেডারে অন্তর্ভুক্ত করে। প্রাপক HMAC পুনরায় গণনা করে এবং তুলনা করে।

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

বেশিরভাগ বাস্তবায়ন HMAC-SHA256 ব্যবহার করে। এখানে পাইথনে একটি সহজ উদাহরণ:

import hmac
import hashlib
import json

def generate_signature(payload, secret):
    body = json.dumps(payload, separators=(',', ':')).encode('utf-8')
    signature = hmac.new(secret.encode('utf-8'), body, hashlib.sha256).hexdigest()
    return signature

def verify_signature(payload, signature, secret):
    expected = generate_signature(payload, secret)
    return hmac.compare_digest(expected, signature)

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

নির্ভরযোগ্য ডেলিভারির জন্য পুনঃপ্রচেষ্টা প্রয়োগ করা

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

পুনঃপ্রচেষ্টা কৌশল

একটি সাধারণ পদ্ধতি হল ক্রমবর্ধমান বিলম্বের সাথে পুনঃপ্রচেষ্টা করা: 1 মিনিট, 5 মিনিট, 30 মিনিট, 2 ঘন্টা, ইত্যাদি। সর্বোচ্চ সংখ্যক প্রচেষ্টা (যেমন, 10) বা মোট সময় উইন্ডো (যেমন, 24 ঘন্টা) পরে থামুন।

শুধুমাত্র নির্দিষ্ট শর্তে পুনঃপ্রচেষ্টা করুন: নেটওয়ার্ক ত্রুটি, 5xx প্রতিক্রিয়া, বা 429 (অতিরিক্ত অনুরোধ)। 4xx ত্রুটিতে (429 ছাড়া) পুনঃপ্রচেষ্টা করবেন না কারণ তারা ক্লায়েন্টের ভুল নির্দেশ করে যা পুনঃপ্রচেষ্টা দ্বারা ঠিক হবে না।

উদাহরণ পুনঃপ্রচেষ্টা লজিক

এখানে requests লাইব্রেরি ব্যবহার করে পাইথনে একটি সরলীকৃত পুনঃপ্রচেষ্টা প্রক্রিয়া:

import requests
import time
from requests.exceptions import RequestException

def send_webhook(url, payload, secret, max_retries=5):
    headers = {'Content-Type': 'application/json'}
    signature = generate_signature(payload, secret)
    headers['X-Signature'] = signature
    
    for attempt in range(max_retries):
        try:
            response = requests.post(url, json=payload, headers=headers, timeout=10)
            if response.status_code < 500 and response.status_code != 429:
                return response.status_code
        except RequestException:
            pass
        
        # এক্সপোনেনশিয়াল ব্যাকঅফ সহ জিটার
        delay = (2 ** attempt) + (random.random() * 0.1)
        time.sleep(delay)
    
    return None  # পুনঃপ্রচেষ্টার পরে ব্যর্থ

প্রোডাকশনে, আপনি ব্যর্থ প্রচেষ্টাগুলি একটি সারিতে সংরক্ষণ করবেন এবং সেগুলি অ্যাসিঙ্ক্রোনাসভাবে প্রক্রিয়া করবেন। Celery বা ক্লাউড সারি (AWS SQS, Google Cloud Tasks) এর মতো সরঞ্জামগুলি সাহায্য করতে পারে।

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

ডুপ্লিকেট এবং আইডেম্পোটেন্সি পরিচালনা

পুনঃপ্রচেষ্টা ডুপ্লিকেট ডেলিভারি ঘটাতে পারে। পেলোডে একটি অনন্য ইভেন্ট আইডি অন্তর্ভুক্ত করুন এবং প্রাপক প্রক্রিয়াকৃত আইডিগুলি ট্র্যাক করুন। যদি একটি ইভেন্ট আইডি আগে দেখা হয়ে থাকে, তবে এটি উপেক্ষা করুন।

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

ওয়েবহুক পরীক্ষা করা

আপনার স্থানীয় সার্ভার প্রকাশ করতে এবং ওয়েবহুক ডেলিভারি পরীক্ষা করতে ngrok-এর মতো সরঞ্জাম ব্যবহার করুন। ত্রুটি কোড ফেরত দিয়ে ব্যর্থতা অনুকরণ করুন এবং প্রত্যাশিত হিসাবে পুনঃপ্রচেষ্টা ঘটে কিনা যাচাই করুন।

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

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

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

ব্যর্থ ওয়েবহুকে কতবার পুনঃপ্রচেষ্টা করা উচিত?

এটি আপনার নির্ভরযোগ্যতার প্রয়োজনের উপর নির্ভর করে। একটি সাধারণ অনুশীলন হল 24 ঘন্টার মধ্যে এক্সপোনেনশিয়াল ব্যাকঅফ সহ 5-10 বার পুনঃপ্রচেষ্টা। সর্বদা গ্রাহকদের ম্যানুয়ালি পুনঃপ্রচেষ্টা ট্রিগার করার অনুমতি দিন।

সাইনিং ছাড়া ওয়েবহুক ব্যবহার করা যায়?

আপনি করতে পারেন, তবে এটি ঝুঁকিপূর্ণ। সাইনিং ছাড়া, যে কেউ জাল ইভেন্ট পাঠাতে পারে। প্রতারণা প্রতিরোধ করতে সর্বদা প্রোডাকশনে ওয়েবহুক সাইন করুন।

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