Geliştirici sohbetlerinde, ödeme sistemi entegratörlerinde ve dış API'lerle ilk kez karşılaşanlarda tekrar tekrar ortaya çıkan yaygın bir yanılgı var. Kulağa şöyle geliyor: "Bir proxy alırım, webhook da ona gelir". Beklenti anlaşılır, neredeyse içgüdüsel. Proxy bana bir adres veriyorsa, o adrese ulaşılabilir, değil mi? Maalesef hayır. Ve bu hata insanlara saatlerce hata ayıklamaya, sağlayıcıya yanlış hata raporları göndermeye ve kaçırılan teslim tarihlerine mal oluyor.

Bu rehberde konuyu temelinden ele alacağız. Proxy giden istekler konusunda neden mükemmel çalışırken, hizmetinizi dışarıdan erişilebilir yapma konusunda neden ilkesel olarak yetersiz kaldığını. Bağlantı yönü düzeyinde neler olduğunu. Mobil ağdaki abone adresine neden dışarıdan adreslenemediğini. Ve en önemlisi, webhook almanız gerekiyorsa gerçekte ne kullanmanız gerektiğini: genel adresli bir sunucu, ters tünel, sağlayıcı tarafında kuyruk veya abone olmak yerine yoklama.

Materyal mühendislik diliyle, kod örnekleri ve hazır karar verme çerçeveleriyle yazıldı. Yönlendirici yapılandırmasını ve port yönlendirmeyi bilerek anlatmıyoruz: bu komşu bir konu ve sadece sınırını belirteceğiz. Bizim görevimiz farklı: modeli anlamak ve doğru aracı seçmek. Başlayalım.

Temeller: proxy nedir ve webhook aslında nedir

Proxy'nin ne yapıp ne yapamayacağını tartışmadan önce terimler üzerinde anlaşalım. Bu olmadan konuşma beklentiler ve mitlerden oluşan bir karmaşaya dönüşür.

Basitçe proxy

Proxy sunucusu, giden istekleriniz için bir aracıdır. Programınız bir siteye veya API'ye başvurmak ister. Doğrudan bağlanmak yerine proxy'ye bağlanır, proxy de kendi adına hedefe gidip size yanıtı döndürür. Buradaki anahtar kelime giden. Başlatan taraf her zaman sizsiniz.

Proxy kullanarak elde ettikleriniz:

  • Hedef sunucu sizin kendi IP'niz yerine proxy'nin IP adresini görür.
  • Çıkışın coğrafyasını ve ağ türünü (örneğin mobil) yönetebilirsiniz.
  • Yükü dağıtabilir ve genel veri toplama veya coğrafyaya bağlı içeriği test etme gibi yasal görevler için adresleri döndürebilirsiniz.

Proxy'nin size VERMEDİĞİ şey: üçüncü taraflardan gelen bağlantıları dinleyecek bir port açmaz ve makinenizi genel olarak adreslenebilir bir sunucuya dönüştürmez. Bu temeldir. Aklımızda tutalım ve geri dönelim.

Basitçe webhook

Webhook bir geri çağırma mekanizmasıdır. Bir üçüncü taraf hizmete bir URL kaydedersiniz ve bir olay gerçekleştiğinde (ödeme geldi, sipariş durumu değişti, belge güncellendi), hizmet bu URL'ye kendisi bir HTTP isteği başlatır. Yani dış hizmet istemci olur, siz ise dinleyen ve yanıt veren sunucu olmalısınız.

Rollerin tersine dönüşüne dikkat edin. Proxy durumunda siz dışarıya vuran istemcisiniz. Webhook durumunda dış dünya size vuran istemcidir. Bunlar iki zıt yöndür. Ve karışıklık tam da burada doğar.

Neden karıştırılıyorlar

Her iki kavram da "HTTP", "adres", "istek" kelimeleriyle ilişkilidir. Kişi "proxy bana IP veriyor" duyar ve mantıklı ama yanlış bir sonuca varır: IP varsa, ona webhook gönderilebilir. Sorun şu ki, bir çıkış IP adresinin varlığı ile genel olarak dinleyen bir portun varlığı farklı şeylerdir. Benzetme: taksi çağırmak için aradığınız bir taksi şirketi telefon numaranız var. Ama bu, herhangi birinin bu numaradan size ulaşabileceği ve tam olarak size bağlanacağı anlamına gelmez. Numara size değil, çağrı merkezine ait.

Bağlantı yönü: giden ile gelen arasındaki fark

Bu, tüm makalenin merkezi fikridir. Sadece bir bölüm öğrenecekseniz, bu olsun.

Kim kime vuruyor

Her TCP bağlantısının bir başlatıcısı ve bir alıcı tarafı vardır. Başlatıcı bağlantıyı açar (connect yapar), alıcı taraf onu dinler (listen ve accept yapar). İki şemayı inceleyelim.

Proxy üzerinden giden istek şeması

Zinciri ok işaretleri gibi kelimelerle hayal edelim:

  • Uygulamanız (başlatıcı) → bağlantı açar → Proxeon proxy sunucusuna.
  • Proxy sunucusu (artık o başlatıcı) → bağlantı açar → hedef API'ye.
  • Yanıt aynı yoldan, zaten açılmış bağlantı üzerinden geri döner.

