Webhook geliştirme, modern arka uç programlamanın en sancılı köşelerinden biridir. Stripe bir checkout.session.completed gönderiyor. GitHub bir pull_request tetikliyor. Slack slash komutuna ping atıyor. Hiçbiri laptop'unuzdaki localhost:3000'e ulaşamıyor; bu yüzden standart akış şöyle: staging'e deploy et, eventi tetikle, log'ları izle, hatayı bul, tekrar push et — yineleme başına 3-5 dakikalık ve konsantrasyonu yerle bir eden bir döngü.
Kısa özet: Nodetonet PC ajanını yükleyin, port 3000'e bir HTTPS tüneli oluşturun, stabil public URL'i Stripe veya GitHub'a bir kez yapıştırın; o andan itibaren her webhook milisaniyeler içinde yerel breakpoint'inize çarpar — yeniden deploy yok, staging gecikmesi yok.
Deploy döngüsü neden sizi zamandan fazlasına mâl oluyor
Staging'e her round-trip bir konsantrasyon kırılmasıdır. Log'lar gelene kadar zaten başka bir şeye geçmişsinizdir. Daha kötüsü, staging'de breakpoint koyamazsınız; uzaktan debugger bağlamak ya da kodu console.log ifadeleriyle doldurmak zorundasınız. Aralıklı webhook hatalarını yeniden üretmek de neredeyse imkânsızdır — idempotency hataları, sıra dışı tekrar denemeler, handler'ınız ile sağlayıcının yeniden deneme planı arasındaki yarış koşulları — çünkü belirli bir imzalı teslimi istediğinizde yerel kodunuza karşı replay edemezsiniz.
Bir tünel tüm döngüyü "dosyayı kaydet, test eventi tetikle, breakpoint'e düş" olarak çökertir. İşte webhook sağlayıcıların sahip olmanızı beklediği geliştirici deneyimi budur.
Nodetonet webhook geliştirme iş akışına nasıl oturuyor
Nodetonet'in HTTP tünel özelliği, dev makinenizdeki herhangi bir yerel portu kalıcı bir public HTTPS URL'si olarak sunar. stripe-dev.adınız.nodetonet.com gibi stabil bir subdomain seçebilir ya da kendi domain'inizi getirebilirsiniz. URL, laptop uyuduğunda değişmez, tünel ajanını yeniden başlattığınızda değişmez, kodlama oturumları arasında değişmez. Stripe, GitHub ve Slack'i bir kez yapılandırın ve webhook konfigürasyonuna bir daha dokunmayın.
- Otomatik HTTPS. Tüneli oluşturduktan saniyeler içinde Let's Encrypt sertifikası verilir. Stripe ve GitHub webhook endpoint'leri için HTTPS gerektirir — sizin tarafınızdan herhangi bir sertifika yönetimi olmaksızın çalışır. Daha fazlası için wildcard SSL sertifikaları ve otomatik yenileme yazısına bakın.
- Özel domain'ler. Webhook'larınızın
hooks.sirketiniz.dev'e gelmesini istiyorsanız bir CNAME kaydı ekleyin; Nodetonet sertifikayı otomatik olarak verir. Ekstra ücret yok, domain başına ödeme yok. - Her istek için denetim kaydı. Tünele gelen her HTTP isteği kaydedilir — kaynak IP, host, path, bayt sayısı, yanıt durumu, gecikme — 30 gün boyunca. Panel üzerinden ve REST API ile erişilebilir. Bu, kendi UI eşdeğerimizi geliştirirken ngrok'un tek tıkla Replay özelliğinin pratik alternatifidir.
- IP izin listesi. Tüneli yalnızca Stripe'ın yayımladığı webhook IP aralıklarının erişebileceği şekilde kilitleyin. Tek bir izin listesi girişiyle diğer herkes 403 alır. IP izin ve engel listeleri rehberimize bakın.
- Boştayken ödeme yok. Günün sonunda tüneli durdurun. URL hesabınıza ayrılmış olarak kalır ve yarın yeniden başlattığınızda değişmemiştir. Boştaki tüneller, Nodetonet'in ön ödemeli kredi modeli kapsamında hiçbir şey tutmaz.
Adım adım kurulum
- /auth/register'a kaydolun ve küçük bir miktar ön ödemeli kredi yükleyin.
- PC ajanını /download'dan indirip yükleyin. Windows, macOS veya Linux'ta sistem tepsisinde çalışır ve 30 MB'ın altında RAM kullanır.
- Panelde HTTP Tünelleri bölümünden yeni bir tünel oluşturun. Kaynak makine: dev PC'niz. Yerel port: 3000 (veya dev sunucunuzun kullandığı port). Public hostname: ücretsiz subdomain veya kendi domain'iniz.
- Oluşturulan HTTPS URL'ini kopyalayın. Stripe Dashboard'da Developers → Webhooks'a ya da GitHub → Settings → Webhooks'a ya da Slack'in slash komut istek URL'sine yapıştırın.
- Sağlayıcının arayüzünden bir test eventi tetikleyin. 200 ms içinde IDE'niz breakpoint'e düşer. İstediğiniz kadar iterasyon yapın.
Kod örneği — Stripe webhook imzasını doğrulama
Aşağıdaki handler localhost:3000'da çalışır. Tünel üzerinden sergileyin ve URL'ini Stripe'a yapıştırın. Kritik nokta, bu tek rotada express.raw kullanmaktır; böylece Stripe'ın HMAC imza kontrolü orijinal baytlara karşı çalışır:
// server.js
const express = require('express');
const stripe = require('stripe')(process.env.STRIPE_SECRET);
const app = express();
const SECRET = process.env.STRIPE_WEBHOOK_SECRET;
app.post('/webhook',
express.raw({ type: 'application/json' }),
(req, res) => {
let event;
try {
event = stripe.webhooks.constructEvent(
req.body, req.headers['stripe-signature'], SECRET
);
} catch (err) {
return res.status(400).send('Hatalı imza');
}
console.log('Event alındı:', event.type, event.data.object.id);
// Buraya breakpoint koyun ve yeniden deploy etmeden iterasyon yapın
res.json({ received: true });
}
);
app.listen(3000, () => console.log(':3000 dinleniyor'));
Stripe Dashboard'da endpoint olarak https://stripe-dev.adınız.nodetonet.com/webhook yazın. "Send test webhook"a tıklayın. Process 200 ms içinde eventi loglar. Handler'ı değiştirin, kaydedin; hot-reload sayesinde bir sonraki test eventi güncel kodunuza anında çarpar — yeniden deploy olmadan.
Webhook geliştirme için Nodetonet ile ngrok karşılaştırması
Her iki araç da yerel portları public HTTPS URL'lerine tünelliyor. Aşağıdaki tablo, tipik bir webhook geliştirme iş akışı için önemli olan farkları kapsamaktadır. ngrok'un kamuya açık belgelerindeki özellikleri doğru ve dürüst biçimde açıkladık — bu tek taraflı bir karşılaştırma değil.
| Özellik | Nodetonet | ngrok Ücretsiz | ngrok Personal (aylık $8) |
|---|---|---|---|
| Stabil public URL | Evet — subdomain veya özel domain | Rastgele URL, her oturumda değişir | Evet — rezerve domain |
| Otomatik HTTPS / TLS sertifikası | Evet, Let's Encrypt, wildcard | Evet | Evet |
| Özel domain (kendi CNAME) | Evet, ekstra ücret yok | Hayır | Evet |
| İstek denetim kaydı | 30 günlük log, panel + REST API | Yalnızca oturum inspector'ı | Genişletilmiş inspector |
| Tek tıkla Replay | Henüz yok (yol haritasında) | Evet (web inspector) | Evet (web inspector) |
| IP izin listesi | Evet — yerleşik, tünel başına | Hayır | Evet (IP politikası) |
| Boşta kalma maliyeti | Sıfır — ön ödemeli kredi, abonelik yok | Ücretsiz katman (sınırlı) | Kullanımdan bağımsız aylık $8 |
| Aynı anda birden fazla port | Evet — tünel başına bir port, kullanım başına ücretlendirme | Ücretsiz katmanda 1 tünel | Evet |
Dürüst özet: ngrok'un tek tıkla Replay'i, Nodetonet'in henüz sahip olmadığı özelliktir. GUI üzerinden belirli imzalı webhook teslimatlarını replay etmek günlük hata ayıklama rutininizin bir parçasıysa, bu spesifik görev için ngrok Personal şu an daha güçlü seçimdir. Stabil URL'ler, özel domain'ler, IP kısıtlaması ve maliyet verimliliği açısından Nodetonet rekabetçidir — özellikle mobil proxy'ler veya rotating proxy'ler için zaten Nodetonet kullanıyorsanız ve her şey için tek bir platform istiyorsanız. Daha fazlası için Nodetonet vs ngrok tam karşılaştırmasına bakın.
Denetim kaydını manuel Replay olarak kullanma
Tek tıkla UI yol haritasında olsa da paneldeki 30 günlük denetim kaydı, herhangi bir teslimi yeniden üretmek için ham malzemeyi zaten sunuyor. Kaydedilen her istek tam header'ları ve payload'ı içerir. Buradan, tek bir curl komutuyla yerel sunucunuza karşı yeniden tetikleyebilirsiniz:
# Belirli bir tünel isteğinin ham gövdesini getir
curl -s -H "Authorization: Bearer $NTN_KEY" "https://nodetonet.com/api/v1/proxies/prx_abc123/requests/req_xyz789" | jq -r '.data.body' | curl -X POST http://localhost:3000/webhook -H "Content-Type: application/json" -H "Stripe-Signature: $(cat .stripe-sig)" -d @-
Bir buton tıklamasından biraz daha fazla tuş gerektirir, ama çalışır ve belirli sorunlu bir teslimatı asla kaybetmemenizi sağlar. Tam sözdizimi için REST API ilk çağrı rehberine ve denetim kaydı rehberine bakın.
Tüneli webhook sağlayıcınıza kilitleme
Public HTTPS URL'i açık bırakmak ilk geliştirme aşamasında kabul edilebilir, ancak uzun süreli kurulum için erişimi bilinen kaynak IP'lerle kısıtlamalısınız. Stripe webhook teslimat IP aralıklarını yayımlar; GitHub onları https://api.github.com/meta üzerinden sunar. Bu CIDR bloklarını paneldeki tünelin IP izin listesine yapıştırın. Bilinmeyen IP'den gelen her istek dev makinenize ulaşmadan 403 alır. Bu yaklaşım, IP izin ve engel listeleri yazımızdaki yöntemle örtüşmektedir.
GitHub ve Slack webhook'larını test etme
Aynı tünel her webhook sağlayıcısına hizmet eder. https://ci.adınız.nodetonet.com/github'a yönlendirilmiş bir GitHub repository webhook'u, kod push'landığı anda yerel CI runner'ınıza event gönderir. https://slack.adınız.nodetonet.com/commands/uygulamam'a yönlendirilmiş bir Slack slash komut URL'si, normal bir staging ortamında mevcut olmayan yerel veritabanı ve dosya sistemi erişimiyle birlikte yanıt payload'ını gerçek zamanlı olarak yerel ortamınızda iterate etmenizi sağlar.
Tünel kurulduktan sonra izleme için tünel sağlığını izleme yazısına, scriptlerden programatik tünel yönetimi için Python'da programatik tünel oluşturma yazısına bakın.
Uygun olmadığı durumlar
- Günlük rutininizde tek tıkla Replay gerekiyorsa. Özellik Nodetonet'in public yol haritasında yer alıyor ancak henüz mevcut değil. Bu konuda ngrok'un web inspector'ı bugün daha iyi.
- Üç ayda bir webhook hata ayıklıyorsanız. ngrok'un ücretsiz katmanı (rastgele URL, özel domain yok) bunun için yeterli — ödeme gerekmez.
- WebSocket trafik inspector'ı UI'ı gerekiyorsa. Nodetonet WebSocket bağlantılarını doğru tünelliyor ancak WS frame'leri için görsel inspector da yol haritasında, henüz yayında değil.
Başlayın
Webhook test etmek için deploy etmekten bıktınız mı? Ücretsiz hesap oluşturun, PC ajanını /download'dan yükleyin ve ilk tünelinizi beş dakika içinde çalıştırın. Tam özellik seti için HTTP tünelleri'ne göz atın ya da herhangi bir ödeme sağlayıcısını yönlendirmeden önce tünelin canlı olduğunu doğrulamak için proxy checker'ımızı kullanın.