محتويات الدورة

اختبار API / متوسط: عقود متفاعلة / الدرس 10

اختبار إعادة المحاولة ومنع التكرار

نمذجة النتائج غير المحسومة ومفاتيح الإعادة المقيدة وقرارات المحاولة المحدودة دون إرسال طلبات.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • التمييز بين نتيجة غير معروفة وعملية معلومة الفشل.
  • اختبار سياسة إعادة خيالية للمفتاح نفسه وحمولة مختلفة.

البدء بالنتيجة غير المحسومة

تعني المهلة أن المستدعي لم يستقبل نتيجة قبل الموعد، ولا تثبت أن الخادم لم ينفذ عملا. إذا اكتمل إنشاء المدخل وضاعت الاستجابة فقد تنشئ محاولة غير منسقة مدخلا آخر. افصل الفشل قبل الإرسال والرفض المعلوم والفشل بعد الإرسال بنتيجة مجهولة. يحتاج العميل إلى استراتيجية تعاف موثقة لكل فئة. تخلط إعادة كل خطأ هذه الحالات وقد تضاعف إجراءات العمل وضغط التبعيات.

تحديد سياسة الإعادة كاملة

يحتاج مفتاح الإعادة إلى نطاق وربط بالحمولة ومدة احتفاظ وسلوك تعارض. تقيد السياسة الخيالية المفتاح بمستدع موثوق وعملية، وتعيد النتيجة المخزنة للحمولة نفسها، وترفض الحمولة المختلفة. لا تدعي ترويسة معيارية عامة أو تنفيذا إنتاجيا. يوضح البرنامج ثلاث حالات في الذاكرة. في الخدمة الحقيقية يلزم التخزين الذري ومعالجة التزامن؛ فقد يسمح فحص ثم إدراج منفصل لعاملين بتنفيذ الإجراء نفسه.

python سياسة إعادة خيالية داخل عملية واحدة
saved = {}
def create(scope, key, book):
    slot = (scope, key)
    if slot in saved:
        old_book, result = saved[slot]
        return result if old_book == book else "KEY_PAYLOAD_CONFLICT"
    result = {"id": "entry-" + str(len(saved) + 1), "book": book}
    saved[slot] = (book, result)
    return result

first = create("reader-a:add", "lab-key-1", "book-4")
assert create("reader-a:add", "lab-key-1", "book-4") == first
assert create("reader-a:add", "lab-key-1", "book-5") == "KEY_PAYLOAD_CONFLICT"
assert len(saved) == 1
print("replay policy checked")
الناتج المتوقع
replay policy checked

يفحص البرنامج الكامل الإعادة وتعارض الحمولة بقيم مختلقة. المفتاح علامة تدريب عامة وليس اعتمادا. لا يوجد تخزين دائم أو قفل أو انتهاء أو ترويسة HTTP أو ضمان عبر العمليات.

تقييد المحاولات بالنتيجة والأمان

يعتمد قرار المحاولة على دلالة العملية ومعرفة النتيجة وآلية الإعادة والميزانية المتبقية. لا يتحسن خطأ المدخل بالانتظار. وقد يعاد فشل تبعية عابر إذا أمكن تكرار العملية بأمان وسمح الموعد. البرنامج الثاني جدول قرار بحد للمحاولات وليس عميل شبكة، ولا ينام أو يعالج حالات حقيقية. يجب أن يفسر العميل فئات الخطأ وإرشادات المحاولة والإلغاء والمواعيد الخاصة بالعملية بدلا من تعميم سياسة التدريب.

python نموذج محلي محدود لقرار المحاولة
def retry(category, repeat_safe, attempt):
    return category == "transient" and repeat_safe is True and attempt < 3

assert retry("transient", True, 1) is True
assert retry("input", True, 1) is False
assert retry("transient", False, 1) is False
assert retry("transient", True, 3) is False
print("four retry decisions checked")
الناتج المتوقع
four retry decisions checked