Dikkat edin: her iki bağlantı da içeriden dışarıya doğru başlatılmıştır. Dışarıdan hiç kimse sizinle bağlantı başlatmaz. Her zaman ilk vuran sizsiniz. Proxy bu modele mükemmel uyar, çünkü giden istekler için bağlantı açabilmek yeterlidir, onları kabul etmek değil.

Gelen webhook şeması

Şimdi başka bir hikaye:

  • Dış hizmet (başlatıcı) → bağlantı açmak ister → hizmetinize.
  • Bunun için birinin listen ve accept yaptığı bir genel olarak erişilebilir adres ve port gerekir.
  • Hizmetiniz bağlantıyı kabul eder, istek gövdesini okur, 200 durumuyla yanıt verir.

Burada başlatıcı dışarıdadır. Yani internetten erişilebilen bir noktaya ihtiyacınız var. Giden istekleriniz için istemci modunda çalışan bir proxy böyle bir nokta değildir. Başkalarının hizmetlerinden size doğru gelen bağlantıları dinlemez.

Yön neden tek başına "ters çevrilemez"

Bazen sorulur: proxy'yi "döndürüp" kabul edecek hale getiremez miyiz? Teknik olarak yönü tersine çevirmek mümkündür, ama bu tamamen farklı bir ürün ve farklı bir mimari olur: ters proxy, tünel veya sunucu. Giden trafik için sıradan bir istemci proxy'si tek bir tıklamayla gelen bağlantı alıcısına dönüşmez. Bu, bir merdivenden diğer yöne doğru yürüyen bant gibi çalışmasını istemeye benzer: her ikisi de basamaklarla ilgilidir, ama cihazları farklıdır.

İstemci proxy'si neden port dinlemez ve genel adres vermez

Teknik mekaniğe daha derinlemesine bakalım. İstemci proxy'si tam olarak neden bir kabul noktası olamaz.

Proxy istemcisi ve proxy sunucusu: rolleri karıştırmayın

"Proxy satın aldığınızda" bir proxy sunucusuna erişim elde edersiniz: adres, port, kullanıcı adı ve şifre. Uygulamanız proxy istemcisi olarak hareket eder: sunucuya bağlanır ve giden istekleri proxy'lemesini ister. Ayarlarda belirttiğiniz port, sizin bağlandığınız proxy sunucusunun portudur, size adreslenen webhook'ları dinleyecek bir port değil.

Python'da proxy üzerinden normal bir istek örneğine bakalım:

import requests
proxies = {
"http": "http://user:pass@gateway.proxeon.net:8080",
"https": "http://user:pass@gateway.proxeon.net:8080",
}
resp = requests.get("https://api.example.com/v1/orders", proxies=proxies, timeout=15)
print(resp.status_code, resp.json())

Burada her şey gidendir. Kodunuz proxy ile bağlantı başlatır, proxy api.example.com'a gider. Burada webhook almak için dinleyen bir soket görünmez ve görünemez. 8080 portu Proxeon altyapısına aittir ve size doğru gelen başkalarının webhook'larını almak için değil, giden isteklerinizi almak için tasarlanmıştır.

"Port dinlemek" ne demektir ve neden ayrı bir işlevdir

Gelen bağlantıları kabul etmek için bind (adrese ve porta bağlama), listen (kabul etmeye hazır olma) ve accept (belirli bir bağlantıyı kabul etme) sistem çağrılarını yapan bir süreç gerekir. Webhook kabul edebilen minimum bir sunucu örneği:

from flask import Flask, request
app = Flask(__name__)
@app.post("/webhook")
def webhook():
event = request.get_json(silent=True) or {}
# hızlıca kabulü onayla
return "", 200
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000)

Bu süreç 8000 portunu dinler. Ama sadece dinlemek yeterli değil. Bu porta internetten ulaşılabilmesi gerekir. Ve bu, genel adres ve ağ erişilebilirliği sorunudur ve istemci proxy'si bunu sizin için çözmez.

Tek bir cümlede kilit fark

Proxy size istediğiniz adres altında internete çıkış verir. Webhook ise internetten sizin adresinize bir giriş gerektirir. Çıkış ve giriş eşanlamlı değil, ayna görüntüsü işlemlerdir. İstemci proxy'si çıkışla ilgilenir.

Mobil ağlar ve ortak adres: abone adresi neden ilkesel olarak dışarıdan adreslenemez

Özellikle mobil proxy'lerle çalışıyorsanız ayrı ve çok önemli bir konu. Burada karışıklık hücresel ağların doğasıyla daha da artıyor.

Birçok kişi için tek adres: ortak çıkış nasıl çalışır

Mobil ağlarda aboneler, kural olarak, kendi genel IP adreslerini almazlar. Operatör, birçok abonenin küçük bir genel adres havuzunu paylaştığı adres dönüşümü teknolojisini kullanır. Akıllı telefonunuz veya modeminiz özel aralıktan bir iç adres alır ve dışarıya hepsi operatörün ortak ağ geçidi üzerinden çıkar. Dışarıda internet operatörün adresini görür, sizin kişisel adresinizi değil.

Bunun pratikte anlamı:

  • Abone adresiniz operatör ağındaki iç adrestir. Küresel internetten yönlendirilemez.
  • İsteseniz bile, dış hizmetin tam olarak cihazınıza ulaşması için mobil bağlantıda basitçe "port açamazsınız".
  • Web sitelerinin gördüğü genel adres operatörün altyapısına aittir ve aynı anda birçok abone arasında paylaşılır.

