GH GambleHub

خطوط الويب وفراغ الأحداث

TL; د

خطاف الويب الجيد هو حدث موقع (HMAC/mTLS)، تم تلخيصه وتقديمه على نموذج مرة واحدة على الأقل مع التراجع الأسي والتفريغ عند المستلم. اتفق على مظروف ('event _ id'، 'type'، 'ts'،' نسخة '،' محاولة '،' توقيع ')، نافذة زمنية (≤5 دقائق)، رموز الاستجابة، عمليات إعادة التصوير، DLQ ونقطة النهاية للحالة.


1) الأدوار ونموذج التسليم

المرسل (أنت/المزود): يولد حدثًا، وعلامات، ويحاول تسليم ما يصل إلى 2xx، وإعادة السمة عند 3xx/4xx/5xx (باستثناء «لا تقبل» الصريح)، يقود DLQ، يعطي إعادة تشغيل API.
المستلم (الشريك/خدمتك): يتحقق من نافذة التوقيع/الوقت، ويقوم بالتخلص من المعالجة والخصوصية، ويستجيب بالرمز الصحيح، ويوفر/الحالة و/إعادة التشغيل بواسطة «event _ id».

الضمانات: مرة واحدة على الأقل. يجب أن يكون المتلقي قادرًا على التعامل مع النسخ المكررة وإعادة الترتيب.


2) مظروف الحدث

json
{
"event_id": "01HF7H9J9Q3E7DYT5Y6K3ZFD6M",
"type": "payout.processed",
"version": "2025-01-01",
"ts": "2025-11-03T12:34:56.789Z",
"attempt": 1,
"producer": "payments",
"tenant": "acme",
"data": {
"payout_id": "p_123",
"status": "processed",
"amount_minor": 10000,
"currency": "EUR"
}
}

الحقول المطلوبة هي «event _ id' و» type «و» version «و» ts' و «ts» و «tery».
قواعد التطور: إضافة حقول ؛ حذف/تغيير الأنواع - فقط مع «النسخة» الجديدة.


3) الأمن: التوقيعات والملزمة

3. 1 توقيع HMAC (التوصية الافتراضية)

العناوين:

X-Signature: v1=base64(hmac_sha256(<secret>, <canonical>))
X-Timestamp: 2025-11-03T12:34:56Z
X-Event-Id: 01HF7...
سلسلة قانونية:

<timestamp>\n<method>\n<path>\n<sha256(body)>
تحقق مع المستلم:
  • abs (الآن − X-Timestamp) ≤ 300
  • لم تتم معالجة "X-Event-Id' قبل (التخلص)
  • مطابقات «X-Signature» (مقارنة آمنة للوقت)

3. 2 تدابير

mTLS لخطابات الويب شديدة الحساسية.
قائمة السماح IP/ASN.
DPoP (اختياري) للمرسل المقيد إذا بدأ الخطاف الويب عمليات إعادة الاتصال.


4) الخصوصية والتفريط

4. 1 إفراط الحدث

الحدث الذي يحمل نفس «الحدث _ معرف» يجب ألا يغير الحالة مرة أخرى. المتلقي:
  • المتاجر 'event _ id' في المخبأ الأبله (KV/Redis/DB) على TTL ≥ 24-72 ساعة ؛
  • يحفظ نتيجة المعالجة (النجاح/الخطأ، القطع الأثرية) لإعادة إعادتها.

4. 2 أمر الخصوصية (إعادة الاتصال)

إذا أجبر الخطاف العميل على سحب واجهة برمجة التطبيقات (على سبيل المثال، «تأكيد الدفع»)، فاستخدم «Idempotency-Key» في مكالمة REST، وقم بتخزين النتيجة على جانب الخدمة (نتيجة مرة واحدة بالضبط).

نموذج KV (الحد الأدنى):

key: idempotency:event:01HF7...
val: { status: "ok", processed_at: "...", handler_version: "..." }
TTL: 3d

5) Retrai والتراجع

قطعة أرض موصى بها (أسية مع نفث):
  • 5، 15، 30، 1 م، 2 م، 5 م، 10 م، 30 م، 1 ساعة، 3 ساعة، 6 ساعة، 12 ساعة، 24 ساعة (ثم يوميًا حتى أيام N)
