Idempotency Token: Tekrarlayan İstekleri Engelleme
Bir ödeme işlemi yolladınız. Ağ hızlı değilse, müşteri butona iki kez basıyor. Sunucu iki kez ödeme işlemi yapıyor. Hesaptan iki kez para çıkıyor. bu sorunu çözmek için idempotency token kullanılır.
Her istek için benzersiz bir kimlik (token) oluşturursunuz. Sunucu bu tokeni kaydeder. Aynı token gelirse, işlemi tekrar yapmaz, önceki sonucu döner.
Adım 1: Token Oluştur
İstek göndermeden önce müşteri tarafında benzersiz bir token üretin:
1const idempotencyToken = crypto.randomUUID();2console.log(idempotencyToken);3// Çıktı: 550e8400-e29b-41d4-a716-446655440000Adım 2: Token ile İstek Gönder
Bu tokeni istek başlığında gönderin:
1fetch('/api/payment', {2method: 'POST',3headers: {4'Content-Type': 'application/json',5'Idempotency-Key': idempotencyToken6},7body: JSON.stringify({ amount: 100 })8});Adım 3: Sunucuda Token Kontrol Et
Sunucu tarafında Node.js/Express örneği:
1const processedTokens = {}; // Gerçekte veritabanında tutulur23app.post('/api/payment', (req, res) => {4const token = req.headers['idempotency-key'];56if (processedTokens[token]) {7// Token daha önce işlendi, aynı sonucu döner8return res.json(processedTokens[token]);9}1011// İşlemi yap12const result = { success: true, transactionId: 12345 };1314// Tokeni ve sonucu kaydet15processedTokens[token] = result;1617res.json(result);18});Çıktı:
Birinci istek: { success: true, transactionId: 12345 }
İkinci istek (aynı token): { success: true, transactionId: 12345 } (işlem tekrar yapılmadı)
Bankaların, ödeme sistemlerinin, e-ticaret sitelerinin hepsi bunu kullanır. Stripe, PayPal gibi servisler de idempotency key istiyor.
- Token benzersiz ve rasgele olmalı.
- Sunucuda en az 24 saat saklanmalı.
- Veritabanında tutmak daha güvenlidir.
- Zaman aşımı sonrası tokeni silebilirsiniz.
bu şekilde aynı işlem hiçbir zaman iki kez yapılmaz.
0 yorum