Bu neden webhook almayla ilkesel olarak uyumsuzdur

Tek bir resepsiyon bankosu olan devasa bir ofis merkezi hayal edin. Dışa giden tüm aramalar tek bir ortak şehir numarası üzerinden geçer. İstediğiniz kişiyi arayabilirsiniz (giden arama çalışır). Ancak dışarıdan biri bu ortak numarayı ararsa, resepsiyondaki görevliye ulaşır, yedinci kattaki masanızdaki size değil. Resepsiyon aramanın kime ait olduğunu bilmez, çünkü arayan kişi dahili numarayı belirtmemiştir ve bu şemada sizin dahili numaranız da yok.

Mobil çıkış tam olarak böyle çalışır. Giden bağlantı onu kimin başlattığını hatırlar, bu yüzden yanıt size geri döner. Ancak dışarıdan yeni bir gelen bağlantı, binlerce aboneden hangisine ait olduğuna dair bilgi içermez. Bu nedenle, operatörün genel adresine gönderilen bir webhook fiziksel olarak tam olarak cihazınıza ulaştırılamaz. Bu belirli bir tarifenin sınırı değil, mimarinin bir özelliğidir.

Mobil proxy ve webhook'lar: gerçek fayda nerede

Proxeon mobil proxy'si mobil adres altında giden istekler görevini mükemmel şekilde çözer. Bu yasal senaryolarda talep görür: hizmetin farklı bölgelerdeki mobil kullanıcılara nasıl göründüğünü kontrol etme, genel bilgi toplama, coğrafya mantığını test etme, ağ türlerini ayırt eden API'lerle çalışma. Ancak webhook almak girişle ilgilidir ve ortak mobil adres üzerinden giriş imkansızdır. Yani almak için ayrı bir bileşen gerekir. Bu da bir sonraki konu.

Webhook alma görevini gerçekte ne çözer

Proxy'nin neden alıcı olmadığını anladık. Şimdi yapıcı kısma geçelim. Dört işleyen yaklaşım var ve neredeyse her zaman bunlardan birini veya bir kombinasyonunu seçersiniz.

Yaklaşım 1: genel adresli sunucu

En doğrudan ve öngörülebilir yöntem. Kalıcı genel adresi ve alan adı olan bir makinede hizmet başlatırsınız, TLS yapılandırırsınız ve gelen HTTPS isteklerini dinlersiniz. Dış hizmet webhook'u alan adınıza gönderir, siz kabul edip yanıt verirsiniz.

Ne zaman seçmeli:

  • Ayrılmış bir sunucunuz veya bulut sanal makineniz var ya da olabilir.
  • Minimum ara halka ve maksimum kontrol istiyorsunuz.
  • Kararlılık, öngörülebilir gecikme ve kendi güvenlik kurallarınız gerekli.

Minimum ama doğru bir webhook işleyicisi, imza doğrulamasıyla şöyle görünür:

import hmac, hashlib
from flask import Flask, request, abort
app = Flask(__name__)
SECRET = b"your_shared_secret"
def valid_signature(body, signature):
digest = hmac.new(SECRET, body, hashlib.sha256).hexdigest()
return hmac.compare_digest(digest, signature or "")
@app.post("/webhook")
def webhook():
body = request.get_data()
sig = request.headers.get("X-Signature")
if not valid_signature(body, sig):
abort(401)
# hızlıca kabul et ve işleme kuyruğuna koy
enqueue(body)
return "", 200
def enqueue(body):
# broker veya DB'ye koy, ağır mantığı asenkron yap
pass
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000)

Olgun işleme dair iki ilkeye dikkat edin. Birincisi: yalnızca gerçek webhook'ları kabul etmek için imzayı doğrulayın. İkincisi: hızlıca 200 durumuyla yanıt verin ve ağır işi asenkron kuyruğa taşıyın, aksi halde gönderici sizi zaman aşımı nedeniyle erişilemez saymaya başlar ve teslimatı tekrarlamaya girişir.

Yaklaşım 2: ters tünel

Genel adresli kendi sunucunuz yoksa ve hizmet yerel bir makinede veya ortak adres arkasında çalışıyorsa, ters tünel yardımcı olur. Fikir güzel ve tartıştığımız yönler modeline tamamen uyuyor.

Makineniz kendisi genel bir tünel noktasına giden bir bağlantı başlatır. Bu bağlantı açık kalır. Dışarıdan tünelin genel adresine bir webhook geldiğinde, zaten kurulmuş kanal üzerinden size iletilir. Güzelliğe bakın: dışarıdan hâlâ kimse özel makinenizle bağlantı başlatmaz. Tüneli başlattığınızda başlatıcı sizdiniz. Webhook ise zaten açık kanalın içinde ters yoldan gelir.

Ne zaman seçmeli:

  • Entegrasyonları yerel olarak geliştirme ve hata ayıklama.
  • Genel sunucu tutma imkanı veya isteği yok.
  • Geçici veya esnek bir kabul noktası gerekli.

Burada uygulanabilirlik sınırını anlamak önemlidir: tünel yazılımının yapılandırmasını, yönlendirmeyi ve yönlendiricide port yönlendirmeyi bilerek anlatmıyoruz, bu ayrı bir mühendislik konusudur. Ana fikir, tünelin giriş görevini önceden açılmış giden bağlantı sayesinde çözmesidir.

Yaklaşım 3: sağlayıcı tarafında kuyruk