حلول الكود:
  • 2xx - النجاح، توقف عن إعادة التدوير.
4xx:
  • «400/ 401/403/404/422» - لا يمكن سحبها إذا كان التوقيع/الشكل على ما يرام (خطأ العميل).
  • «429» - retrayim بواسطة «Retry-After» أو التراجع.
  • 5xx/الشبكة - retrayim.

رؤوس المرسل: «User-Agent»، «X-Webhook-Producer»، «X-Fetture».


6) المعالجة الجانبية لجهاز الاستقبال

خط أنابيب زائف:
pseudo verify_signature()
if abs(now - X-Timestamp) > 300s: return 401

if seen(event_id):
return 200 // идемпотентный ответ

begin transaction if seen(event_id): commit; return 200 handle(data)       // доменная логика mark_seen(event_id)    // запись в KV/DB commit return 200

المعاملات: يجب تعيين الملصق «المرئي» ذريًا مع تأثير العملية (أو بعد تثبيت النتيجة) لتجنب المعالجة المزدوجة عند الفشل.


7) ضمانات النظام واللقطات

النظام غير مضمون. استخدام 'ts' و' seq '/' نسخة 'في' البيانات 'للتحقق من الأهمية.
للتأخيرات/الخسائر الطويلة - أضف/أعد التشغيل عند المرسل و/resync عند جهاز الاستقبال (احصل على لقطة ودلتا في نافذة الوقت/الهوية).


8) الحالة والإعادة و DLQ

8. 1 نقاط نهاية المرسل

«POST/webhooks/replay» - حسب قائمة «event _ id» أو حسب نافذة الوقت.
«احصل على/خطابات الويب/الأحداث/: معرف» - أظهر حزمة المصدر وتاريخ المحاولات.
DLQ: أحداث «ميتة» (تم استنفاد حد إعادة الدفع) → تخزين منفصل، تنبيهات.

8. 2 نقاط نهاية المستلم

"GET/ webhooks/status/:event_id' -" seen = true/fall'، "processed _ at'،" handler _ version ".
«POST/webhooks/ack» - تأكيد (اختياري) للمعالجة اليدوية من DLQ.


9) عقود الخطأ (استجابة المتلقي)

http
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
Retry-After: 120
X-Trace-Id: 4e3f...

{
"error": "invalid_state",
"error_description": "payout not found",
"trace_id": "4e3f..."
}

التوصيات: إرجاع رمز واضح دائمًا، وإذا أمكن، «إعادة المحاولة بعد». لا تعيد التفاصيل الأمنية المفصلة.


10) الرصد و SLO

المقاييس (المرسل):
  • التسليم p50/p95، معدل النجاح، إعادة/حدث، معدل الانخفاض DLQ، المشاركة 2xx/4xx/5xx، نافذة التأخير حتى 2xx.
المقاييس (المتلقي):
  • التحقق من معدل الفشل (توقيع/وقت)، معدل الندبة، معالج الكمون p95، 5xx.
معايير SLO:
  • التسليم: ≥ 99. 9٪ من الأحداث تتلقى 2xx <3 c p95 (بعد المحاولة الأولى الناجحة).
  • التحقق بالتشفير: التحقق من صحة التوقيع ≤ 2-5 ms p95.
  • Dedup: 0 تأثيرات متكررة (نتيجة مرة واحدة بالضبط على مستوى المجال).

11) أمن البيانات وخصوصيتها

لا ترسل PAN/PII في متن الويب ؛ استخدم معرفات ثم اسحب للحصول على تفاصيل مقابل واجهة برمجة التطبيقات المصرح بها.
قناع الحقول الحساسة في جذوع الأشجار ؛ تخزين هيئات الأحداث إلى الحد الأدنى فقط، مع TTL.
قم بتشفير متاجر DLQ وإعادة تشغيلها.


12) الحرث والتوافق

النسخة في 'نسخة' (ظرف) وعبر: '/webhooks/v1/payments'.
والميادين الجديدة اختيارية ؛ الإزالة - فقط بعد فترة «الغروب».
قم بتوثيق التغييرات في سجل التغيير القابل للقراءة آليًا (للفحص التلقائي).


