ترويسة Idempotency-Key
كل عملية POST (الفواتير والعملاء والأصناف وغيرها) تتطلّب ترويسة
Idempotency-Key. وهي سلسلة فريدة يولّدها العميل وتُعرّف هذه العملية تحديدًا:
استثناء واحد: الطلب
POST /invoices/{id}/validate (ونظيره لإشعارات الخصم)
فحص للقراءة فقط لا يغيّر شيئًا، لذلك لا يتطلّب ترويسة Idempotency-Key —
استدعِه بحرّية أثناء تصحيح المسودّة.اختيار المفتاح
- اجعله فريدًا لكل عملية منطقية — مثلًا مفتاح واحد لكل فاتورة تنوي إنشاءها.
يصلح كلٌّ من قيمة UUID أو معرّف عمل ثابت مثل
invoice-2026-00042. - لا تُعِد استخدام مفتاح لعملية مختلفة. فالمفتاح هو ما يعتمده الخادم للتعرّف على التكرار.
- ولّده على جهة العميل قبل المحاولة الأولى، وأعِد استخدام القيمة نفسها في كل إعادة محاولة للعملية ذاتها.
ماذا يحدث عند إعادة المحاولة
عندما ترسل طلبًا بمفتاحIdempotency-Key سبق أن عالجه الخادم، فإنه لا يُنشئ
سجلًّا ثانيًا. بل يُعيد بأمان النتيجة الأصلية للطلب الأول:
1
الطلب الأول
ينشئ
POST /invoices مع Idempotency-Key: invoice-2026-00042 الفاتورة
ويُعيدها.2
ضياع الاستجابة
تعني المهلة المنتهية أو الاتصال المقطوع أنك لم ترَ الاستجابة، فلا تعرف إن نجح
الطلب.
3
إعادة المحاولة بالمفتاح نفسه
تُعيد إرسال الطلب ذاته تمامًا بنفس
Idempotency-Key. تتعرّف الواجهة على
المفتاح وتُعيد الفاتورة الأصلية — دون إنشاء أي نسخة مكرّرة.Idempotency-Replayed: true لتميّزها عن
تنفيذ جديد.
هذا يجعل إعادة المحاولة آمنة تمامًا. أعِد المحاولة دائمًا بالمفتاح نفسه بدلًا من
توليد مفتاح جديد، وإلا اعتبره الخادم عملية جديدة كليًا وقد تُنشئ نسخة مكرّرة.