Birçok ciddi platform yalnızca webhook değil, kendi tarafında mesaj kuyruğu veya olay veri yolu da sunar. Size vurmaları yerine, siz kendi giden bağlantınızla onların kuyruğundan olayları çekersiniz. Bu, proxy modeline mükemmel uyar çünkü yine her şey gidendir.

Kavramsal olarak nasıl çalışır:

  • Sağlayıcı olayları kendi kuyruğuna veya konusuna koyar.
  • Tüketiciniz kuyruğa bağlanır ve mesajları okur.
  • İşledikten sonra alındıyı onaylarsınız ve mesaj kuyruktan silinir.

Muazzam avantaj: tüketiciniz kısa süre çökerse, olaylar kaybolmaz, kuyrukta bekler. Bu, webhook'ların ana sorununu ortadan kaldırır: alıcı erişilemez durumdayken kayıp. Ve konumuz için önemli olan, kuyruğa yapılan tüm başvurular dışarıya gider, yani genel adresle ilgili hiçbir zorluk olmadan Proxeon proxy üzerinden geçebilir.

Yaklaşım 4: abone olmak yerine yoklama

Üçüncü taraf hizmette ne kuyruk ne de uygun bir tünel varsa ve webhook'u alamıyorsanız, klasik çözüm kalır: yoklama (polling). Periyodik olarak API'ye yeni olay olup olmadığını kendiniz sorarsınız. Bu da giden isteklerdir ve proxy üzerinden mükemmel çalışır.

Yoklama sıklıkla ilkel sayılarak hafife alınır. Aslında iyi tasarlanmış yoklama güvenilirdir, işletmesi kolaydır ve hiçbir genel altyapı gerektirmez. Tek ciddi düşmanı istek limitleridir. Bunları nasıl ihlal etmeyeceğiniz bir sonraki büyük bölümde.

Yaklaşım nasıl seçilir: kısa bir çerçeve

  1. Genel sunucunuz var ve minimum gecikme mi gerekiyor? Doğrudan genel adresli sunucuyu seçin.
  2. Sunucu yok ama hemen şimdi kabul gerekli, özellikle geliştirme için? Ters tünel.
  3. Sağlayıcı kuyruk veya olay veri yolu sunuyor mu? Her zaman onu tercih edin, bu en dayanıklı seçenektir.
  4. Yukarıdakilerin hiçbiri yok ama okuma için API var mı? Proxy üzerinden yoklama.

Webhook yerine yoklama: limitlere takılmamak için nasıl tasarlanır

Yoklama, gelen kabul imkansız olduğunda güvenilir yedek pistinizdir. Ancak naif uygulama hızla istek sayısı sınırlarına takılır ve reddedilmeye başlar. Doğru tasarlayalım.

Temel naif sürüm ve neden kötü

Yeni başlayanlar buna benzer bir şey yazar:

import time, requests
proxies = {"https": "http://user:pass@gateway.proxeon.net:8080"}
while True:
r = requests.get("https://api.example.com/v1/events", proxies=proxies, timeout=15)
handle(r.json())
time.sleep(1)
def handle(data):
pass

Burada sorun ne? Bir saniyelik sabit duraklama, olay olsun olmasın günde 86400 istek anlamına gelir. Limiti boşuna yakarsınız. Bir hata durumunda döngü sunucuya aynı sıklıkta vurmaya devam eder. Limit başlıklarının hiçbir hesaba katılması yok. Bu, hız sınırına takılmaya giden doğrudan bir yoldur.

İlke 1: imleçli artımlı yoklama

Her şeyi toplu çekmeyin. Yalnızca bildiğiniz son olaydan sonra ortaya çıkanları isteyin. Çoğu API, son olayın imlecini veya zaman damgasını verir. Bunu saklayın ve sonraki istekte iletin.

state = load_cursor() # örneğin son olayın id'si
params = {"since": state} if state else {}
r = requests.get("https://api.example.com/v1/events", params=params,
 proxies=proxies, timeout=15)
events = r.json().get("items", [])
for e in events:
process(e)
state = e["id"]
save_cursor(state)

Böylece yalnızca yeni olanı alırsınız, trafik hacmi minimumdur ve kopyalar neredeyse imkansızdır.

İlke 2: uyarlanabilir aralık

Olaylar akış halindeyken sık, sessizlik olduğunda seyrek yoklayın. Basit bir sezgisel kural: yanıtta olay varsa duraklamayı kısaltın, boşsa makul bir maksimuma kadar artırın.

min_delay, max_delay = 2, 60
delay = min_delay
while True:
events = poll_once()
if events:
delay = min_delay
else:
delay = min(delay * 2, max_delay)
time.sleep(delay)

Bu üstel gevşeme, sakin dönemlerde boş istek sayısını keskin biçimde azaltır. Duyarlılığı korurken yükün ne kadar düştüğüne şaşıracaksınız.

İlke 3: limit başlıklarına saygı gösterin

İyi API'ler limit durumu hakkında başlıklar döndürür: kaç istek kaldı ve sayaç ne zaman sıfırlanacak. Bunları okuyun ve reddedildikten sonra değil, önceden yavaşlayın.

r = requests.get(url, proxies=proxies, timeout=15)
remaining = int(r.headers.get("X-RateLimit-Remaining", "1"))
reset = int(r.headers.get("X-RateLimit-Reset", "0"))
if remaining <= 1 and reset:
wait = max(reset - int(time.time()), 1)
time.sleep(wait)

