Webhook je způsob, jak si dvě webové aplikace předávají informace v reálném čase, aniž by se musely neustále ptát: „Stalo se už něco?“ Místo toho jedna strana jednoduše „zavolá“ druhé ve chvíli, kdy nastane konkrétní událost.
Představte si to takto: klasické dotazování (tzv. polling) je jako neustálé obvolávání zákazníka: „Zaplatil jsi? Zaplatil jsi?“ Webhook funguje obráceně. Platební brána sama zavolá vašemu webu: „Platba proběhla, tady jsou data.“ Tento přístup šetří prostředky serveru a reakce nastane okamžitě.
Technicky vzato je webhook HTTP POST požadavek, který odešle zdrojová aplikace na předem zadanou URL adresu (tzv. endpoint) vaší aplikace. Tato URL musí být veřejně dostupná a připravená přijatá data zpracovat. Obsah požadavku bývá nejčastěji ve formátu JSON.
Webhooky se běžně používají v těchto situacích:
- E-shopy: platební brána informuje systém o úspěšné platbě a objednávka se automaticky zpracuje.
- WordPress a WooCommerce: po vytvoření nové objednávky se data odešlou do CRM nebo skladu.
- Nástroje jako Slack nebo Zapier: upozornění chodí do komunikačního kanálu v momentě, kdy nastane definovaná akce.
- GitHub a CI/CD: po každém commitu se automaticky spustí sestavení nebo nasazení aplikace.
Nastavení webhooku je ve většině nástrojů jednoduché: v odesílající aplikaci zadáte URL adresu, na kterou se mají data posílat, a vyberete události, které ho spustí. Na přijímající straně musí existovat skript nebo služba, která příchozí data přečte a provede příslušnou akci, například uloží záznam do databáze nebo odešle e-mail.
Důležitou součástí práce s webhooky je zabezpečení. Přijatá data by měla být vždy ověřena pomocí tajného klíče (secret token), aby váš endpoint nereagoval na falešné požadavky. Stejně tak je vhodné logovat příchozí volání pro případ ladění chyb.
Pro začátečníky, kteří chtějí webhooky vyzkoušet bez vlastního serveru, jsou ideální nástroje jako Make (Integromat) nebo Zapier, kde stačí kliknout a URL adresu dostanete okamžitě. Pokročilejší uživatelé si mohou endpoint napsat sami v PHP, Node.js nebo Pythonu.