Preskočiť na obsah
Integračný štandard

Webhook

Webhook je mechanizmus, ktorým jeden systém dá inému vedieť o udalosti hneď, ako nastane — namiesto toho, aby sa druhý systém opakovane pýtal „už?“. Keď udalosť nastane (prijala sa platba, vznikla objednávka, zmenil sa stav zásielky), systém pošle HTTP požiadavku s dátami o udalosti na URL, ktorú mu príjemca vopred zaregistroval.

Ako to funguje

Sú dva spôsoby, ako sa systém dozvie, že sa niečo zmenilo. Pri pollingu sa pravidelne pýta: každú minútu zavolá API a pozrie, či pribudla nová objednávka. Je to jednoduché, ale buď reaguje pomaly (pýta sa zriedka), alebo plytvá (pýta sa často a väčšinou nič). Webhook to obráti: príjemca raz povie „keď sa stane X, pošli mi to sem“ a odosielateľ to spraví okamžite, keď X nastane. Reakcia je v reálnom čase a nikto sa nepýta naprázdno. Preto webhooky používa skoro každá služba s udalosťami — Stripe pošle webhook pri úspešnej platbe, GitHub pri pushnutí kódu, dopravca pri zmene stavu zásielky, e-shopová platforma pri novej objednávke.

Webhook a API sú dve strany tej istej mince. Cez API sa ja pýtam (volám von a čakám odpoveď); webhook je, keď mňa zavolajú (prídem ako HTTP požiadavka na môj endpoint). Preto „prijať webhook“ znamená mať na svojej strane URL, ktorá počúva, overí, že požiadavka je naozaj od očakávaného odosielateľa (typicky cez podpis v hlavičke), a spracuje dáta. Dôležitý je jeden detail: webhook môže prísť aj dvakrát (odosielateľ ho po zlyhaní zopakuje), takže spracovanie musí byť idempotentné — druhé doručenie tej istej udalosti nesmie vytvoriť druhú objednávku alebo dvakrát stiahnuť peniaze.

Pri vývoji integrácií sú webhooky štandardná súčasť: ak má vaša aplikácia reagovať na to, čo sa deje v inom systéme — platby, objednávky, zásielky, zmeny v ERP —, najčistejšie je prijímať jeho webhooky (ak ich ponúka) a doplniť polling len tam, kde webhooky nie sú. Spoľahlivosť riešime na oboch stranách: prijatý webhook si rýchlo uložíme a spracujeme asynchrónne (cez frontu), overujeme podpisy, sme idempotentní, a keď webhooky odosielame my, máme retry a prehľad o doručení. Bližšie pri službách API integrácie tretích strán a integrácia ERP a účtovných systémov.

Z našej praxe

Keď napájate aplikáciu na externú službu, najprv zistite, či ponúka webhooky a na ktoré udalosti — ušetrí to polling a dá reakciu v reálnom čase. Na svojej strane potrebujete tri veci: verejne dostupný endpoint, overenie podpisu odosielateľa a idempotentné spracovanie (ten istý webhook môže doraziť viackrát). Pri vývoji sa webhooky testujú cez tunel (napríklad ngrok) alebo cez testovacie nástroje danej služby. Ak webhooky odosielate vy, počítajte s retry a logom doručení.

Kedy to potrebujete

  • Aplikácia má reagovať na úspešnú platbu zo Stripe (aktivovať predplatné, poslať faktúru) — Stripe pošle webhook, vy ho spracujete.
  • Stav objednávky alebo zásielky sa má aktualizovať hneď, ako ho zmení dopravca alebo ERP — namiesto pollingu prídu webhooky.
  • Dva interné systémy si majú vymieňať udalosti v reálnom čase (vznikla objednávka → vytvor doklad) bez toho, aby sa jeden druhého opakovane pýtal.
  • Vaša platforma má dať partnerom vedieť o udalostiach (nová objednávka, zmena stavu) — vystavíte im webhooky s podpisom a retry.

Najčastejšie otázky

Aký je rozdiel medzi webhookom a API?

Pri API sa pýtate vy — zavoláte cudzí endpoint a čakáte odpoveď. Pri webhooku zavolajú vás — cudzí systém pošle HTTP požiadavku na URL, ktorú ste si u neho zaregistrovali, keď nastane udalosť. API sa hodí, keď si chcete niečo vyžiadať; webhook, keď chcete byť upozornení v reálnom čase. Často sa kombinujú: dostanete webhook „niečo sa zmenilo“ a potom cez API stiahnete detaily.

Čo ak sa webhook stratí alebo príde dvakrát?

Oboje sa stáva, preto sa s tým ráta. Strata: solídne služby webhook po neúspechu opakujú (a často majú aj prehľad doručených/nedoručených, prípadne API na dotiahnutie zmeškaných udalostí). Duplicita: práve kvôli opakovaniu môže ten istý webhook doraziť viackrát, takže spracovanie musí byť idempotentné — druhé doručenie nesmie vytvoriť druhú objednávku ani zopakovať platbu. Obe veci sú štandardná súčasť poriadne postavenej integrácie.

Potrebujem na prijímanie webhookov niečo zvláštne?

Verejne dostupný HTTP endpoint na vašej strane, overenie podpisu odosielateľa (aby ste vedeli, že požiadavka je naozaj od neho) a idempotentné spracovanie. Pri vývoji sa webhooky testujú cez tunel na lokálny počítač (napríklad ngrok) alebo cez testovacie nástroje danej služby. Nič exotické — ale tie tri veci treba spraviť správne.

Potrebujete s tým pomôcť?

Ak riešite niečo z toho, čo tu opisujeme, ozvite sa. Povieme vám, či a ako vieme pomôcť.