يتحقق البرنامج الكامل من أربعة قرارات معلنة دون تأخير أو طلب أو توليد حمل. الرقم ثلاثة حد توضيحي للسياسة وليس عددا موصى به لكل الأنظمة.

اختبار حالات دورة الحياة الصعبة

أدرج التسليم المكرر قبل الاكتمال وبعده والمفتاح نفسه تحت مستدع آخر وانتهاء الاحتفاظ واختلاف الحمولة. حدد هل يعيد الطلب الجاري حالة تقدم أو ينتظر بحد أو يرفض وفق العقد. وحدد أيضا هل تحفظ نتائج الفشل. قد تحتوي الاستجابة المحفوظة معلومات خاصة، لذا يهم النطاق والإفصاح. استخدم تداخلات محلية مضبوطة أو بيانات تكامل مؤقتة معتمدة، ولا تكرر الطلبات على خدمة مهيأة لمجرد الاستكشاف.

عد آثار العمل بصورة مستقلة

يجمع دليل الإعادة القوي النتيجة المعادة وعدد آثار العمل المعتمدة. لا يكفي استقبال المعرف نفسه مرتين إذا حدث إشعاران أو حجزان. التقط الحالة والأحداث المهمة وافصل المحاولات عن الإجراءات المعتمدة وسجل نقطة الانقطاع التي سببت الإعادة. يفيد نموذج قاموس محلي في منطق السياسة لكنه لا يثبت التنفيذ الموزع مرة واحدة تماما. استخدم وصفا دقيقا لمنع التكرار والحدود المتحققة وسلوك فشل التخزين أو المستهلك اللاحق.

الأخطاء الشائعة وإصلاحها

تعتبر المهلة دليلا على غياب التعديل

لماذا يحدث؟
يخلط المستدعي غياب الاستجابة بالحالة المعلومة.
كيف تصلحه؟
استخدم المصالحة أو الإعادة المقيدة الموثقة.
كيف تتجنب تكراره؟
افصل ضياع الاستجابة عن الفشل قبل الإرسال.

يقبل المفتاح المعاد كتابا مختلفا بصمت

لماذا يحدث؟
لا يربط مخزن الإعادة المفتاح بالحمولة.
كيف تصلحه؟
قارن هوية الحمولة الموثقة وأعد تعارضا.
كيف تتجنب تكراره؟
أدرج حالات تغير الحمولة مع المفتاح نفسه.

تستمر المحاولات بعد الموعد

لماذا يحدث؟
لا ينسق عدد المحاولات والميزانية الزمنية.
كيف تصلحه؟
توقف وفق موعد العملية وسياسة الإلغاء.
كيف تتجنب تكراره؟
اجعل ميزانيات المحاولة صريحة وقابلة للرصد.

اختبر فهمك

1. لوحظت استجابتان متطابقتان بعد الإعادة. ماذا يفحص أيضا؟

اعرض الحل المشروح

افحص حدوث المدخل والآثار اللاحقة حسب العقد فقط. قد يخفي تطابق الأجسام اعتمادا مكررا. سجل نطاق المستدعي وربط الحمولة والاحتفاظ ليخص الدليل سياسة محددة لا كل محاولة ممكنة.

2. هل يعاد طلب حجم صفحة غير صالح ثلاث مرات؟

اعرض الحل المشروح

لا وفق السياسة المعلنة. تحتاج فئة المدخل إلى تصحيح المستدعي لا تأخير. افحص رفض مصنف المحاولة وأن يعرض العميل خطأ مفيدا. يجب أن تستند الفئة العابرة إلى دليل موثق لا إلى كل فشل.

أهم ما تعلمته

  • تحتاج النتيجة المجهولة إلى مصالحة لا افتراض.
  • تحتاج مفاتيح الإعادة نطاقا وربط حمولة وقواعد حياة.
  • عد الآثار المعتمدة إلى جانب الاستجابات المتكررة.

المراجع الرسمية