Bir API çağrısı zaman aşımına uğradı, kullanıcı “Gönder” butonunaiki kez tıkladı ya da ağ bağlantısı tam işlem ortasında koptu. Sonuç? Aynı sipariş iki kez oluşturuldu, müşterinin kartından çiftödeme çekildi veya aynı e-posta üç kere gönderildi. İş akışlarında idempotency kavramı, tam olarak bu tür senaryoları önlemek için var. Dağıtık sistemlerde, mikroservis mimarilerinde veotomasyon süreçlerinde idempotent tasarım, hem veri bütünlüğünü korur hem de kullanıcı deneyimini olumsuz etkileyen tekrarlı işlemlerin önüne geçer.
Bu yazıda idempotency’nin ne anlama geldiğini, iş akışlarında neden kritik olduğunu ve pratik uygulama yöntemlerini inceleyeceğiz. Ayrıca yaygın hataları, farklı senaryolara uygun stratejileri ve gerçek dünya örneklerini de ele alacağız.
Idempotency Nedir? Kısa Tanım
Idempotency (eşgüçlülük), bir işlemin bir kez veya birden fazla kez çalıştırılmasının aynı sonucu üretmesi anlamına gelir. Yani aynı isteği1kez de gönderseniz, 10 kez de gönderseniz sistem durumu değişmez. Matematiksel olarak düşünürsek: f(x) = f(f(x)) formülü tam olarak bunu ifade eder.
Pratikte en sık görülen örnek HTTP metodlarıdır:
- GET: Doğası gereği idempotent. Aynı kaynağı100 kez istesen de sadece okuma yaparsın.
- PUT: Belirli bir kaynağı günceller. Aynı veriyle 5 kez çağırsan da sonuç aynıdır.
- DELETE: İlk çağrıda kaynak silinir, sonraki çağrılarda zaten silinmiş olduğu için durum değişmez.
- POST: Genelde idempotent değildir. Her çağrıda yeni kaynak oluşturabilir.
Kilit Çıkarım: Idempotency, “tekrar denemek güvenli mi?” sorusuna “evet” diyebilmeni sağlar.
İş Akışlarında Idempotency Neden Bu Kadar Önemli?
Modern yazılım sistemleri nadiren tek bir sunucuda çalışır. Mikroservisler, message queue’lar, webhook’lar ve üçüncü parti API entegrasyonları işin içine girdiğinde, ağ güvenilirliği hiçbir zaman %100 olamaz. İşte bu noktada idempotent tasarım hayat kurtarır.
Dağıtık Sistemlerde Belirsizlik Sorunu
Bir servis diğerine istek gönderdiama yanıt alamadı. İşlem başarılı mı oldu, başarısız mı? Bilemezsin. Bu durumda güvenli şekilde tekrar deneyebilmek için işlemin idempotent olması gerekir. Aksi halde:
- Ödeme sistemlerinde müşteriden çift tahsilat yapılabilir.
- E-ticaret platformlarında aynı sipariş birden fazla kez oluşabilir.
- Bildirim servislerinde kullanıcıya spam gibi tekrarlı mesajlar gidebilir.
- Stok yönetiminde envanter sayıları yanlış düşebilir.
Retry Mekanizmalarıyla Uyum
Çoğu modern altyapı (Kubernetes, message broker’lar, API gateway’ler) başarısız işlemleri otomatik olarak tekrardener. Eğer endpoint’lerin idempotent değilse, bu retry mekanizmaları fayda yerine zarar verir. Idempotent tasarım, “at-least-once delivery” garantisi veren sistemlerde bile tutarlılığı korur.
Basit senaryo: Bir kullanıcı online bankacılıkta para transferi yapıyor. Butona tıkladı, sayfa dondu, tekrar tıkladı. Idempotent olmayan bir sistemde hesaptaniki kez para çıkabilir. Idempotent bir sistemde ise ikinci istek algılanır ve işlem tekrarlanmaz.
Idempotency Nasıl Sağlanır? Pratik Stratejiler
Idempotent iş akışları tasarlamak için birkaç temel yaklaşım var. Senaryona göre bunları tek başına veya birlikte kullanabilirsin.
1) Idempotency Key Kullanımı
En yaygın yöntem, her işleme benzersiz bir anahtar (idempotency key) atamaktır. Bu anahtar genellikle istemci tarafından üretilir ve her istekle birlikte gönderilir.
- Sunucu bu anahtarı alır vedaha önce işlenip işlenmediğini kontrol eder.
- Eğer daha önce işlenmişse, orijinal yanıtı döndürür (yeni işlem yapmaz).
- İlk kez görüyorsa işlemi gerçekleştirir ve anahtarı kaydeder.
Stripe, PayPal gibi ödeme API’leri bu yöntemi standart olarak sunar. Header’da “Idempotency-Key” göndererek aynı ödeme isteğinin tekrar işlenmesini engellersin.
2) Doğal Anahtarlar ve Unique Constraint’ler
Bazı durumlarda işindoğası gereği benzersiz bir tanımlayıcı zaten vardır. Örneğin:
- Sipariş numarası +ürün ID kombinasyonu
- Kullanıcı ID + tarih + işlem tipi
- Harici sistemden gelen benzersiz referans kodu
Veritabanında bu kombinasyonlara unique constraint koyarak, aynı kaydıniki kez oluşmasını fiziksel olarak engelle. INSERT işlemi zaten varsa hata verir, sen de bunu yakalar ve “zaten işlendi” yanıtı dönersin.
3) Durum Makinesi (State Machine) Yaklaşımı

Karmaşık iş akışlarında her adımı bir durum olarak modellemek etkili bir stratejidir. İşlem ancak belirli bir durumdaykenilerleyebilir:
- “pending” → “processing” → “completed” geçişleri tanımlanır.
- Aynı işlem tekrar geldiğinde mevcut durum kontrol edilir.
- Eğer zaten “completed” ise hiçbir şey yapılmaz.
Bu yaklaşım özellikle uzun süren iş akışlarında (saga pattern, workflow orchestration) oldukça faydalıdır.
4) Conditional Updates
Veritabanı güncellemelerinde “eğer şu durumdaysa güncelle” mantığı kullan. Örneğin:
UPDATE orders SET status = ‘shipped’ WHERE id = 123 AND status = ‘processing’
Bu sorgu, sipariş zaten “shipped” durumundaysa hiçbir satırı etkilemez. Böylece aynı güncelleme isteği birden fazla kez gelse de sonuç değişmez.
Yaygın Hatalar ve Yanlış Bilinenler
Idempotency implementasyonunda sık karşılaşılan bazı tuzaklar var. Bunlardan kaçınmak, sağlam bir sistem tasarlamak için kritik.
Yanlış Bilinen #1: “Veritabanı Transaction’ı Yeterli”
Transaction atomiklik sağlarama idempotency sağlamaz. İşlem başarılı olduktan sonra ağ hatası yaşanırsa istemci yanıt alamaz ve tekrar dener. Transaction bunu engellemez, sadece yarım kalmış işlemleri geri alır.
Yanlış Bilinen #2: “UUID Üretmek Yeterli”
Sunucu tarafında UUID üretmek idempotency sağlamaz. Çünkü her istekte yeni UUID üretilir. Anahtar istemci tarafından üretilmeli ve tekrarlayan isteklerde aynı anahtar kullanılmalı.
Yanlış Bilinen #3: “Sadece Yazma İşlemlerinde Gerekli”
Okuma işlemleri de yan etkiler yaratabilir. Örneğin bir API çağrısı “görüntülenme sayısını artır” gibi bir yan etki tetikliyorsa, bu da idempotent tasarlanmalı.
Dikkat Edilmesi Gereken Noktalar
- Idempotency key’lerinömrü: Sonsuza kadar saklamak pratik değil. Genelde24-48 saat yeterli olur.
- Race condition’lar: Aynı key ile eş zamanlı iki istek gelirse ne olur? Kilitleme mekanizması kullanmalısın.
- Partial failure: İşlemin yarısı tamamlandıysa tekrar denemede ne olacak? Her adım ayrı ayrı idempotent olmalı.
Gerçek Dünya Senaryoları

Teorik bilgiyi pratiğe dökmek için birkaç somut örneğe bakalım.
Senaryo 1: E-Ticaret Sipariş Oluşturma
Kullanıcı sepetini onayladı, “Siparişi Tamamla” butonuna tıkladı. Ağ yavaş, sayfa yanıt vermedi, kullanıcı tekrar tıkladı. Çözüm: Sepet ID + kullanıcı ID + timestamp kombinasyonuyla bir idempotency key oluştur. Bu key ile gelen ikinci istek algılanır, aynı sipariş numarası döndürülür.
Senaryo 2: Webhook İşleme
Üçüncü parti servis (örneğin ödeme sağlayıcısı) sana webhook gönderiyor. Bazen aynı event birden fazla kez gelebilir (bu normal ve beklenen bir davranıştır). Çözüm: Webhook payload’ındaki event ID’yi sakla. Aynı ID tekrar geldiğinde işlemi atla.
Senaryo 3: Mesaj Kuyruğu Tüketimi
RabbitMQ veya Kafka’dan mesaj okuyorsun. Consumer işlemi tamamladıama ACK göndermeden çöktü. Mesaj tekrar kuyruğa düştü. Çözüm: Her mesajda benzersiz bir correlation ID olmalı ve işlem bu ID’ye göre idempotent tasarlanmalı.
Sıkça Sorulan Sorular
Idempotency key ne kadar süre saklanmalı?
Genelde 24ila 48 saat yeterlidir. Çok kısa tutarsan meşru retry’ları yakalayamazsın, çok uzun tutarsan depolama maliyeti artar. Kritik finansal işlemler için bu süreyi uzatmayı düşünebilirsin.
Tüm API endpoint’leri idempotent mi olmalı?
Hayır,ama yan etkisi olan (state değiştiren) tüm endpoint’ler için idempotency düşünülmeli. Salt okuma yapan GET istekleri zaten idempotent. POST, PUT, PATCH, DELETE için mutlaka değerlendir.
Idempotency ile caching aynı şey mi?
Hayır. Caching performans optimizasyonu için sonuçları saklar. Idempotencyise işlemin tekrar çalıştırılmasını engelleyerek veri tutarlılığını korur. Farklı amaçlara hizmet ederlerama birlikte kullanılabilirler.
Microservices mimarisinde her servis ayrı ayrı mı idempotent olmalı?
Evet. Dağıtık sistemlerde her servis bağımsız olarak idempotent tasarlanmalı. Saga pattern gibi orchestration yaklaşımlarında her adımın idempotent olması, compensation (geri alma) işlemlerini de kolaylaştırır.
Idempotency performansı olumsuz etkiler mi?
Ek bir veritabanı sorgusu veya cache lookup gerektirir, bu da küçük bir overhead yaratır. Ancak bu maliyet, çift işlem kaynaklı sorunların maliyetiyle karşılaştırıldığında ihmal edilebilir düzeydedir.
Sonuç: Güvenli Tekrar Deneme Kültürü
İş akışlarında idempotency, modern yazılım sistemlerinin olmazsa olmazlarından biri. Ağ güvenilirliğinin hiçbir zaman %100 olmadığı, retry mekanizmalarının standart hale geldiği bir dünyada, aynı işlemin güvenle tekrar denenebilmesi kritik bir gereklilik. Idempotency key’ler, unique constraint’ler, state machine yaklaşımları ve conditional update’ler bu hedefe ulaşmak için kullanabileceğin temel araçlar.
Yeni bir API endpoint veya iş akışı tasarlarken “bu işlem iki kez çalışırsa ne olur?” sorusunu kendinesor. Yanıt “sorun olmaz” ise doğru yoldasın. Eğer “veri tutarsızlığı olabilir” ise idempotency stratejini gözden geçirmen gerekiyor. Bu yaklaşımı benimseyerek hem kullanıcı deneyimini iyileştirir hem de gece yarısı çağrılarından kurtulursun.











Cevap ver