idempotent
عملیات idempotent عملیاتی است که اجرای چندبارهٔ آن با ورودی یکسان، همان اثر موردنظرِ یک بار اجرا را دارد.
توضیح
چنین عملیاتی وضعیت مطلوب را برقرار میکند و تکرارش اثر تازهای روی آن وضعیت نمیگذارد؛ مثلاً تنظیم یک مقدار روی ۵، برخلاف افزودن ۵ به آن. در HTTP، روشهایی مثل PUT و DELETE معنای idempotent دارند؛ از پیادهسازی server انتظار میرود این رفتار را حفظ کند، اما رعایت آن تضمینشده نیست. این ویژگی به معنی یکسان بودن پاسخها یا نبودن اثر جانبی مثل ثبت log نیست؛ معیار، اثر موردنظر عملیات است.
مثال
settings = {"enabled": False}
def enable():
settings["enabled"] = True
enable()
enable()
assert settings["enabled"] is Trueچرا مهم است
در کار با API و خودکارسازی زیرساخت، ممکن است مجبور شوی عملیاتی را دوباره اجرا کنی. اگر عملیات idempotent باشد، تکرار آن پس از قطع ارتباط یا نامشخص بودن نتیجه، اثر موردنظر را چندبرابر نمیکند.
مفهومهای مرتبط
این کارت را هوش مصنوعی نوشته و دو بار با هوش مصنوعی بررسی شده است.
بر پایهٔ «Idempotent» از MDN Web Docs (Mozilla Contributors)، با مجوز CC BY-SA 2.5. این کارت هم با همین مجوز منتشر شده است.
مطالبی با این مفهوم
- python

پرداخت با Python؛ اصلاح سفارشهایی که در pending گیر میکنند
توقف برنامه پس از پرداخت و پیش از ثبت نتیجه در database میتواند سفارش را در وضعیت pending نگه دارد. این آموزش با یک کلید ثابت برای تکرار درخواست و یک reconciliation job، این فاصله را مدیریت میکند.
- Pyinfra

آشنایی با pyinfra؛ خودکارسازی زیرساخت با Python و SSH
pyinfra کد Python را به دستورهای shell تبدیل میکند و روی serverها اجرا میکند. این آموزش، مدل declarative و idempotent آن، کاربردها و محدودیتهایش را توضیح میدهد.