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 وجود دارد ، بیایید در نظرات به اشتراک بگذاریم!