İlke 4: 429 ve tekrarları doğru işleme

Sunucu yine de 429 (çok fazla istek) koduyla yanıt verdiyse, onu görmezden gelmeyin. Retry-After başlığına bakın ve belirtilen süre kadar bekleyin. Ağ hataları için, senkron dalgalar oluşturmamak için üstel gecikme ve jitter ile tekrar uygulayın.

import random
def get_with_backoff(url, attempts=5):
delay = 1
for i in range(attempts):
r = requests.get(url, proxies=proxies, timeout=15)
if r.status_code == 429:
retry_after = int(r.headers.get("Retry-After", delay))
time.sleep(retry_after)
continue
if r.status_code >= 500:
time.sleep(delay + random.uniform(0, delay))
delay = min(delay * 2, 30)
continue
return r
raise RuntimeError("too many failures")

İlke 5: işlemenin idempotentliği

Yoklamada aynı olayın tekrarları mümkündür, özellikle imleç sınırlarında. İşlemeyi idempotent yapın: işlemden önce, bu olayı zaten işleyip işlemediğinizi kimliğine göre kontrol edin. Bu, çift ücretlendirmelere, bildirim kopyalarına ve diğer sıkıntılara karşı korur.

def process(event):
if already_seen(event["id"]):
return
do_business_logic(event)
mark_seen(event["id"])

Güvenilir yoklama kontrol listesi

  • İmleç veya zaman damgası kullanın, yalnızca yeni olanı çekin.
  • Üstel gevşemeli uyarlanabilir aralık uygulayın.
  • Limit başlıklarını okuyun ve saygı gösterin.
  • 429 ve Retry-After'ı doğru işleyin.
  • Ağ hatalarında jitter'li tekrar uygulayın.
  • Olay işlemenin idempotentliğini sağlayın.
  • Gecikmeyi görebilmek için imleci ve metrikleri günlükleyin.
  • Entegrasyon gerektiriyorsa giden istekleri doğru coğrafya ve ağ türü için Proxeon proxy üzerinden geçirin.

Proxy'nin webhook'ların yanında yine de gerekli olduğu yer

Proxy webhook alıcısı değilse, bu görevde hiç işe yaramaz gibi görünebilir. Durum böyle değil. Proxy gözle görülür bir rol oynar, ama sürecin diğer tarafında.

Giden yanıtlar ve geri başvurular

Bir webhook'un işlenmesi nadiren basit bir 200 ile biter. Genellikle olaya yanıt olarak bir üçüncü taraf API'ye gitmeniz gerekir: alındıyı onaylamak, nesne ayrıntılarını istemek, başka bir platformda durumu güncellemek. Tüm bu başvurular gidendir ve tam da burada Proxeon proxy yerinde ve faydalıdır.

def on_payment_event(event):
order_id = event["order_id"]
# proxy üzerinden ayrıntılar için giden istek
r = requests.get(f"https://api.partner.com/orders/{order_id}",
 proxies=proxies, timeout=15)
details = r.json()
update_internal_state(order_id, details)

Bu başvurularda özellikle proxy neden

  • Kararlı çıkış coğrafyası. Bazı API'ler isteğin bölgesine bağlı olarak içerik veya fiyat döndürür. Proxy, gerekli konumdan yasal ve öngörülebilir şekilde başvurmanızı sağlar.
  • Gerekli ağ türü. Belirli hizmetler mobil ve sabit adreslerden gelen isteklere farklı yanıt verir. Mobil proxy, göreviniz için doğru ağ profilini sağlar.
  • Akış ayrımı. Giden başvuruları yönetilen bir ağ geçidine taşıyarak izleme, teşhis ve yük kontrolünü basitleştirirsiniz.

Kuyruk ve API yoklamasını proxy üzerinden yapmak

Belirttiğimiz gibi, kuyruk ve yoklama yaklaşımları tamamen giden bağlantılar üzerine kuruludur. Yani tüm bu trafik doğal olarak proxy üzerinden geçer. Sonuçta tutarlı bir mimari ortaya çıkar: olay kabulü sunucu, tünel, kuyruk veya yoklama ile çözülür, dış sistemlerle tüm giden iletişim yönetilen proxy ağ geçidi üzerinden gider. Her araç, yaratıldığı işi yapar.

Olgun bir entegrasyonun mini mimarisi

  1. Olay kabul noktası: genel sunucu, tünel, kuyruk veya yoklama.
  2. Hızlı kabul ve iç kuyruğa koyma, gecikmesiz 200 yanıtı.
  3. Asenkron çalışanlar kuyruğu okur ve iş mantığını yürütür.
  4. Dış API'lere tüm giden başvurular, doğru coğrafya ve ağ türüyle Proxeon proxy üzerinden gider.
  5. İdempotentlik, jitter'li tekrar, metrikler ve gecikme uyarıları.

Yaygın hatalar ve bunlardan kaçınma yolları

En sık basılan tırmıkları toplayalım. Bu listeyle kendinizi kontrol edin.

Hata 1: proxy adresine webhook beklemek

En yaygını. Kişi üçüncü taraf hizmetin webhook ayarlarında proxy adresini belirtir ve teslimatı bekler. Hiçbir zaman gelmez, çünkü bu çıkış adresidir, kabul noktası değil. Çözüm: dört işleyen kabul yaklaşımından birini kullanın ve çıkışı girişle karıştırmayın.

