النشرة الأسبوعية
📬 نشرة المخبر الأسبوعية: خلاصة التقنية في خمس دقائق، كل أحد صباحاً.انضم مجاناً
سؤال مقابلة عمل

سؤال انترفيو: كيف تضمن عدم تكرار الدفع الإلكتروني؟

هل تساءلت يوماً ماذا يحدث لو ضغطت زر الدفع مرتين عن طريق الخطأ؟ تعرف على مفهوم Idempotency وكيف يحمي معاملاتك المالية.

· 2 دقائق قراءة · المخبر المعلوماتي

المشكلة: الدفع المتكرر عن غير قصد

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

هذا سيناريو شائع ومحبط للكثيرين. لكنه أيضاً سؤال شائع في مقابلات العمل المتقدمة، فهو يكشف عن طريقة تفكيرك كمهندس برمجيات. فكيف يمكننا منع هذه المشكلة؟

لماذا الحلول البسيطة قد لا تكفي؟

الكثيرون يقترحون حلًا بسيطًا: التحقق من قاعدة البيانات لمعرفة ما إذا كانت الدفعة قد تمت بالفعل. لكن، هل هذا كافٍ حقًا؟

تخيل أن عملية التحديث (Refresh) حدثت في اللحظة نفسها التي كانت فيها الدفعة الأولى قيد التسجيل. أو أن الاتصال عاد بعد تأخير بسيط. قد تكون الدفعة الأولى لم تكتمل بعد، أو أن واجهة برمجة التطبيقات (API) الخاصة بالدفع أعادت خطأ مؤقتًا. في هذه الحالات، لن يكون التحقق البسيط دقيقًا بما يكفي، وقد يتم الخصم منك مرتين.

الحل الجذري: مفتاح Idempotency

هنا يأتي دور مفهوم Idempotency، وهو يعني أن العملية مهما تكررت، فإن النتيجة النهائية تكون واحدة. لضمان ذلك، نستخدم ما يسمى بـ 'مفتاح Idempotency'.

هذا المفتاح هو معرّف فريد، مثل UUID، ترسله مع كل طلب دفع. عندما يستقبل نظام الواجهة الخلفية (Backend) هذا المفتاح، يتحقق مما إذا كان قد استُخدم سابقًا لدفع ناجح. إذا وجده، فإنه يعيد لك نفس نتيجة الدفعة الأولى، دون إجراء أي خصم جديد. هذا أشبه بقولك لواجهة برمجة التطبيقات: 'إذا كنت قد نفذت هذه العملية من قبل، فقط أعطني النتيجة السابقة'.

تطبيق Idempotency على مستويات مختلفة

لضمان حماية كاملة، يتم تطبيق Idempotency على عدة مستويات:

أولاً، على مستوى واجهة المستخدم (UI): يمكنك تعطيل زر الدفع بعد الضغط عليه لأول مرة، وعرض رسالة 'جاري الدفع'. هذا يمنع المستخدم من الضغط على الزر عدة مرات. لكن هذا الحل لا يحمي لو أغلق المستخدم المتصفح وأعاده فتحه.

ثانياً، على مستوى قاعدة البيانات: يمكنك إضافة قيد فريد (Unique Constraint) على مفتاح Idempotency الخاص بك. هذا يضمن أن الدفعة لن تُسجل مرتين بنفس المفتاح، حتى لو حدثت مشاكل في الكود.

ثالثاً، مع بوابات الدفع الخارجية: أغلب بوابات الدفع الكبيرة، مثل Stripe، تدعم مفهوم Idempotency Keys الخاصة بها. تمرر لهم المفتاح الخاص بك، وهم يضمنون أن الدفعة لن تُنفذ مرتين من جانبهم.

أهمية Idempotency في عالم التقنية

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

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

ماذا يعني هذا لك؟

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

اقرأ أيضاً

انضم لنشرة المخبر

خلاصة التقنية في خمس دقائق، كل أحد صباحاً.

الجنس
ماذا يهمك؟ (اختر ما شئت)

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