Webhook nedir? Güvenilir ve güvenli bir webhook sistemi nasıl tasarlanır?
Cevap
Webhook, bir olay gerçekleştiğinde sistemin karşı tarafa HTTP POST ile bildirim göndermesidir ("bizi aramayın, biz sizi ararız"). İstemcinin sürekli polling yapmasına gerek bırakmaz. Örnek: ödeme sağlayıcısının payment.succeeded olayını sizin /webhooks/payments adresinize göndermesi.
Gönderen taraf (provider)
- İmza: gövdeyi paylaşılan bir secret ile HMAC-SHA256 imzalayıp başlıkta gönderin.
- Timestamp: imzaya zaman damgasını dahil edin; alıcı eski istekleri reddederek replay saldırısını önler.
- Retry: 2xx dışı yanıt veya timeout'ta exponential backoff ile yeniden deneyin (ör. 1 dk, 5 dk, 30 dk ... 24 saat).
- Event ID: her olaya benzersiz ID verin.
- Başarısız teslimatları görüntüleyip elle yeniden göndermeye imkân tanıyın.
Alan taraf (consumer)
app.post("/webhooks/payments", express.raw({ type: "application/json" }), async (req, res) => {
const imza = req.header("X-Signature");
const beklenen = crypto.createHmac("sha256", SECRET).update(req.body).digest("hex");
if (!imza || !crypto.timingSafeEqual(Buffer.from(imza), Buffer.from(beklenen))) {
return res.sendStatus(401);
}
const olay = JSON.parse(req.body);
await kuyruk.ekle(olay); // ağır işi sonra yap
res.sendStatus(200); // hızlıca onayla
});- İmzayı ham gövde üzerinden doğrulayın; parse edilip yeniden serialize edilmiş JSON farklı olabilir.
- Hızlıca 2xx dönün, asıl işi kuyrukta yapın; aksi hâlde timeout ve gereksiz retry oluşur.
- Idempotent olun: retry nedeniyle aynı olay birden çok kez gelebilir (at-least-once). İşlenen event ID'lerini saklayıp tekrarları atlayın.
- Sıralamaya güvenmeyin; olaylar sırasız gelebilir. Gerekirse kaynağın güncel durumunu API'den çekin.
İlgili API Tasarımı soruları
- HTTP 401 ile 403 durum kodları arasındaki fark nedir?
- JWT nedir? Session tabanlı kimlik doğrulamadan farkı nedir?
- Idempotency nedir? Hangi HTTP metotları idempotent'tir?
- OAuth 2.0 nedir? Authorization Code (PKCE) ve Client Credentials akışları nasıl çalışır?
- Rate limiting nedir? Token bucket ve sliding window algoritmalarını açıklayın.
- gRPC nedir? REST'ten farkı nedir ve ne zaman tercih edilir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.