“Webhook vs API”, altında daha iyi bir soruyu gizleyen aramalardan biridir. Bir Stripe ödemesini veya bir GitHub entegrasyonunu hiç bağladıysanız, muhtemelen şunu merak etmişsinizdir: Bir webhook sadece bir API değil mi? Kısa cevap, bir webhook'un bir API'nin zıttı olmadığıdır. Diğer yönde çalışan bir API'dir.
Bu kılavuz, kafa karışıklığını giderir. İkisini aslında neyin ayırdığını, neden "ya o ya bu" seçimi olmadıklarını ve belirli bir iş için doğru olanı nasıl seçeceğinizi göreceksiniz. Entegrasyonlar geliştiriyor veya test ediyorsanız, Apidog, hem normal API uç noktalarını hem de webhook alıcılarını tek bir yerde tasarlamanıza, simüle etmenize ve test etmenize olanak tanır, böylece ayrım soyut olmaktan çıkar.
Kısa cevap
- Normal bir API, yani çoğu insanın bahsettiği istek-cevap türü, sizin sormanızı bekler. Siz bir istek gönderirsiniz, o bir yanıt gönderir. Zamanlamayı siz kontrol edersiniz.
- Bir webhook bunu tersine çevirir. Sağlayıcı, bir şey olduğu anda veriyi sunucunuza gönderir. Siz sormazsınız; size bildirim gelir.
- Her ikisi de HTTP üzerinden gider. Her ikisi de genellikle JSON gönderir. Bir webhook'a tam da bu nedenle genellikle "ters API" veya "push API" denir.
Yani bu webhook vs API değil. Bu çekme (pull) vs itme (push).
İnsanların "API" derken ne demek istedikleri
Biri "API'yi çağır" dediğinde, genellikle bir REST API'sinden bahsediyordur: kodunuzun bir URL'ye HTTP isteği yaptığı ve veri aldığı bir istek-yanıt arayüzü. Ne zaman çalışacağını siz kontrol edersiniz. En son sipariş durumunu mu istiyorsunuz? `GET /orders/123` öğesini çağırırsınız ve yanıtı okursunuz. Siz sormadıkça hiçbir şey olmaz.
Bu, çekme (pull) modelidir. Basit, öngörülebilir ve isteğe bağlı veriye ihtiyaç duyduğunuzda iyi bir uyum sağlar. Dezavantajı: bir değişikliği yakalamak için sürekli sormanız gerekir. Bir isteğin ve yanıtın nasıl oluşturulduğu hakkında bilgi almak isterseniz, API istek yapısını anlama makalesine bakın.
Webhook nedir
Bir webhook, kullanıcı tanımlı bir HTTP geri çağırmasıdır. Sağlayıcıya bir URL kaydedersiniz, örneğin `https://uygulamaniz.com/webhooks/stripe`. Kendi tarafında bir olay meydana geldiğinde, sağlayıcı olay verileriyle birlikte URL'nize bir HTTP POST gönderir.
Artık siz arayan değil, alıcısınız. Sunucunuz bekler ve sağlayıcı, size söylemeye değer bir şey olduğunda bir güncelleme gönderir. Bu, itme (push) modelidir. Webhook'lar, Stripe'ın bir ödemenin gerçekleştiğini size nasıl bildirdiği, GitHub'ın kodun nasıl gönderildiğini size nasıl bildirdiği ve Slack'in birinin bir komut çalıştırdığını uygulamanıza nasıl bildirdiğidir. Alıcı tarafına daha derinlemesine bir bakış için, webhook API nedir makalesine bakın.
Webhook vs API: Temel fark
| Normal API (REST) | Webhook | |
|---|---|---|
| Alışverişi kim başlatır | Siz (istemci) | Sağlayıcı (sunucu) |
| Model | İstek-yanıt (çekme) | Olay odaklı (itme) |
| Zamanlama | Siz her aradığınızda | Bir olay tetiklendiği anda |
| Yön | Siz sağlayıcıyı ararsınız | Sağlayıcı sizin uç noktanızı arar |
| En iyi olduğu durumlar | İsteğe bağlı veri ve sizin başlattığınız eylemler | Tahmin edemediğiniz olaylara tepki verme |
| Ana maliyet | Değişiklikleri yakalamak için yoklama yapmalısınız | Halka açık bir uç noktayı barındırmalı ve güvenceye almalısınız |
En önemli satır birincisidir. Çağrının yönü tüm farkı yaratır. Geriye kalan her şey bundan kaynaklanır.
“Bir webhook sadece bir API değil mi?” Dürüst cevap
Evet ve hayır, ve nüansı doğru anlamaya değer.
Bir webhook, herhangi bir API gibi aynı yapı taşlarını kullanır: HTTP, bir URL, başlıklar ve bir JSON gövdesi. Bu anlamda bir webhook bir API çağrısıdır; sağlayıcı istemci olarak, sizin uç noktanız ise sunucu olarak hareket eder. Birçok ekip, webhook'larını REST uç noktalarının hemen yanında belgeler. OpenAPI 3.1 hatta bunları tanımlamak için özel bir `webhooks` alanı ekledi ve Apidog bunları aynı şekilde yakalayabilir (bkz. OpenAPI geri çağrıları ve webhook'lar).
Dolayısıyla doğru ifade şudur: bir webhook, ayrı bir teknoloji değil, belirli bir API iletişim kalıbıdır. İnsanlar "webhook vs API" dediğinde, aslında bir sağlayıcının istek-yanıt API'sini, aynı sağlayıcının olay gönderme mekanizmasıyla karşılaştırıyorlardır. Her ikisi de aynı ürün yüzeyine aittir.
Hangisini ne zaman kullanmalı
Normal bir API çağrısına şu durumlarda başvurun:
- Belirli bir anda verilere ihtiyacınız var, örneğin bir sayfa yüklerken veya bir rapor çalıştırırken.
- Bir eylem gerçekleştiriyorsunuz: bir ödeme oluşturma, bir kaydı güncelleme, bir mesaj gönderme.
- Veriler sağlayıcının değil, sizin zamanlamanıza göre değişir.
Bir webhook'a şu durumlarda başvurun:
- Bir şeyin değiştiği anı bilmeniz gerekiyor ve ne zaman olacağını tahmin edemiyorsunuz.
- Yoklama yapmak israf olurdu, örneğin günde iki kez olan bir olay için her birkaç saniyede bir kontrol etmek gibi.
- Zamanlama sağlayıcıya aittir: bir ödeme tamamlanır, bir derleme biter, bir dosya işlenir.
Eğer gerçek seçiminiz webhook'lar ile bir uç noktayı sürekli yeniden kontrol etmek arasındaysa, bu özel takasın kendi kılavuzu vardır: webhook'lar vs yoklama.
Birlikte çalışırlar ve genellikle de öyle yaparlar
Webhook-API karşılaştırması pratikte işe yaramaz çünkü gerçek entegrasyonlar ikisini de kullanır. Stripe klasik bir örnektir:
- Bir ödeme amacı oluşturmak için Stripe API'yi (istek-yanıt) çağırırsınız.
- Stripe bunu arka planda işler.
- Stripe, ödeme başarılı olduğunda veya başarısız olduğunda webhook'unuzu (olay gönderme) çağırır.
Eylemi başlatmak için API'ye ve sonucu öğrenmek için webhook'a ihtiyacınız vardı. Hiçbiri diğerinin yerini almaz. Güvenilir bir entegrasyon neredeyse her zaman eylemler için giden bir API'yi olaylar için gelen bir webhook ile eşleştirir. Daha geniş tasarım deseni için, olay odaklı API'ler nasıl oluşturulur makalesine bakın.
Webhooks vs WebSockets vs yoklama
Üç terim birbirine karışır, bu yüzden her birinin tek satırlık versiyonu şöyledir:
- Webhook vs yoklama: ikisi de sizi güncel tutar; yoklama tekrar tekrar sorar, bir webhook kendisine söylenmesini bekler.
- Webhook vs WebSocket: bir webhook olay başına tek bir HTTP POST'tur; bir WebSocket, sürekli akışlar için kalıcı, iki yönlü bir bağlantıdır. Tam ayrım için webhook vs WebSocket makalesine bakın.
- Webhook vs API: buradaki konu; çağrının yönüne bağlıdır.
Apidog ile her ikisini de nasıl tasarlar ve test edersiniz
Webhook'lara karşı geliştirme yapmak zordur. Uç noktanızın gerçek POST istekleri alması gerekir, böylece güvenebilirsiniz ve sağlayıcılar sizin zamanlamanıza göre test olayları tetiklemez.
Apidog ilişkinin her iki tarafını da yönetir:
- Görsel test senaryoları ve iddialarla istek-yanıt uç noktalarınızı tasarlayın ve test edin, komut dosyasına gerek yok.
- Kendi webhook alıcınıza özel olarak hazırlanmış bir POST gönderin, böylece gerçek olaylar gelmeden işleyiciyi oluşturabilir ve doğrulayabilirsiniz.
- Giden webhook'larınızı REST uç noktalarınızla birlikte OpenAPI ile belgeleyin, böylece tüketiciler tüm sözleşmeyi görür.
Tasarım, taklit, test ve belgeler tek bir çalışma alanında yer aldığından, bir webhook alıcısını diğer herhangi bir API sözleşmesi gibi ele alırsınız. Her ikisini de tek bir yerde oluşturmak ve test etmek için Apidog'u indirin.
SSS
Bir webhook bir API midir? Bir webhook, ayrı bir teknoloji değil, bir API iletişim kalıbıdır. Herhangi bir API çağrısı gibi HTTP, bir URL ve bir JSON yükü kullanır. Fark, sağlayıcının sizin uç noktanızı çağırmasıdır, sizin onlarınkini çağırmanız yerine; bu yüzden bazı insanlar buna ters API der.
Bir webhook'u API olmadan kullanabilir misiniz? Kendi başına nadiren. Çoğu iş akışı, bir şeyi başlatmak için bir sağlayıcının API'sini çağırır, ardından geri bildirim almak için bir webhook'a güvenir. İkisi birbirini tamamlar. Alıcı tarafının nasıl oluşturulduğu hakkında bilgi için webhook API nedir makalesine bakın.
Webhook'lar API'lerden daha mı hızlıdır? Olaylara tepki vermek için evet, çünkü bir şey olduğu anda bildirim alırsınız, yoklama yapıp bir sonraki kontrolünüzü beklemezsiniz. İsteğe bağlı veri almak için doğrudan bir API çağrısı doğru araçtır.
Webhook'lar REST API'lerinin yerini mi alıyor? Hayır. Farklı ihtiyaçları karşılarlar: isteğe bağlı istekler ve eylemler için REST, gerçek zamanlı olay bildirimleri için webhook'lar. Üretim sistemleri genellikle ikisini birden çalıştırır.
Bir webhook güvenli midir? Bir webhook halka açık bir uç nokta ifşa eder, bu nedenle her isteğin gerçek olduğunu doğrularsınız, genellikle sağlayıcının gönderdiği bir imzayı kontrol ederek. Webhook imza doğrulama makalesine bakın.
Sonuç
“Webhook vs API” yanlış bir çerçeve olduğu ortaya çıktı. Normal bir API, sizin sormanızı bekler; bir webhook, bir şey olduğu anda size söyler. Biri çeker, diğeri iter ve çoğu entegrasyon ikisini birlikte çalıştırır. Zamanlamaya siz sahip olduğunuzda API çağrısını, sağlayıcı sahip olduğunda ise webhook'u seçin.
Her iki tarafı da geliştirmeye hazır olduğunuzda, uç noktalarınızı ve webhook alıcılarınızı Apidog'da birlikte tasarlayın, taklit edin ve test edin.
