Idempotency
Idempotency (eşgüçlülük), aynı isteğin birden fazla kez gönderilmesi durumunda aynı sonucu garanti eden mekanizmadır. Ağ hataları veya timeout durumlarında mükerrer işlemleri önler.
Neden Gerekli?
Bir ödeme isteği gönderdiniz ama yanıt alamadınız. İstek başarılı mıydı? Tekrar göndermeli misiniz?
| Senaryo | Idempotency Olmadan | Idempotency ile |
|---|---|---|
| Timeout sonrası tekrar deneme | Mükerrer ödeme riski | Aynı sonuç döner |
| Ağ hatası sonrası retry | İki kez çekim yapılabilir | Tek çekim garantisi |
Nasıl Kullanılır?
İsteklerinize Idempotency-Key header'ı ekleyin:
curl -X POST https://api.jetcheckout.com/api/v1/embedded/session \
-H "Content-Type: application/json" \
-H "Idempotency-Key: unique-request-id-12345" \
-d '{ ... }'
Kurallar
| Kural | Açıklama |
|---|---|
| Benzersiz olmalı | Her farklı işlem için farklı key kullanın |
| Tekrarlanabilir | Aynı işlemi tekrar denemek için aynı key'i kullanın |
| Format | UUID önerilir (örn: 550e8400-e29b-41d4-a716-446655440000) |
| Geçerlilik | 24 saat boyunca geçerlidir |
Önerilen Uygulama
const crypto = require('crypto');
async function createSession(data) {
const idempotencyKey = crypto.randomUUID();
const response = await fetch("https://api.jetcheckout.com/api/v1/embedded/session", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": idempotencyKey
},
body: JSON.stringify(data)
});
return response.json();
}
import uuid
import requests
def create_session(data):
idempotency_key = str(uuid.uuid4())
response = requests.post(
"https://api.jetcheckout.com/api/v1/embedded/session",
json=data,
headers={"Idempotency-Key": idempotency_key}
)
return response.json()
ipucu
Retry mekanizması ile birlikte kullanın. İstek başarısız olduğunda aynı idempotency key ile tekrar gönderin.