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.
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
Ö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,PUTveDELETEidempotenttir;POSTdeğ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
// 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
- REST APIBackend ve API'ler, s. 38REST API, verileri URL'lerle tanımlanan kaynaklar olarak sunan ve istemcilerin onları standart HTTP metotlarıyla okuyup değiştirmesini sağlayan web API'sidir.
- HTTPWeb Geliştirme, s. 20HTTP, tarayıcıların, uygulamaların ve sunucuların basit bir istek-yanıt döngüsüyle web sayfaları ve veri alışverişi yapmasını sağlayan protokoldür.
- Mesaj KuyruğuBackend ve API'ler, s. 28Mesaj kuyruğu, bir servisten gelen mesajları bir başkası işlemeye hazır olana kadar saklayan ve sistemin parçalarını eşzamansız çalıştıran bir bileşendir.
- WebhookBackend ve API'ler, s. 47Webhook, bir uygulamanın, tamamlanan bir ödeme gibi belirli bir olay gerçekleştiği anda sizin verdiğiniz bir URL'ye otomatik olarak gönderdiği HTTP isteğidir.
- TransactionVeritabanları, s. 36Transaction, tek bir bütün olarak başarılı ya da başarısız olan veritabanı işlemleri grubudur; böylece veri asla yarım kalmış, tutarsız bir durumda bırakılmaz.
- APIBackend ve API'ler, s. 2API, bir yazılımın başka bir yazılımdan veri ya da işlem talep etmesini sağlayan, belgelenmiş ve öngörülebilir kurallar bütünüdür.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin