idempotency برای چیست؟ – جامعه dev

شما دوباره در حال ایجاد یک آتش پس زمینه هستید ، سپس ناگهان یک اشکال وجود دارد: کاربر روی دکمه کلیک کنید “با توجه” دو بار و … 😱 آنها دو بار صورتحساب شدند!
آرام باشید ، شما فقط به یک حرکت نیاز دارید: قدرتبشر
  id idempotency چیست؟
idempotency ماهیت یک عمل است سرانجام نتیجه را تغییر نداد حتی اگر این کار به طور مکرر انجام شود با همان ورودی
  🎓 حالا شما دانشجو هستید …
تصور کنید که KRS (کارت برنامه مطالعه) را پر می کنید. یک بار بر روی دکمه “Take the Course A” کلیک کنید:
- ✅ داده ها به سیستم می روند.
 
آه ، شما وحشت ، اتصال بد ، دوباره کلیک می کنید …
- ✅ سیستم می گوید: “دوره A گرفته شده است.”
 
نتیجه نهایی؟ یکسان شما هنوز 1 کلاس می گیرید.
این است عملبشر
اکنون آن را با نمونه ای مقایسه کنید که idempotent نیستبشر
  😬 عملیاتی که idempotent نیستند
انتقال پول از طریق درخواست:
- دکمه “انتقال” را یک بار فشار دهید: 💸 پول ارسال می شود.
 - اما از آنجا که بارگیری ادامه دارد ، شما دوباره فشار می آورید …
 - 💸 پول ارسال می شود دو بار!
 
⚠ این عملیات است idempotent نیست، به دلیل نتیجه نهایی تغییر یافته هر بار که اجرا می شود.
  🧪 http و idempotency
روش HTTP همچنین دارای یک شخصیت idempotency است:
| روش | idempotent؟ | توضیح | 
|---|---|---|
| بدست آوردن | ✅ از | داده ها را بگیرید ، چیزی را تغییر ندهید. | 
| قرار دادن | ✅ از | داده های بازنویسی ، نتیجه نهایی یکسان است. | 
| حذف کردن | ✅ از | در صورت حذف دوباره داده ها ، تغییر نمی کند. | 
| پست | ❌ نه. | داده های جدید ایجاد کنید ، دوباره = داده های جدید را تکرار کنید. | 
| پچ | ⚠ گاهی اوقات | بسته به اجرای آن. | 
  💡 چرا ما به idempotency نیاز داریم؟
- 
اتصال بد
سرور می تواند کند باشد. کاربران اغلب بارها دکمه را فشار می دهند. - 
دوباره امتحان کردن
بسیاری به طور خودکار درخواست را تکرار کنید در صورت عدم موفقیت - 
ایمنی و اعتماد
خنده دار نیست که معامله مالی حتی دو بار در پول باشد فقط به این دلیل که کاربر وحشت دوباره کلیک می کند. 
  🛡 نحوه ساخت پست idempotent: استفاده کنید Idempotency-Key
برای روشی که به طور پیش فرض نه idempotent، کایاک POST، ما می توانیم یک ترفند با هدر منحصر به فردبشر
مثال:
POST /api/payment
Idempotency-Key: 123e4567-e89b-12d3-a456-426614174000
سرور:
- بررسی کنید که آیا 
Idempotency-Keyاین که من استفاده شده امبشر - اگر این برگشت همان پاسخ همانطور که قبلاً
 - اگر نه → پردازش و نتایج را ذخیره کنید بر اساس کلید او
 
🎯 بنابراین حتی اگر کاربر بارها و بارها “پرداخت” کند ، پول فقط بیرون می آید.
  اجرای اساسی Idempotency در باکتری
  در سمت سرور:
- ذخیره 
idempotency_keyباpayloadوتresponseدر پایگاه داده - 
وقتی درخواست می آید:
- به دنبال کلید باشید → اگر وجود دارد ، پاسخ قدیمی را برگردانید.
 - اگر نه → پردازش کنید و ذخیره کنید.
 
 
جدول مثال:
| idempotency_key | user_id | نقطه پایانی | پاسخ | آفرینش_ه | 
|---|---|---|---|---|
| ABC123 | 101 | /payment | 
{وضعیت: “پرداخت شده”} | 2025-05-07 10:10:10 | 
  study مطالعه موردی واقعی
  نوار (پرداخت آنلاین)
استیپ نمونه ای از طلا است. آنها مستلزم مصرف Idempotency-Key برای کلیه درخواست های مهم مانند:
- پرداخت
 - مشتری را بسازید
 - بازپرداخت کنید
 
اینجا را بخوانید: اسناد راه راه – idempotency
  Gojek / Grab
اگر دو بار “سفارش گورید” را فشار دهید ، برنامه هنوز هم ارسال می شود 1 رانندهبشر آنها باید از idempotency استفاده کرده اند تا شما را از 2 موتور سوار بر خلاف خود نگه دارید.
🧠 نتیجه گیری
Idempotency برای آتش ایمن مهم است و کاربر وحشت یا از دست دادن را ایجاد نمی کند.
از idempotency-key برای روش هایی مانند Post استفاده کنید تا از دو کلیک و آزمایش مجدد اتوماتیک در امان باشد.
ماهیت روش HTTP را درک کنید ، فقط یک پست را برای همه چیز انتخاب نکنید.
🚀 نکته این است که ، آتش سوزی خود را مانند یک فرد بیمار حتی هرچند که از او بارها خواسته می شود ، همچنان سازگار ، آرام و وحشت نیست.
اگر کاربر در حال خنثی کردن فشار است ، دکمه ادامه می یابد ، هنوز هم می توانید پاسخ دهید: “آرام باشید ، من این کار را قبلاً پردازش می کنم.” 😉
- سیستم خود را بیشتر کنیدمجدداًبا قوی، و درام درست نکنید.
 
  📚 مرجع
اگر این مقاله را دوست دارید ، به اشتراک گذاشتن ، عشق را فراموش نکنید ، و اگر تجربه جالبی در مورد API یا IdemPotency وجود دارد ، بیایید در نظرات به اشتراک بگذاریم!



