Ana içeriğe geç

Idempotency

Türkçe karşılığı
eşgüçlülük
Okunuşu
aydempotınsi

Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/idempotency

Kısaca

Idempotency, bir işlemin bir kez de çalışsa çok kez de çalışsa aynı sonucu üretmesi özelliğidir; böylece bir isteğin yanlışlıkla tekrarlanması güvenli olur.

Idempotency nedir?

Bir işlem, iki kez ya da yüz kez yapılması sistemi bir kez yapılmasıyla aynı durumda bırakıyorsa idempotenttir. Bir kullanıcının e-postasını ada@example.com olarak ayarlamak idempotenttir, çünkü ilk seferden sonra tekrarlamak hiçbir şeyi değiştirmez; bakiyeye 10 $ eklemek ise değildir, çünkü her tekrar 10 $ daha ekler. Açma ve kapama için ayrı düğmeleri olan bir ışık anahtarı iyi bir benzetmedir: açma düğmesine iki kez basmak ışığı yine yalnızca açık bırakır.

Idempotency önemlidir, çünkü ağlar güvenilmezdir. Bir istemci ödeme isteği gönderip yanıt gelmeden bağlantıyı kaybedebilir ve ilk denemenin başarılı olup olmadığını bilmeden yeniden deneyebilir; mesaj kuyrukları ve webhook'lar da aynı mesajı birden fazla kez teslim edebilir. İşlem idempotent ise bu yeniden denemeler müşteriden iki kez ücret almak yerine zararsız olur.

HTTP'de GET, PUT ve DELETE gibi metotlar idempotent olarak tanımlanmıştır; POST değildir ve PATCH'in idempotent olması garanti edilmez. POST isteklerini yeniden denemeye güvenli hale getirmek için birçok API, özellikle ödeme API'leri, bir idempotency key kabul eder: istemcinin Idempotency-Key gibi bir başlıkta gönderdiği benzersiz bir kimlik. Sunucu her anahtarı sonucuyla birlikte saklar; böylece aynı anahtarla tekrarlanan bir istek, yeniden çalışmak yerine özgün yanıtı döndürür.

Idempotent olmak, yanıtın her zaman aynı olduğu anlamına gelmez: bir kaynağı iki kez silmek ilk seferde 204 No Content, ikinci seferde 404 Not Found döndürebilir; yine de sunucunun durumu aynıdır. Idempotency, HTTP'nin hiçbir şeyi değiştirmeyen GET gibi metotlar için kullandığı güvenli (safe) kavramından da farklıdır; dolayısıyla DELETE idempotenttir ama güvenli değildir.

Bir bakışta

Bir istemci abc123 idempotency anahtarıyla bir ödeme isteği gönderir. Sunucu kartı tahsil eder ve sonucu bu anahtarla kaydeder, ama yanıt dönüş yolunda kaybolur. İstemci aynı isteği aynı anahtarla tekrar gönderir; sunucu anahtarı bulur ve yeniden tahsil etmek yerine kaydettiği sonucu döndürür.İstemciSunucuPOST /payments · Idempotency-Key: abc12320 $ tahsil ederabc123 → ödeme #77sonuç anahtarla kaydedildi201 Created, yolda kayboldu×Tekrar: aynı istek, aynı anahtar201 Created · ödeme #77 (kayıtlı sonuçtan)bir kez tahsil edildi
Aynı anahtarla gelen tekrar aynı yanıtı alır: istek kaç kez gelirse gelsin kart bir kez tahsil edilir.

Önemli noktalar

  • Idempotent bir işlem, kaç kez çalışırsa çalışsın aynı etkiye sahiptir.
  • Zaman aşımları, çökmeler ve yinelenen mesajlardan sonra yeniden denemeyi güvenli kılar.
  • HTTP'de GET, PUT ve DELETE idempotenttir; POST değildir.
  • Idempotency key'ler, API'lerin ödeme gibi idempotent olmayan istekleri güvenle yeniden denemesini sağlar.
  • Yanıtlar çağrılar arasında farklı olabilir; aynı kalan şey ortaya çıkan durumdur.

Örnek

Sunucuda bir idempotency key'i işlemekjavascript
// Run each payment only once per idempotency key (Express.js)
app.post("/api/payments", async (req, res) => {
  const key = req.get("Idempotency-Key");
  if (!key) return res.status(400).send("Missing Idempotency-Key header");

  const saved = await db.idempotencyKeys.find(key);
  if (saved) return res.status(saved.status).json(saved.body); // replay, don't charge again

  const payment = await chargeCard(req.body);
  await db.idempotencyKeys.save(key, { status: 201, body: payment });
  res.status(201).json(payment);
});

Sık sorulan sorular

Hangi HTTP metotları idempotenttir?

HTTP spesifikasyonuna göre GET, HEAD, OPTIONS, TRACE, PUT ve DELETE idempotenttir. POST değildir ve PATCH'in idempotent olması garanti edilmez; ancak belirli bir API bunları idempotent davranacak şekilde tasarlayabilir.

Idempotency key nedir?

Idempotency key, istemcinin bir istekle birlikte, genellikle bir Idempotency-Key başlığında gönderdiği, çoğunlukla UUID olan benzersiz bir değerdir. Sunucu her anahtarı ve sonucunu hatırlar; böylece aynı anahtarla yeniden denenen bir istek eylemi tekrarlamak yerine saklanan yanıtı döndürür.

Güvenli (safe) ve idempotent HTTP metotları arasındaki fark nedir?

GET gibi güvenli bir metot sunucudaki verileri hiç değiştirmez. Idempotent bir metot veriyi değiştirebilir, ancak tekrarlanması başka bir etki yaratmaz; dolayısıyla her güvenli metot idempotenttir, PUT ve DELETE ise güvenli olmadan idempotenttir.

İlgili sayfalar

Kaynaklar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar