ما هو الـ webhook؟
الـ webhook طلب HTTP ترسله خدمة ما إلى عنوان تسجّله عندما يحدث شيء — تسوية دفعة، أو تسليم رسالة، أو انتهاء بناء — فيتفاعل نظامك مع الأحداث بدلاً من الاستطلاع المتكرر. اختباره يعني التقاط ما يُرسَل فعلياً (الأسلوب والترويسات والجسم)، وفحص إعادة المحاولة والترتيب، والتحقق من التوقيع الذي يثبت أن النداء جاء من المرسِل.
ملاحظة أمنية: نقطة نهاية الـ webhook عنوان عام يمكن لأي شخص الإرسال إليه. تحقق من توقيع المرسِل (عادةً HMAC على الجسم الخام) بمقارنة ثابتة الزمن، وارفض الطوابع الزمنية القديمة، وتعامل مع الحمولة كمدخل غير موثوق.
اقرأ الدليل: ما هو اختبار API؟ وكيف تختبر REST API
كيفية استخدام منسّق حمولات Webhook
- الصق جسم webhook (وترويسات الطلب إن كانت لديك).
- تُنسَّق الحمولة فوراً؛ اقرأ النظرة العامة وجدول الحقول المهمة.
- استخدم جدول الطوابع الزمنية للتحقق من أوقات الأحداث، والشجرة للتنقل في الحمولات الكبيرة.
مزايا منسّق حمولات Webhook
- ينسّق JSON، ويفكّ ترميز الأجسام المرمّزة كنماذج، ويحافظ على XML مقروءاً
- يكتشف المزوّد ونوع الحدث من الجسم والترويسات الاختيارية
- يبرز المعرّفات وأنواع الأحداث والحالات والمبالغ والعملات وعناوين البريد الإلكتروني وعناوين URL
- يحوّل طوابع Unix الزمنية (بالثواني/الملّي ثانية) وطوابع ISO مع الوقت النسبي
- عرض شجري، وترتيب اختياري للمفاتيح، وإحصاءات الحجم، وتنسيق فوري
مثال على منسّق حمولات Webhook
حدث payment_intent.succeeded من Stripe
الإدخال:
{"id":"evt_1PZx…","type":"payment_intent.succeeded","created":1725184800,"data":{"object":{"amount":19900,"currency":"sar","status":"succeeded"}}}النتيجة:
Provider: Stripe · Event: payment_intent.succeeded · Event id: evt_1PZx…
$.data.object.amount amount 19900 199.00 if the value is in minor units
$.created timestamp 1725184800 → 2024-09-01T10:40:00.000Z (about a year ago)الأسئلة الشائعة حول منسّق حمولات Webhook
ما الذي يُبرَز؟
أنواع الأحداث والمعرّفات والحالات والمبالغ (مع تلميح إلى الوحدات الصغرى) والعملات والطوابع الزمنية (محوّلة إلى ISO 8601 ووقت نسبي) وعناوين البريد الإلكتروني والأسماء والمراجع وعناوين URL. وتُحجب القيم التي تبدو أسراراً في الجدول.
هل يتعامل مع طلبات webhook المرمّزة كنماذج؟
نعم — تُفكّ أجسام application/x-www-form-urlencoded على طريقة Twilio إلى JSON قبل التنسيق.
هل يكتشف المزوّد من الجسم وحده؟
غالباً: لأحداث Stripe وحمولات GitHub وGitLab وPayPal وSlack وShopify وTwilio أشكال يمكن التعرّف عليها. وإضافة ترويسات الطلب تجعل الاكتشاف موثوقاً.
هل تُرفع حمولتي؟
لا — يجري التنسيق والاكتشاف محلياً في متصفحك.
المراجع
- RFC 9421: HTTP Message Signaturesطريقة قياسية لتوقيع رسائل HTTP بحيث يتحقق المستلم من مصدرها وسلامتها — أساس توقيعات webhook الحديثة.
- RFC 2104: HMAC: Keyed-Hashing for Message Authenticationبناء HMAC: كيف يُنتج مفتاح سري ودالة تجزئة رمز مصادقة للرسالة.
- OWASP Cheat Sheet Series: REST Securityالقواعد الأمنية لواجهات REST: HTTPS، والتوثيق في كل طلب، والتحقق من المدخلات، واستجابات الخطأ الآمنة، وتحديد المعدل.