Backend Eğitimlerindeki Tuzak

Eğitimler size basit bir süreç gösterir. Bir webhook alın. Veritabanını güncelleyin. 200 OK döndürün.

Kodunuz test aşamasında çalışır. Canlı ortama (production) alırsınız. Sonra veritabanınızda mükerrer kayıtlar görürsünüz. Kullanıcılara iki kez kredi tanımlanır. Veri girişleri birikir.

Eğitimler ağ hatalarının gerçekliğini görmezden gelir.

Sorun: Güvenilmez Ağlar Ağlar hata verebilir. Sunucunuz verileri yavaş işleyebilir. Bir DNS hatası, 200 OK yanıtınızın göndericiye ulaşmasını engelleyebilir.

Bir servis onayınızı alamazsa, işlemi tekrar dener. Aynı webhook'u tekrar gönderir. Eğer kodunuz her isteği kabul ederse, mükerrer kayıtlar oluşturursunuz.

Çözüm: Idempotency Idempotency, birden fazla özdeş isteğin tek bir istek ile aynı etkiye sahip olması demektir.

Bir asansör düğmesini düşünün. 5. kat düğmesine bir kez basmak, asansöre nereye gideceğini söyler. On kez basmak, asansörü 50. kata göndermez. Sonuç aynı kalır.

Webhook'unuz da bu düğme gibi davranmalıdır.

Nasıl Düzeltilir? Güvenli webhook'lar oluşturmak için şu adımları izleyin:

  • Olayın (event) benzersiz kimliğini (ID) bulun.
  • Herhangi bir işlem yapmadan önce veritabanınızda bu ID'yi kontrol edin.
  • Eğer ID mevcutsa, durun. Göndericinin tekrar denemeyi bırakması için bir 200 OK döndürün.
  • Eğer ID yeniyse, veriyi işleyin.
  • Olay ID'sini hemen veritabanınıza kaydedin.

Node.js ile Örnek Mantık:

const eventId = req.body.event_id;

const existingEvent = await db.processedEvents.findUnique({ where: { id: eventId } });

if (existingEvent) { return res.status(200).send('Already processed'); }

await updateUserData(req.body.data); await db.processedEvents.create({ data: { id: eventId } });

return res.status(200).send('Success');

Mükemmel koşullar için sistemler inşa etmek kolaydır. Hatalar için sistemler inşa etmek gerçek mühendisliktir.

Tekrar denemelerden kaynaklanan mükerrer verilerle hiç karşılaştınız mı? Idempotency'yi nasıl yönetiyorsunuz?

Kaynak: https://dev.to/anubhavg23/the-hidden-trap-in-backend-tutorials-why-your-webhooks-are-creating-duplicate-data-and-how-to-fix-dba