تصور کن اینترنت کاربر ضعیفه و دکمه «پرداخت ۵۰۰ هزار تومان» رو چند بار پشت سر هم میزنه، یا درخواست اول ارسال میشه ولی پاسخش به خاطر قطعی نت به کاربر نمیرسه و سیستم دوباره تلاش میکنه (Retry). اگر سرور درست طراحی نشده باشه، از حساب کاربر چند بار پول کسر میشه!
خاصیت Idempotent یعنی چی؟ یک عملیات زمانی Idempotent است که اجرای چندینباره اون دقیقاً همان اثری رو داشته باشه که یکبار اجرا شدنش داره؛ نه بیشتر و نه کمتر.
متدهای
GET, PUT, DELETE در استاندارد REST باید خاصیت Idempotent داشته باشن. (مثلاً حذف یک رکورد مشخص، بار اول حذفش میکنه و دفعات بعد رکوردی نیست، پس وضعیت دیتابیس تغییری نمیکنه).اما متد
POST ذاتاً Idempotent نیست و با هر بار اجرا یک رکورد جدید میسازه.🛠 راهحل پیادهسازی: استفاده از Idempotency-Key. سمت کلاینت یک کلید یکتا (مثل UUID) برای درخواست میسازید و در هدر میفرستید. سرور این کلید رو بررسی میکنه؛ اگه قبلاً پردازش شده بود، بدون اجرای دوباره تراکنش، همون نتیجه قبلی رو برمیگردونه.
🖥 @Computer_Science100