dev-tools
Sözlük ↗Idempotency (Idempotentlik)
Idempotency, bir işlemin birden çok kez gerçekleştirilmesinin, tek seferde gerçekleştirilmesiyle tam olarak aynı etkiye sahip olduğu bir özelliktir — işlemi tekrar çağırmak sonucu değiştirmez veya ilk çağrının ötesinde istenmeyen yan etkilere yol açmaz. Ağ çağrıları içeren her sistem için kritik bir kavramdır, çünkü ağlar doğası gereği güvenilmezdir: işlem sunucuda gerçekten başarılı olsa bile bir istek zaman aşımına uğrayabilir veya bir yanıt kaybolabilir; bu belirsizliği ele almanın tek güvenli yolu retry yapmaktır — ama retry ancak işlem idempotent ise güvenlidir, aksi halde tekrarlanan bir "50$ tahsil et" isteği müşteriden iki kez tahsilat yapabilir. AI/SaaS kuran ekipler için neden önemli: idempotency, güvenilir ödeme işleme, webhook yönetimi ve retry mekanizması yerleşik, gerçek dünyada eylemler alabilen her AI ajan sistemi için temel taşıdır — başarısız bir araç çağrısını retry eden bir ajan (veya genel olarak dağıtık bir sistem), retry'nin yinelenen bir e-posta gönderme, bir kartı çift tahsil etme veya aynı sorun için iki destek talebi oluşturma gibi gerçek dünya etkisini tekrarlamayacağına dair bir garantiye ihtiyaç duyar. Stripe'ın API'si sıkça alıntılanan gerçek dünya örneğidir: ücret oluşturma isteklerinde bir `Idempotency-Key` başlığı zorunlu kılar, tam olarak bir istemcinin zaman aşımına uğrayan bir isteği çift tahsilat riski almadan güvenle retry edebilmesi için. Nasıl çalışır: idempotency tipik olarak istemcinin belirli bir mantıksal işlem için benzersiz bir anahtar üretmesi (genellikle bir UUID) ve bunu istekle birlikte göndermesiyle uygulanır; sunucu tam olarak bu anahtarla bir isteği daha önce işleyip işlemediğini kontrol eder — eğer işlemişse, altta yatan yan etkiyi (kartı tahsil etme, e-postayı gönderme) yeniden çalıştırmadan orijinal başarılı çağrıyla aynı sonucu döndürür; işlememişse, isteği normal şekilde işler ve anahtarı sonuçla birlikte bir süre kaydeder; böylece aynı anahtarla yapılan herhangi bir retry güvenle tanınır. Doğal olarak idempotent olan işlemler (`PUT /users/42 {name: "Alex"}` gibi — bir alanı tekrar tekrar belirli bir değere ayarlamak her zaman aynı nihai durumla sonuçlanır) bu mekanizmaya açıkça ihtiyaç duymaz; doğal olarak idempotent olmayan işlemler (`POST /orders` yeni bir sipariş oluşturmak, veya bir artırma işlemi gibi) ihtiyaç duyar. Örnek üzerinden: bir checkout akışı, bir müşteriden 49$ tahsil etmek için `Idempotency-Key: a1b2c3-order-9284` ile `POST /charges` çağırır. İstek ödeme işlemcisine ulaşır, tahsilat başarılı olur, ama başarı yanıtı istemciye ulaşmadan önce ağ bağlantısı kopar. İstemcinin kodu, başarısız görünen bir isteği görünce, aynı idempotency anahtarıyla tam olarak aynı `POST /charges` çağrısını otomatik olarak retry eder. Ödeme işlemcisi, anahtarın zaten başarılı bir tahsilat için kullanıldığını tanır, kartı ikinci kez tahsil etmez ve basitçe orijinal başarı yanıtını döndürür — müşteriden retry'ye rağmen tam olarak bir kez tahsilat yapılır, salt işlemin idempotent olarak tasarlanmış olması sayesinde.
İlgili terimler