في هذه الصفحة
يصل تحديث طلب قبل حدث إنشائه. وفي مكان آخر يصل حدث دفع قبل حدث اشتراك أقدم. هذه فرق توضيحية تستخدم منتجات ومحتويات مختلفة، وكلتاهما تميل إلى إصلاح المشكلة بترتيب التسليمات وفق وقت وصولها.
ليس هذا تقريراً عن حادثة لأي من الفريقين، بل سؤال عما إذا كان للإخفاقين شكل مشترك رغم اختلاف تفاصيل المزود.
تلاحظ محادثة مستوعبة عن الروابط الرياضية أن مشكلات تبدو مختلفة قد تشترك في شكل مفيد. تطبيق الفكرة على تكامل البرمجيات استنتاج. ولا تفيد إلا حين ينتج الشكل المشترك اختباراً يسنده السلوك الموثق لكل نظام.
احذف الأسماء ثم أعد العقود
صف الحالة الأولى دون أسماء المنتجات: قد يصل حدث عن مورد بعد تغير أحدث للمورد نفسه. إذا عامل المستقبِل ترتيب الوصول على أنه ترتيب الحالة، فقد يستبدل معلومات أحدث بأخرى أقدم.
ثم افحص العقدين الفعليين. تقول وثائق خطافات ويب Shopify إن الترتيب غير مضمون حتى داخل الموضوع الواحد، وتعطي مثالاً قد يصل فيه تحديث منتج قبل إشعار إنشائه. وتقول وثائق Stripe لخطافات ويب أيضاً إن الأحداث لا تضمن ترتيب إنشائها، وتوصي بجلب الكائنات المفقودة إذا لم يصل حدث سابق متوقع.
تحذر Shopify وStripe من أن ترتيب تسليم الأحداث غير مضمون. السؤال المشترك: هل تظل الحالة النهائية صحيحة؟ أما معرفات كل مزود وقواعد تعافيه فتحتاج إلى اختبارها.
السؤال القابل للنقل: «إذا وصل هذا الحدث قبل حدث ذي صلة، هل نستطيع اشتقاق الحالة الحالية الصحيحة؟» لا تنتقل إجابة التنفيذ بمجرد الافتراض. توثق Shopify ترويسات مثل X-Shopify-Webhook-Id والطوابع الزمنية. ولدى Stripe معرفات أحداث وقواعد جلب كائنات تخصها. المعرف الذي يعني «التسليم» في نظام قد لا يعني ذلك في آخر.
يتناول دليل موصل Brevo مجموعة أخرى من تفاصيل الحقول والربط. تهم تلك التفاصيل التكامل العامل، ولا ينبغي عدها سلوكاً عاماً لكل API.
الشكل المشترك حالة يجب الحفاظ عليها
في مزامنة العملاء، قد تكون الحالة الواجبة: بعد المعالجة، يعكس سجل العميل في الوجهة الحالة الحالية للمصدر المأذون. وفي الفوترة قد تكون: لا يحدث فعل معتمد على الدفع إلا حين تسمح به حالة الدفع الموثوقة. تسمي الحالة ما يجب أن يظل صحيحاً ولو تأخرت الأحداث أو تكررت أو نقصت.
اكتب أربعة أشياء قبل اختيار إصلاح:
| السؤال | سبب أهميته |
|---|---|
| أي هوية تسمي كائن العمل؟ | قد يسمي معرف الحدث رسالة لا عميلاً أو طلباً. |
| أي نظام يملك الحالة الحالية؟ | قد يكون المحتوى لقطة أو تغيراً أو مؤشراً فقط. |
| ما التوقيت الذي يستطيع المصدر ضمانه؟ | ترتيب التسليم قد لا يكون ترتيب الحالة. |
| أي شرط نهائي يثبت النجاح؟ | استلام الحدث لا يثبت صحة الوجهة. |
هذا الجدول وسيلة تفكير لا بروتوكول. تعتمد إجابة مصدر الحقيقة على سير العمل. قد يلزم استعلام حي في نظام ولا يلائم آخر. ويجب حفظ بعض الأحداث وقائع تاريخية لا طيها في أحدث لقطة.
أعد استخدام الاختبار وعدل العلاج
يستطيع اختبار عقد صغير إرسال أحداث مرتبطة بترتيب معكوس ثم سؤال هل ظلت حالة الوجهة النهائية صحيحة. ويمكن لآخر إرسال التسليم نفسه مرتين. تكشف الاختبارات شكل الخطر، ثم تحدد وثائق المزود كيفية تعريف كل حدث والتحقق منه والتعافي بعده.
يحمي هذا التمييز من نسخ البنية ولصقها. قد يفشل مفتاح إزالة التكرار من API في أخرى. وقد لا تثبت طوابع زمنية خشنة الترتيب. قد يلزم جلب الكائن الحالي لمزامنة حالة، لكنه لا يستطيع إعادة بناء كل حدث تاريخي وسيط. يبدأ دليل تكامل أدوات العمل بتحديد من يملك كل حقل؛ ومن دون ذلك لا معنى واضحاً لـ«الأحدث».
لنقل الأنماط حدود. قد تحمل أعراض متشابهة أسباباً مختلفة: سجل مفقود بسبب استعلام غير مأذون، أو خطاف ويب متأخر، أو ربط غير صالح، أو كتابة مرفوضة. قبل إعلان التكافؤ، قارن عقد المصدر وعقد الوجهة والشرط النهائي المرصود. إذا اختلف أحدها، فأبقِ السؤال المشترك وعدل الاختبار.
تفيد الطريقة خارج تسليم الأحداث أيضاً. حقل قبلته API لكنه غائب عن السجل المرئي يثير السؤال العام نفسه لأي موصل: ماذا يثبت الإقرار، وأي دليل يثبت الحالة المقصودة؟ قد تتطلب الإجابة قراءة الوجهة أو استعلام المخطط أو فحص الإذن. يخبر النمط الفريق بأن يفصل النقل عن المعنى، ولا يخبره أي حقل أو عملية يستدعيها. هذا الدرس الأضيق ينتقل أبعد لأنه يُبقي الحقائق المحلية ظاهرة.
أقوى درس قابل لإعادة الاستخدام ليس مقطع كود معالجة، بل سؤال يبقى صالحاً بعد الانتقال إلى نظام آخر ويجعل فحص عقده المحلي أسهل.
الأسئلة المتكررة
هل يمكن إعادة استخدام اختبار التكامل بين المزودين؟
يمكن نقل السؤال غالباً، مثل احتمال وصول التحديثات بغير ترتيب. أما معرفات الأحداث ومعنى المحتوى والتواقيع وخطوات التعافي فتؤخذ من عقد كل مزود.
ما الفرق بين النمط والإصلاح المنسوخ؟
يسمي النمط شرط الإخفاق والحالة الواجب حفظها. ويفترض الإصلاح المنسوخ دون تحقق أن للنظام الثاني المعرفات والترتيب ومعاني الحالة نفسها.
ماذا نفحص بعد تطبيق حدث؟
افحص حالة الوجهة التي يطلبها سير العمل، لا مجرد استلام الحدث أو استجابة HTTP. يعتمد الشرط النهائي على كائن العمل وقاعدة مصدر الحقيقة.