Webhook je způsob, jak jeden systém sám upozorní druhý, že se něco stalo. Místo aby se váš web opakovaně ptal cizí služby „nestalo se něco nového?“, pošle ta služba ve chvíli události zprávu sama na adresu, kterou si u ní předem zaregistrujete.
Jak webhook funguje?
Celý princip se vejde do několika kroků. U služby, třeba u platební brány nebo u systému na správu kódu, zadáte adresu na svém webu a vyberete události, o kterých chcete vědět. Když událost nastane, služba na tu adresu pošle HTTP požadavek s daty, nejčastěji ve formátu JSON: co se stalo, kdy a čeho se to týká. Váš systém data zpracuje a odpoví potvrzením, že zprávu přijal. Někteří odesílatelé neúspěšné doručení po chvíli zkusí znovu, jiní ne – GitHub například doručení neopakuje vůbec a chybějící zprávy si musíte dotáhnout sami.
Rozdíl proti pravidelnému dotazování se dá vysvětlit na poštovní schránce. Dotazování znamená, že každých pár minut běžíte ke schránce zkontrolovat, jestli přišel dopis. Webhook je pošťák, který zazvoní, až dopis opravdu přinese. Většina cest ke schránce přitom bývá zbytečná, protože je prázdná, a přesně tyhle prázdné dotazy webhook odbourá.
Čím se liší od běžného dotazování přes API?
Webhooku se říká také „obrácené API“, protože komunikaci nezahajuje váš systém, ale ta druhá strana. U běžného API se ptáte vy a odpověď dostanete jen tehdy, když si o ni řeknete. U webhooku jste na straně příjemce a data přicházejí sama. Podrobněji jsem principy propojování systémů rozebral v článku Co je to API a jak vám zjednoduší procesy.
Doručení bývá otázkou sekund, zaručené ale není. Zpozdit ho může opakované doručování po neúspěchu, fronta na straně odesílatele nebo výpadek vašeho webu. Pro průběžný tok dat oběma směry, například pro živý chat, se místo webhooku obvykle používá dlouhodobě otevřené spojení přes WebSocket.
Kde se webhooky používají?
Nejčastěji tam, kde se stav mění jinde, než kde ho potřebujete vidět:
- platební brány posílají notifikaci o změně stavu platby, například Comgate má v dokumentaci popsanou notifikační URL a zároveň doporučuje skutečný stav ověřit ještě dotazem na metodu /status
- e-mailové služby hlásí doručení nebo odhlášení odběratele
- systémy pro správu kódu jako GitHub nebo GitLab hlásí změnu v projektu
- Redakční systém dá vědět, že vyšel nový článek
- automatizační nástroje, mezi které patří i n8n, umí webhook přijmout jako spouštěč celého navazujícího procesu
Tohle propojování systémů dělám klientům na míru. Napojuju e-shopy, účetnictví a interní evidence tak, aby si data předávaly samy, a webhook u toho bývá tím spouštěčem, od kterého se celý proces odvíjí. Víc o automatizacích a agentech na míru →
Kolik webhook stojí?
Za samotnou techniku se neplatí nic. Jde o obyčejný HTTP požadavek, žádný proprietární protokol ani licence, a nástroje na jeho odesílání i příjem jsou běžnou součástí dnešních vývojářských knihoven. Hlavní náklad je v práci vývojáře, který cílovou adresu na vašem webu postaví, ošetří a pak udržuje.
Jaká má webhook rizika?
Adresa, na kterou webhook chodí, musí být dostupná odesílající službě, protože ji volá cizí server. Nemůže tedy být schovaná za běžným přihlášením uživatele a bez dalšího zabezpečení by na ni mohl poslat vymyšlenou zprávu kdokoli. Pravost zprávy je proto potřeba ověřovat způsobem, který poskytovatel nabízí: nejčastěji podpisem spočítaným ze sdíleného tajného klíče (technicky HMAC), jinde tajným tokenem, omezením povolených IP adres nebo zpětným dotazem do API. Bez ověření by stačilo poslat falešnou zprávu „objednávka zaplacena“.
Druhá past je opakované doručení. Když váš web neodpoví včas, odesílatel, který doručování opakuje, pošle zprávu znovu, u některých služeb klidně několikrát během dalších dnů. Tatáž událost tedy může dorazit vícekrát a bez ošetření byste odeslali zboží dvakrát. Řeší se to tak, že si systém eviduje identifikátor události nebo transakce a druhý výskyt téhož identifikátoru ignoruje.
Třetí věc je čas. Pokud zpráva nese podepsanou informaci o tom, kdy vznikla, dají se starší zprávy mimo povolené okno zahazovat, aby nešlo odchycenou zprávu poslat znovu o týden později. Od roku 2023 na tohle existuje otevřená specifikace Standard Webhooks, ke které se hlásí řada velkých poskytovatelů. Když si necháváte napojení dělat, ptejte se dodavatele právě na tyhle tři body: jak ověřuje podpis, jak pozná duplicitu a co se stane, když je váš web hodinu mimo provoz.
Pavel Szabo
Programátor webů, eshopů a informačních systémů s více než 23 lety praxe. Pomáhám firmám i jednotlivcům s online podnikáním, automatizacemi a využitím AI v praxi.