Webhook’larda çift işlemeyi nasıl engelliyorsunuz?

0 Yanıt 3 Görüntülenme
Puanlayanlar
Katılımcılar
Konuyu Açan #1
Ödeme ya da abonelik webhook’larında en can sıkıcı senaryolardan biri, aynı olayın tekrar gelmesi. Sağlayıcı yanıt alamazsa yeniden deniyor; bizim uygulama da ilk isteği aslında işlemiş olsa bile ikinci kez kredi tanımlayabiliyor veya e-posta gönderebiliyor.

Benim tercih ettiğim yaklaşım, gelen olayın kimliğini veritabanında benzersiz tutmak. Böylece aynı olay yeniden geldiğinde uygulama bunu yeni bir işlem gibi ele almıyor:

KOD
12345
CREATE TABLE webhook_events (
  event_id VARCHAR(120) PRIMARY KEY,
  received_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);


İkinci nokta, webhook isteğinde bütün işi bitirmeye çalışmamak. Olayı doğrulayıp kalıcı olarak kaydediyor, ardından kuyruğa bırakıp hızlıca başarılı yanıt dönmek daha dayanıklı oluyor. Ancak kayıt ve kuyruğa ekleme arasında uygulama çökerse iş kaybolabilir; bu yüzden ikisini aynı veritabanı işlemiyle güvenceye alan outbox yaklaşımı da değerlendirilebilir.

Bir de idempotency kontrolünü yalnızca HTTP katmanında bırakmamak lazım. Kuyrukta aynı iş tekrar çalışırsa asıl veritabanı güncellemesinin de güvenli olması gerekiyor. Özellikle “bakiyeye 10 ekle” gibi işlemler, tekrar çalıştırılınca sonucu bozabilir.

Siz webhook’larda olay kimliğini mi temel alıyorsunuz, yoksa iş mantığına göre ayrı idempotency anahtarları mı kullanıyorsunuz?

Yanıt vermek için giriş yapmış olmalısınız.

0 alıntı seçildi