Webhook
Také známo jako Callback, HTTP push
Stručně
Služba zavolá váš server ve chvíli, kdy se něco stalo, místo abyste se stokrát ptali, jestli se to už stalo.
Webhook je server-to-server oznámení: platební brána pošle POST na URL, kterou jste zaregistrovali, ve chvíli, kdy platba dorazí. Je to opak pollingu, kdy se každých třicet sekund ptáte, jestli se stav změnil — „zavolám ti“ místo „budu se pořád ptát“.
Počítejte s tím, že dorazí dvakrát
Webhook doručuje infrastruktura někoho jiného a ta jejich síť není o nic spolehlivější než vaše. Odesílatel opakuje doručení, když vám endpoint vyprší, takže stejné oznámení o platbě může přijít třikrát. Každý handler musí být idempotentní: událost najděte podle id a když už byla zpracovaná, přeskočte ji.
Odpovídejte rychle a zpracujte později. Když handler posílá PDF faktury přímo v HTTP požadavku a trvá čtyři sekundy, odesílatel může vypršet a doručení zopakovat, zatímco první pokus stále běží. Událost uložte a předejte do fronty.
Ověřte podpis, pak logujte payload
Na veřejnou URL může poslat POST kdokoli. Zprávě o platbě věřte jen tehdy, když požadavek nese platný podpis přes surové tělo se sdíleným tajemstvím, a všechno nepodepsané odmítněte. Ověřujte surová data, ne naparsovaný JSON — serializace mění pořadí klíčů a hash přestane sedět.
Uložte surový payload a id události hned, jak projdou ověřením. Když se zákazník ozve, že objednávka nebyla zaplacená, log je rozdíl mezi „brána nám to nikdy neposlala“ a „přišlo to a my to zahodili“. Většina bran navíc umí doručení poslat znovu — právě replay často zachrání účet.
Kdy se na něj nespoléhat
Webhook funguje jen tehdy, dokud je váš endpoint dostupný, a velká platební brána nebude čekat na staging server dodavatele. U všeho kritického ho spojte s pravidelnou rekoncilací, která jednou za hodinu porovná otevřené objednávky proti API brány. Když platba prošla a webhook se ztratil, tahle úloha to zachytí.
Stejná pravidla platí pro webhooky, které posíláte ven: opakování s rostoucí prodlevou, podpisové tajemství a zdokumentované chování pro nedoručené události. Webhook, který posíláte, je vaše API bez požadavku.
Související pojmy
Idempotence
Stejný požadavek odeslaný dvakrát musí mít stejný efekt jako jeden — jinak opakování strhne zákazníkovi peníze znovu.
REST API
HTTP API postavené kolem zdrojů: podstatná jména v URL, metody jako slovesa a stavové kódy, které nelžou.
Fronta zpráv
Pomalá nebo riskantní práce opouští požadavek: worker ji vyzvedne z fronty a při selhání ji bezpečně zopakuje.