# Idempotency

Adres: https://softwaredictionary.org/tr/terimler/idempotency
Kategori: Backend ve API'ler
Son güncelleme: 2026-09-30
Türkçe karşılığı: eşgüçlülük
Okunuşu: aydempotınsi

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.

## Ö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şlemek

```javascript
// 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.

## Kaynaklar

- [RFC 9110: HTTP Semantics, Idempotent Methods](https://www.rfc-editor.org/rfc/rfc9110.html#section-9.2.2)

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