Hata 2: mobil adresi genel olarak adreslenebilir yapmaya çalışmak

Dışarıdan belirli bir mobil aboneye ulaşma çabaları, operatörün ortak çıkışı nedeniyle mahkumdur. Buna zaman harcamayın. Kabul için genel sunucu, tünel kullanın veya webhook'tan vazgeçip yoklama ve kuyruk lehine karar verin.

Hata 3: webhook işleyicisi içinde ağır iş

200 yanıtından önce uzun mantığı senkron olarak yürütürseniz, gönderici sizi zaman aşımı nedeniyle erişilemez sayar ve tekrarlar göndermeye başlar. Kopya fırtınası alırsınız. Çözüm: anında kabul edin ve kuyruğa koyun, ağır işi asenkron yapın.

Hata 4: imza doğrulamasının olmaması

Kimlik doğrulaması olmayan açık uç nokta, herkesten her şeyi kabul eder. Bu bir risktir. Her zaman gelen webhook'un imzasını ortak sırla karşılaştırın, imzasız istekleri reddedin.

Hata 5: limitleri hesaba katmayan naif yoklama

Sabit saniyelik duraklama ve limit başlıklarının yok sayılması, hız sınırı redlerine yol açar. Uyarlanabilir aralık, imleç ve Retry-After'a saygı uygulayın.

Hata 6: idempotentliğin olmaması

Hem webhook'lar hem de yoklama aynı olayı iki kez teslim edebilir. Kimlik bazlı koruma olmadan çift işlem riski taşırsınız. Olayı daha önce işleyip işlemediğinizi her zaman kontrol edin.

Hata 7: gelen ve gideni ayırmadan tek düğümde karıştırmak

Olay kabulü ve giden başvurular bir yığına atıldığında teşhis kâbusa dönüşür. Rolleri ayırın: kabul noktası ayrı, proxy üzerinden giden ağ geçidi ayrı.

Hata 8: sessiz kabul hataları

Kabul noktası çöktüyse ve fark etmediyseniz, olaylar sessizce kaybolur. Sorunu ilk öğrenen siz olmak için uç nokta kullanılabilirliğini ve kuyruk gecikmesini izleyin.

Araçlar ve kaynaklar

Pratikte ne kullanmalı, katmanlara ayıralım.

Olay kabulü için

  • Web çerçeveleri. Hızlı kabul uç noktası için hafif iskeletler: dilinizdeki herhangi bir popüler çözüm uygundur. Önemli olan, işleyicinin hızlı yanıt vermesi ve görevleri kuyruğa koyabilmesidir.
  • Ters tüneller. Genel bir noktaya giden bağlantı açan ve gelen istekleri size iten araçlar. Geliştirme ve geçici senaryolar için faydalıdır.
  • Sağlayıcıların kuyruk ve olay veri yolları. Platform olayları kuyruktan okumayı sunuyorsa, güvenilirlik açısından genellikle en iyi seçimdir.

Asenkron işleme için

  • Mesaj aracıları. Kabul ve işleme arasındaki iç kuyruk, hızlı kabulü ve yavaş mantığı birbirinden ayırır.
  • Çalışanlar ve zamanlayıcılar. Kuyruğu okuyan, tekrarları yürüten ve idempotentliğe uyan arka plan yürütücüleri.

Giden başvurular için

  • Proxy destekli HTTP istemcileri. Neredeyse her olgun kütüphane proxy üzerinden çalışabilir; ağ geçidi adresini, zaman aşımlarını ve tekrarları belirtin.
  • Proxeon proxy ağ geçidi. Giden istekler için gerekli coğrafya ve ağ türüyle, yasal mühendislik görevleri için mobil adresler dahil yönetilen çıkış noktası.

Gözlemlenebilirlik için

  • Bağlamlı günlükler. Olay kimliğini, yoklama imlecini, yanıt kodlarını ve işleme süresini kaydedin.
  • Metrikler. Kuyruk gecikmesi, 429 oranı, tekrar sayısı, kabul gecikmesi. Bunlar erken sorun göstergelerinizdir.
  • Uyarılar. Uç nokta erişilemezliği ve gecikme artışı hakkında bildirim.

Vaka örnekleri ve sonuçlar

İlkelerin pratikte nasıl çalıştığını gösterelim. Örnekler derlemedir, ancak tipik durumları ve büyüklük sıralarını yansıtır.

Vaka 1: Kendi sunucusu olmadan durum bildirimleri entegrasyonu

Küçük bir ekip, durum değişiklikleri hakkında webhook gönderen bir platformu entegre etti. Kendi genel sunucuları yoktu ve webhook ayarlarında proxy adresini belirtme yönündeki ilk girişimler beklendiği gibi hiçbir şey vermedi, teslimat yoktu. Yönler modelini çözdükten sonra ekip aynı anda iki çözüme geçti.

Geliştirme aşaması için işleyiciyi yerel olarak hata ayıklamak üzere ters tünel kullandılar. Üretim için platform kuyruktan okuma sunuyordu ve ekip kabulü ona taşıdı. Sonuç: hizmetin kısa yeniden başlatmalarında olay kayıpları sıfıra düştü, çünkü kuyruk mesajları tutuyor. Platform API'sine tüm giden ayrıntı sorguları doğru coğrafyayla Proxeon proxy üzerinden gitti. Giriş ve çıkış ayrıldığı için teşhis basitleşti.