13) حالات الاختبار (قائمة مراجعة UAT)

  • إعادة تقديم نفس «الحدث _ معرف» → تأثير واحد و «200» إلى مكرر.
  • التوقيع: المفتاح الصحيح، المفتاح غير الصحيح، المفتاح القديم (الدوران)، «X-Timestamp» من النافذة.
  • التراجع: يعطي المستلم «429» مع «Retry-After» → وقفة صحيحة.
  • الأمر: الأحداث "... «تعال قبل»... أنشأت → المعالجة/الانتظار الصحيحة.
  • فشل قاعدة البيانات في المتلقي بين التأثير و «علامة _ رؤية» → ذرية/تكرار.
  • DLQ وإعادة التشغيل اليدوي → التسليم الناجح.
  • «عاصفة» جماعية (يرسل المزود عبوات) → دون خسارة، لا تخنق الحدود الحرجة.

14) مقتطفات صغيرة

توقيع المرسل (زائف):
pseudo body = json(event)
canonical = ts + "\n" + "POST" + "\n" + path + "\n" + sha256(body)
sig = base64(hmac_sha256(secret, canonical))
headers = {"X-Timestamp": ts, "X-Event-Id": event.event_id, "X-Signature": "v1="+sig}
POST(url, body, headers)
التحقق والوجهة (زائف):
pseudo assert abs(now - X-Timestamp) <= 300 assert timingSafeEqual(hmac(secret, canonical), sig)

if kv.exists("idemp:"+event_id): return 200

begin tx if kv.exists("idemp:"+event_id): commit; return 200 handle(event.data)        // доменная логика kv.set("idemp:"+event_id, "ok", ttl=259200)
commit return 200

15) الأخطاء المتكررة

لا تفريغ → التأثيرات المتكررة (الردود/المدفوعات المزدوجة).
التوقيع بدون طابع زمني/نافذة → ثغرة إعادة التشغيل.
تخزين سر HMAC واحد على جميع الشركاء.
الردود '200' قبل إصلاح النتيجة → فقدان أحداث الاصطدام.
«غسل» تفاصيل الأمان في الإجابات/السجلات.
عدم وجود DLQ/إعادة التشغيل - الحوادث غير قابلة للحل.


16) ورقة غش التنفيذ

الأمان: HMAC v1 + 'X-Timestamp' + 'X-Event-Id'، نافذة ≤ 5 دقائق ؛ قائمة السماح mTLS/IP حسب الاقتضاء.
Конверт: 'event _ id', 'type', 'version', 'ts', 'tery', 'data'.
التسليم: مرة واحدة على الأقل، التراجع مع jitter، «Retry-After»، DLQ + إعادة تشغيل API.
الخصوصية: KV-cache 24-72 h، تثبيت ذري للتأثير + 'mark _ seen'.
إمكانية الرصد: التسليم والتوقيع والمقاييس المزدوجة ؛ trace _ id.
الوثائق: النسخة، ورموز الاستجابة، والأمثلة، والقائمة المرجعية للغلاف الجوي الموحد.


ملخص السيرة الذاتية

تم بناء خطافات الويب المستمرة على ثلاثة حيتان: مظروف موقع، وتسليم مرة واحدة على الأقل ومعالجة غبية. إضفاء الطابع الرسمي على العقد، وتمكين HMAC/mTLS ونافذة الوقت، وتنفيذ retrai + DLQ وإعادة التشغيل، وتخزين الملصقات الخفية والتقاط التأثيرات ذريًا. ثم تظل الأحداث موثوقة حتى مع فشل الشبكة وقمم التحميل و «تكرارات القدر» النادرة.

Contact

اتصل بنا

تواصل معنا لأي أسئلة أو دعم.نحن دائمًا جاهزون لمساعدتكم!

بدء التكامل

البريد الإلكتروني — إلزامي. تيليغرام أو واتساب — اختياري.

اسمك اختياري
البريد الإلكتروني اختياري
الموضوع اختياري
الرسالة اختياري
Telegram اختياري
@
إذا ذكرت تيليغرام — سنرد عليك هناك أيضًا بالإضافة إلى البريد الإلكتروني.
WhatsApp اختياري
الصيغة: رمز الدولة + الرقم (مثال: +971XXXXXXXXX).

بالنقر على الزر، فإنك توافق على معالجة بياناتك.