هل تساءلت يومًا لماذا قد يتم خصم مبلغ مرتين، حتى في الأنظمة التي نعتبرها «موثوقة»؟ هناك مشكلة خفية في ASP.NET Core قد تجعل تطبيقاتك أقل اعتمادية مما تتخيل، خاصةً عند التعامل مع محاولات إعادة الإرسال. هذه المشكلة الصامتة يمكن أن تحوّل أنظمة .NET المرنة إلى هشة.

ماذا يعني هذا بالنسبة لك؟ عندما تبني أنظمة تتواصل عبر الشبكة، تحدث أخطاء مثل فشل المكالمات أو انتهاء المهلة. نستخدم سياسات إعادة المحاولة (مثل Polly) لجعلها قوية. ولكن إليك المشكلة: إعادة محاولة طلب 'GET' عادةً ما تكون آمنة لأنه يقرأ البيانات فقط. أما إعادة محاولة طلب 'POST' أو 'PUT' — وهي الطلبات التي تُحدِث تغييرات — فقد تكون خطيرة. إذا نجح طلب 'POST' الأول ولكن العميل لم يتلقَ التأكيد بسبب مهلة زمنية، فإن إعادة المحاولة ستشغل نفس المنطق مرة أخرى. تخيل معالجة دفعة مرتين أو إنشاء طلبات متكررة! هذه «مشكلة الحالة المزدوجة» هي قاتل صامت للموثوقية. تضمن معظم استراتيجيات إعادة المحاولة تسليمًا «مرة واحدة على الأقل»، مما يعني أنها ستعيد المحاولة إذا بدا أن الطلب قد فشل. بدون إصلاح خاص، يؤدي هذا إلى أخطاء في البيانات.

الحل ليس مجرد سياسة إعادة محاولة أكثر تعقيدًا؛ بل هو جعل طلباتك التي تغير الحالة قابلة للتكرار بأمان. المعيار الصناعي لهذا يسمى «مفتاح الثبات» (Idempotency Key).

كيف تعمل مفاتيح الثبات؟ من جانب العميل: ينشئ تطبيقك معرّفًا فريدًا (مثل GUID) للعملية التي يريد تنفيذها (مثال: 'إنشاء الطلب رقم 1234'). يتم إرسال هذا المفتاح مع طلب HTTP، غالبًا في ترويسة مثل 'Idempotency-Key'. من جانب الخادم: يتحقق نقطة نهاية ASP.NET Core أولاً مما إذا كان قد رأى «مفتاح الثبات» هذا من قبل. إذا كان مفتاحًا جديدًا، يقوم الخادم بمعالجة الطلب، وتنفيذ منطق العمل (مثل شحن البطاقة فعليًا)، وحفظ النتيجة، ثم تخزين المفتاح جنبًا إلى جنب مع تلك النتيجة لمدة محددة. إذا كان المفتاح موجودًا بالفعل، يتخطى الخادم منطق العمل فورًا ويعيد النتيجة المخزنة مسبقًا. بهذه الطريقة، حتى لو أعاد العميل المحاولة عدة مرات، فإن الإجراء يحدث مرة واحدة فقط.

بينما يمكنك بناء هذا يدويًا، من الأفضل عادةً تنفيذه كـ 'middleware' أو 'filter' في ASP.NET Core. يضمن هذا أن جميع نقاط النهاية ذات الصلة يمكنها الاستفادة بسهولة من هذه الميزة الحيوية للموثوقية دون تكرار للتعليمات البرمجية. يمكن لهذا النمط البسيط أن ينقذ أنظمتك من تلف البيانات الصامت ويُبقي مستخدميك سعداء.