Vaka 2: Kabul imkansızken webhook'tan yoklamaya geçiş

Hizmet, mimari nedenlerle gelen kabulün imkansız olduğu bir ortamda çalışıyordu. Başlangıçta webhook almaya çalıştılar, ama teslimat yoktu. Abonelikten vazgeçip yoklama kurmaya karar verdiler. Sabit saniyelik duraklamalı ilk sürüm neredeyse hemen limitlere takıldı ve hız sınırı redleri almaya başladı.

Yeniden çalışmadan sonra imleçli artımlı yoklama, 2 ila 60 saniye arası uyarlanabilir aralık, limit başlıklarına saygı ve 429'un doğru işlenmesi uygulandı. Sakin saatlerde istek sayısı üstel gevşeme sayesinde birçok kez azaldı. Hız sınırı redleri ortadan kalktı. Aktif dönemlerde yeni olayları alma gecikmesi birkaç saniye içinde kaldı ve bu iş tarafını tamamen memnun etti. Tüm istekler proxy üzerinden gitti ve bu gerekli ağ profilini sağladı.

Vaka 3: Yavaş işleyici nedeniyle kopya fırtınası

Genel sunucuyla entegrasyon çalışıyordu, ama işleyici periyodik olarak ağır senkron mantık yürütüyor ve ayrılan süre içinde 200 yanıtı vermeye yetişemiyordu. Gönderici teslimatı başarısız sayıp tekrarlıyor, kopyalar ve çift işlemler üretiyordu. Klasik tırmık.

Çözüm doğrudan ortaya çıktı. İşleyici olayı anında kabul etmeye, imzayı doğrulamaya, görevi iç kuyruğa koymaya ve hemen 200 yanıtı vermeye başladı. Ağır mantık asenkron çalışanlara taşındı. Ek olarak olay kimliğine göre idempotentlik getirildi. Kopyalar artık tekrar işlemlere yol açmıyordu ve uç noktanın yanıt süresi istikrarlı biçimde düşük kaldı. Tekrar fırtınası kesildi.

Vakalardan genel çıkarım

Tüm hikayelerde sorunun kökeni aynıydı: giden ve gelen yön arasındaki karışıklık ve proxy'ye uygun olmayan alıcı rolünü yüklemeye çalışmak. Ekipler rolleri ayırıp yöne uygun aracı seçer seçmez her şey yerine oturdu. Proxy çıkışla ilgilendi, giriş ise sunucu, tünel, kuyruk veya yoklama ile çözüldü.

Tablo: görev ve uygun çözüm

Bu kompakt rehberi elinizin altında tutun. Saatlerce tartışmayı önler.

Görev ve araç eşleşmesi

  • Doğru coğrafyayla üçüncü taraf API'ye giden istek. Çözüm: Proxeon proxy. Yön: giden. Genel adres gerekli değil.
  • Mobil ağ türü altında giden istek. Çözüm: Proxeon mobil proxy. Yön: giden. Genel adres gerekli değil.
  • Genel sunucu varken webhook kabulü. Çözüm: genel adresli ve TLS'li sunucu. Yön: gelen. Genel adres zorunlu.
  • Kendi sunucusu olmadan webhook kabulü, geliştirme için. Çözüm: ters tünel. Yön: önceden açılmış giden kanal içinde gelen.
  • Kesinti sırasında koruma garantisiyle olay kabulü. Çözüm: sağlayıcının kuyruğu veya olay veri yolu, kendi tüketicinizle okuma. Yön: giden okuma.
  • Gelenlerin tamamen imkansız olduğu durumda olay kabulü. Çözüm: imleç ve uyarlanabilir aralıkla proxy üzerinden yoklama. Yön: giden.
  • Olay yanıtı olarak ayrıntı sorgu başvuruları. Çözüm: Proxeon proxy üzerinden giden istekler. Yön: giden.
  • Dışarıdan belirli bir mobil aboneye ulaşmak. Çözüm: operatörün ortak çıkışı nedeniyle imkansız. Diğer kabul yaklaşımlarını kullanın.

Tek satırda seçim kuralı

Bağlantının başlatıcısı sizseniz, aracınız proxy. Başlatıcı dış dünya ise, sunucu, tünel, kuyruk veya aboneliği yoklamayla değiştirmek gerekir.

SSS: sık sorulan sorular

Proxy'yi webhook'ların kendisine gelmesini sağlayacak şekilde yapılandırabilir miyim?

Hayır. İstemci proxy'si giden isteklerinize hizmet eder ve başkalarının size doğru gelen bağlantıları için genel olarak dinleyen bir kabul noktası değildir. Proxy adresi çıkış adresidir, giriş adresi değil. Webhook almak için genel sunucu, ters tünel, sağlayıcı kuyruğu veya yoklama kullanın.

Webhook neden mobil adrese ulaşmıyor?

Çünkü mobil ağda aboneler internete operatörün ortak adresi üzerinden çıkar ve cihazın kendi adresi iç adrestir, dışarıdan yönlendirilemez. Dışarıdan yeni bir gelen bağlantı, hangi aboneye ait olduğunu bilmez, bu nedenle belirli cihaza teslimat imkansızdır. Bu tarifenin sınırı değil, ağ mimarisinin bir özelliğidir.

Genel sunucum yoksa olayları nasıl alırım?

