برنامه نویسی

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

شما دوباره در حال ایجاد یک آتش پس زمینه هستید ، سپس ناگهان یک اشکال وجود دارد: کاربر روی دکمه کلیک کنید “با توجه” دو بار و … 😱 آنها دو بار صورتحساب شدند!

آرام باشید ، شما فقط به یک حرکت نیاز دارید: قدرتبشر


id idempotency چیست؟

idempotency ماهیت یک عمل است سرانجام نتیجه را تغییر نداد حتی اگر این کار به طور مکرر انجام شود با همان ورودی


🎓 حالا شما دانشجو هستید …

تصور کنید که KRS (کارت برنامه مطالعه) را پر می کنید. یک بار بر روی دکمه “Take the Course A” کلیک کنید:

  • ✅ داده ها به سیستم می روند.

آه ، شما وحشت ، اتصال بد ، دوباره کلیک می کنید …

  • ✅ سیستم می گوید: “دوره A گرفته شده است.”

نتیجه نهایی؟ یکسان شما هنوز 1 کلاس می گیرید.
این است عملبشر

اکنون آن را با نمونه ای مقایسه کنید که idempotent نیستبشر


😬 عملیاتی که idempotent نیستند

انتقال پول از طریق درخواست:

  • دکمه “انتقال” را یک بار فشار دهید: 💸 پول ارسال می شود.
  • اما از آنجا که بارگیری ادامه دارد ، شما دوباره فشار می آورید …
  • 💸 پول ارسال می شود دو بار!

⚠ این عملیات است idempotent نیست، به دلیل نتیجه نهایی تغییر یافته هر بار که اجرا می شود.


🧪 http و idempotency

روش HTTP همچنین دارای یک شخصیت idempotency است:

روش idempotent؟ توضیح
بدست آوردن ✅ از داده ها را بگیرید ، چیزی را تغییر ندهید.
قرار دادن ✅ از داده های بازنویسی ، نتیجه نهایی یکسان است.
حذف کردن ✅ از در صورت حذف دوباره داده ها ، تغییر نمی کند.
پست ❌ نه. داده های جدید ایجاد کنید ، دوباره = داده های جدید را تکرار کنید.
پچ ⚠ گاهی اوقات بسته به اجرای آن.

💡 چرا ما به idempotency نیاز داریم؟

  1. اتصال بد
    سرور می تواند کند باشد. کاربران اغلب بارها دکمه را فشار می دهند.

  2. دوباره امتحان کردن
    بسیاری به طور خودکار درخواست را تکرار کنید در صورت عدم موفقیت

  3. ایمنی و اعتماد
    خنده دار نیست که معامله مالی حتی دو بار در پول باشد فقط به این دلیل که کاربر وحشت دوباره کلیک می کند.


🛡 نحوه ساخت پست idempotent: استفاده کنید Idempotency-Key

برای روشی که به طور پیش فرض نه idempotent، کایاک POST، ما می توانیم یک ترفند با هدر منحصر به فردبشر

مثال:

POST /api/payment
Idempotency-Key: 123e4567-e89b-12d3-a456-426614174000
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

سرور:

  1. بررسی کنید که آیا Idempotency-Key این که من استفاده شده امبشر
  2. اگر این برگشت همان پاسخ همانطور که قبلاً
  3. اگر نه → پردازش و نتایج را ذخیره کنید بر اساس کلید او

🎯 بنابراین حتی اگر کاربر بارها و بارها “پرداخت” کند ، پول فقط بیرون می آید.


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


نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا