Idempotency Nedir? .Net uygulamalarında idempotency

Anil Yilmaz
2 min readFeb 10, 2024
Idempotent buton

Selamlar herkese, bu yazımda idempotency kavramından bahsedeceğim.

Idempotency bir işlemin birden fazla kez uygulandığında sonuçların değişmemesi durumunu ifade eder. Yani idempotent olan bir yapıya aynı işlemi tekrar tekrar uygulasanız bile sonuçlar aynı kalacaktır.

Örnek olarak bir sayıyı ikiye katlama işlemi idempotenttir. 5'i ikiye katlarsak 10 elde ederiz. Bunu tekrar tekrar yaptığımız zaman 5 sayısını her ikiye katladığımızda 10 değerini elde edeceğiz. Ya da veritabanında bir alanı güncelleme işlemini her yaptığımızda aynı şekilde güncellendiğini görürüz.

Idempotency Kavramını Nerelerde Kullanabiliriz?

  • Ödeme İşlemleri: Bir kullanıcı tarafından gönderilen ödeme isteği başarılı bir şekilde işlendikten sonra, aynı isteğin tekrar gönderilmesi durumunda aynı sonucu üretmelidir.
  • Veritabanı Migrate İşlemleri: Veritabanı şemasındaki tabloya bir sütun ekleyen migrate işlemi tekrarlandığında her zaman aynı işlemi yapmalıdır.
  • Dosya İşlemleri: Dosyanın silinmesi veya taşınması gibi işlemler, bir kere başarıyla tamamlandıktan sonra tekrar uygulandığında aynı sonuçları üretmelidir.

Unique ID Kullanarak Idempotency Sağlamak:

Benzersiz bir işlem kimliği (Guid) oluşturarak işlemleri takip edebilir ve bu kimliği kullanarak idempotency sağlayabilirsiniz.

    public void ProcessPayment(Payment payment)
{
// Unique ID oluştur
string uniqueId = Guid.NewGuid().ToString();

// İşlem idempotent mi kontrol et
if (_repository.Exists(uniqueId))
{
// Ödeme zaten alınmış
return;
}

// Ödemeyi gerçekleştir
var paymentResult = _paymentProcessor.ProcessPayment(payment, uniqueId);

// İşlemi kaydet
_repository.Save(payment, paymentResult, uniqueId);
}

Clientten gelen id ile Idempotency Sağlamak:

    public bool UpdateProfileWithRequestId(string userId, UserProfileDto profileDto)
{
// Headerdan 'X-Request-Id' alınır.
var requestId = HttpContext.Current.Request.Headers["X-Request-Id"];

// Gelen Request Id kontrol edildikten sonra profil güncelleme işlemine alınır.
if (!IsProfileUpdateProcessed(requestId))
{
// Profil güncelleme işlemini gerçekleştir.
UpdateUserProfile(userId, profileDto);

// İşlem başarıyla tamamlandığında, Request Id işlenmiş olarak işaretlenir.
MarkProfileUpdateAsProcessed(requestId);

// Profil güncelleme başarıyla tamamlandı.
return true;
}

// Profil güncelleme daha önce tamamlandı, tekrar işlenmeye gerek yok.
return false;
}
private bool IsProfileUpdateProcessed(string requestId)
{
// Profil güncelleme işlemi durumu kontrol edilir;
return CheckIfProfileUpdateExistsInDatabase(requestId);
}

private void MarkProfileUpdateAsProcessed(string requestId)
{
// Profil güncelleme işlemi durumu işlendi olarak işaretlenir;
MarkProfileUpdateAsProcessedInDatabase(requestId);
}

Bu yazımda idempotency kavramını elimden geldiğince açıklamaya ve örneklendirmeye çalıştım. Bu örnekler, gerçek dünya senaryolarında idempotency’nin nasıl uygulanabileceğini göstermektedir. Ancak her durumda, uygulamanın ihtiyaçlarına ve kullanım senaryolarına bağlı olarak uygun bir idempotency stratejisi seçilmelidir.

Okuduğunuz için teşekkür ederim, hatalar ve eksiklikler için her zaman ulaşabilirsiniz. Bir sonraki yazımda görüşmek üzere 🙂

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Anil Yilmaz
Anil Yilmaz

No responses yet

Write a response