Üç yol var. Birincisi, sizin önceden açtığınız giden kanal üzerinden gelenleri iten ters tünel, geliştirme için uygundur. İkincisi, sağlayıcı sunuyorsa kuyruk veya olay veri yolundan okuma, en güvenilir seçenektir. Üçüncüsü, kendi giden isteklerinizle API'yi yoklama. Son ikisi proxy üzerinden mükemmel çalışır.

Yoklama verimsiz değil mi?

Naif yoklama gerçekten savurgandır. Ancak artımlı imleç, uyarlanabilir aralık, limitlere saygı ve idempotentlikle iyi yoklama ekonomik ve güvenilirdir. Sakin dönemlerde istek sayısı üstel gevşeme sayesinde keskin biçimde düşer, aktif dönemlerde olayları birkaç saniye içinde alırsınız. Birçok görev için bu fazlasıyla yeterlidir.

Webhook alıyorsam proxy gerekli mi?

Kabulün kendisi için proxy gerekli değil, kabul gelen yöndür. Ancak proxy, olaylara yanıt olarak yaptığınız giden başvurular için çok faydalıdır: nesne ayrıntıları, onaylama, diğer platformlarda durum güncelleme. Ayrıca yoklama ve kuyruk okuma için de, çünkü bu giden trafiktir.

Webhook kabul uç noktası nasıl korunur?

Gelen isteğin imzasını ortak sırla doğrulayın ve imzasızları reddedin. TLS kullanın. Hızlı yanıt verin ve işlemeyi asenkron kuyruğa taşıyın. İşlemeyi idempotent yapın, böylece yeniden teslimat tekrar işlemlere yol açmaz. Günlükleyin ve kullanılabilirliği izleyin.

Olaylar bazen iki kez geliyorsa ne yapmalı?

Bu hem webhook'lar hem de yoklama için normal bir durumdur. İdempotentlik sağlayın: mantığı yürütmeden önce olay kimliğine göre daha önce işleyip işlemediğinizi kontrol edin ve işlenenleri işaretleyin. O zaman kopyalar zararsız olur.

Webhook'larla entegrasyonda giden istekler için mobil proxy kullanabilir miyim?

Evet, ve bu sık rastlanan yasal bir senaryodur. Proxeon mobil proxy, üçüncü taraf API'lere giden başvurular ve yoklama için gerekli ağ türü ve coğrafyayı sağlar. Ancak webhook'ların kendisinin kabulü ayrı bir bileşenle çözülür, çünkü kabul giriştir ve mobil çıkış ortaktır ve dışarıdan adreslenemez.

Sağlayıcı kuyruğu ile webhook arasındaki güvenilirlik farkı nedir?

Webhook olay anında teslim edilir ve alıcınız erişilemez durumdaysa olay kaybolabilir veya göndericiden tekrarlar gerektirebilir. Kuyruk, siz okuyup onaylayana kadar olayları tutar. Bu nedenle tüketicinin kısa kesintilerinde veri kaybolmaz. Sağlayıcı kuyruk sunuyorsa, dayanıklılık açısından genellikle tercih edilir.

Yönlendirici yapılandırmasını ve port yönlendirmeyi anlatıyor musunuz?

Hayır, bu kendi özellikleri olan komşu bir konudur ve bilerek kapsam dışında bırakıyoruz. Burada önemli olan yönler modelini anlamak ve aracı seçmek. Ev ekipmanının arkasında kendi kabul noktanızı kuruyorsanız, yönlendirme sorunları ayrıca çözülür ve kendi incelemesini gerektirir.

Sonuç: hepsini bir araya getirelim

Yaygın bir yanılgıdan tutarlı bir mühendislik modeline kadar yol aldık. Ana çıkarım basit ve güçlü: proxy giden istekler görevini çözer, ancak hizmetinizi dışarıdan erişilebilir yapmaz. Her şey bağlantı yönüne dayanır. Başlatıcı sizseniz, proxy yerindedir. Başlatıcı dış dünya ise, başka bir araç gerekir.

İstemci proxy'sinin neden port dinlemediğini ve genel adres vermediğini ve mobil abone adresinin operatörün ortak çıkışı nedeniyle neden ilkesel olarak dışarıdan adreslenemediğini inceledik. Webhook almak için dört işleyen yaklaşımı ele aldık: genel adresli sunucu, ters tünel, sağlayıcı tarafında kuyruk ve abone olmak yerine yoklama. İmleç, uyarlanabilir aralık, başlıklara saygı ve idempotentlik sayesinde limitlere takılmayan güvenilir bir yoklama tasarladık. Ve Proxeon proxy'sinin webhook'ların yanında gerçekten nerede faydalı olduğunu gördük: giden yanıtlarda, üçüncü taraf API'lere başvurularda, kuyruk okumada ve yoklamada.

Şimdi ne yapmalı? Görevinizin yönünü belirleyin. Eğer bu girişse,

Yazar Hakkında

Andrey Kokh

Andrey Kokh

Leading Expert and Business Consultant

İş Deneyimi: Leading expert with 12 years of experience. Consults Forbes-listed companies, author of 3 books. Teaches at HSE and SKOLKOVO. His methodologies are used by hundreds of companies across Russia. RBC and Forbes expert on strategic development and digital transformation.
Eğitim: Higher School of Economics. Faculty of Economics, Master's Program
Uzmanlık:
Strategic Consulting Digital Transformation Change Management Business Strategy Innovation Management Organizational Development Lean Management Agile Transformation

Makaleyi paylaşın: