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

Backend2026-11-03TryQuickToolBox

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

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

ওয়েবহুক কী?

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

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

নিরাপত্তা সমস্যা: কেন সিগনেচার যাচাই করবেন?

ওয়েবহুক এন্ডপয়েন্টগুলি publicly accessible URL। যে কেউ তাদের কাছে POST অনুরোধ পাঠাতে পারে। যাচাই ছাড়া, একজন আক্রমণকারী একটি অনুরোধ জাল করতে পারে, যেমন, প্রকৃত পেমেন্ট ছাড়াই একটি অর্ডার পরিশোধিত হিসেবে চিহ্নিত করা। এটি প্রতিরোধ করতে, প্রোভাইডাররা একটি সিক্রেট কী দিয়ে প্রতিটি পেলোড সাইন করে।

HMAC সিগনেচার কীভাবে কাজ করে

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

এখানে পাইথনে একটি সহজ উদাহরণ:

import hmac
import hashlib

def verify_signature(payload, secret, signature):
    expected = hmac.new(secret.encode(), payload, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, signature)

টাইমিং আক্রমণ এড়াতে সর্বদা hmac.compare_digest এর মতো একটি ধ্রুবক-সময় তুলনা ফাংশন ব্যবহার করুন।

এড়ানো উচিত সাধারণ ভুলগুলি

নির্ভরযোগ্য রিট্রাই ডিজাইন করা

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

রিট্রাই সাধারণত কীভাবে কাজ করে

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

আপনার এন্ডপয়েন্টের প্রাপ্তি স্বীকার করতে দ্রুত একটি 2xx স্ট্যাটাস কোড দিয়ে সাড়া দেওয়া উচিত। যদি আপনি একটি নন-2xx কোড ফেরত দেন বা টাইম আউট হয়, প্রোভাইডার রিট্রাই করবে।

আইডেম্পোটেন্সি implement করা

যেহেতু রিট্রাই ডুপ্লিকেট ডেলিভারি ঘটাতে পারে, আপনার এন্ডপয়েন্ট অবশ্যই আইডেম্পোটেন্ট হতে হবে। প্রসেস করা ইভেন্ট ট্র্যাক করতে ইভেন্ট আইডি (পেলোড বা হেডারে অন্তর্ভুক্ত) ব্যবহার করুন। প্রসেস করার আগে, চেক করুন আপনি ইতিমধ্যে সেই আইডি হ্যান্ডেল করেছেন কিনা। প্রসেস করা আইডিগুলি TTL সহ একটি ডেটাবেসে সংরক্ষণ করুন।

উদাহরণ আইডেম্পোটেন্সি চেক:

def process_event(event_id, data):
    if db.exists(f"processed:{event_id}"):
        return  # already processed
    # process data
    db.setex(f"processed:{event_id}", 86400, "1")  # expire after 24h

একটি ওয়েবহুক রিসিভার তৈরি করা: ধাপে ধাপে

  1. একটি HTTPS এন্ডপয়েন্ট প্রকাশ করুন: ট্রানজিটে ডেটা সুরক্ষিত করতে TLS ব্যবহার করুন।
  2. সিগনেচার যাচাই করুন: অবৈধ সিগনেচার সহ অনুরোধ 401 দিয়ে প্রত্যাখ্যান করুন।
  3. টাইমস্ট্যাম্প চেক করুন: যদি প্রদান করা হয়, নিশ্চিত করুন এটি একটি গ্রহণযোগ্য উইন্ডোর মধ্যে (যেমন, 5 মিনিট)।
  4. পেলোড পার্স করুন: JSON স্ট্রাকচার এবং প্রয়োজনীয় ফিল্ড যাচাই করুন।
  5. আইডেম্পোটেন্সি চেক করুন: ডুপ্লিকেট এড়াতে ইভেন্ট আইডি ব্যবহার করুন।
  6. অ্যাসিঙ্ক্রোনাসভাবে প্রসেস করুন: অবিলম্বে 200 দিয়ে সাড়া দিন, তারপর টাইমআউট এড়াতে ব্যাকগ্রাউন্ড জবে প্রসেস করুন।
  7. লগ এবং মনিটর করুন: ব্যর্থতা রেকর্ড করুন এবং অ্যালার্ট সেট আপ করুন।

স্থানীয়ভাবে ওয়েবহুক পরীক্ষা করা

বিকাশের সময়, আপনার স্থানীয় মেশিনে ওয়েবহুক পাওয়ার একটি উপায় প্রয়োজন। ngrok বা localtunnel এর মতো টুল একটি পাবলিক URL তৈরি করে যা আপনার localhost-এ ফরওয়ার্ড করে। বিকল্পভাবে, অনেক প্রোভাইডার টেস্ট ইভেন্ট ট্রিগার করার জন্য একটি CLI অফার করে।

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

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

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

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

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

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

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

বেশিরভাগ প্রোভাইডার এক্সপোনেনশিয়াল ব্যাকঅফ সহ 5-10 বার রিট্রাই করে। সঠিক সংখ্যা প্রোভাইডারের নীতির উপর নির্ভর করে। ডুপ্লিকেট হ্যান্ডেল করতে আপনার এন্ডপয়েন্ট আইডেম্পোটেন্ট হওয়া উচিত।

আমার ওয়েবহুক কী HTTP স্ট্যাটাস কোড ফেরত দেবে?

সফল প্রাপ্তি স্বীকার করতে একটি 2xx স্ট্যাটাস কোড (যেমন, 200 OK) ফেরত দিন। অন্য যেকোনো কোড (4xx বা 5xx) ব্যর্থতা সংকেত দেয় এবং রিট্রাই ট্রিগার করে।

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