تكرار السؤال: …
الإجابة المختصرة
تعتمد REST على بنية عميل/خادم عديمة الحالة (Stateless)، وموارد محددة بروابط URI موحدة، واستخدام أفعال HTTP القياسية؛ وتكون العملية Idempotent إذا كان تكرار تنفيذها N مرة ينتج نفس الحالة النهائية للنظام تماماً كمرة واحدة.
الشرح
أفعال GET و PUT و DELETE و HEAD و OPTIONS كلها Idempotent؛ فإذا حذفت المورد DELETE /users/42 عشر مرات، فإن النتيجة النهائية على قاعدة البيانات هي حذف المستخدم ولا يختلف أثره في المرة الثانية عن الأولى. بينما يعتبر POST غير متكرر النتائج (Non-Idempotent)؛ لأن إرساله مرتين سينشئ سجلين أو معاملتين ماليتين مكررتين ما لم يُحمى بمفتاح عدم تكرار (Idempotency Key).
مثال بالكود
PUT /users/7 {"name": "Sara"} → idempotent: repeating it leaves the same final state
DELETE /users/7 → idempotent: a second call just returns 404/204
POST /payments {"amount": 100} → NOT idempotent: every retry may charge again
POST /payments {"amount": 100}
Idempotency-Key: 8f3c1b2e-4a5d-4c7e-9a10-2f6d0b7e9c11
→ safe to retry: the server stores the first result per key and replays itأخطاء شائعة
- استخدام أفعال GET لتعديل أو حذف البيانات في السيرفر (مثل /delete-user?id=5)، مما يسمح لمحركات البحث والـ Prefetching بحذف بيانات المستخدمين دون قصد!