Webhook vs API: wanneer ophalen en wanneer laten pushen

Webhook vs API

Webhook vs API: push vs pull, handtekeningen, retries | We.Inc

Webhook vs API uitgelegd met een vergelijkingstabel, de afwegingen tussen polling en push, een HMAC-handtekeningcontrole in de browser, retries en idempotente ontvangercode.

Bij een API-aanroep vraagt uw code een andere dienst om data wanneer het uitkomt: dat is pull. Bij een webhook stuurt de dienst een HTTP POST naar uw URL op het moment dat er iets gebeurt: dat is push. De meeste integraties gebruiken beide, een webhook om snel van een wijziging te horen en een API-aanroep om het volledige, actuele record op te halen.

API-verzoek vs webhook

Elke minuut een API pollen om te zien of een betaling is verwerkt, verspilt verzoeken en is toch te laat. Een webhook draait de richting om, maar legt ook verantwoordelijkheid bij u: uw endpoint moet openbaar zijn, van elk bericht bewijzen dat het echt is, snel antwoorden en ermee omgaan dat hetzelfde event twee keer binnenkomt. Deze pagina behandelt elk van die taken met code die u kunt kopiëren.

Veelgestelde vragen

Is een webhook een soort API?

In grote lijnen wel. Het is een HTTP-verzoek met een JSON-body, alleen in de omgekeerde richting verstuurd. Mensen noemen het soms een omgekeerde API. Het verschil dat telt, is wie het gesprek begint en wie online moet zijn om het te ontvangen.

Moet ik pollen of webhooks gebruiken?

Gebruik webhooks als de provider ze aanbiedt voor de events die u nodig hebt en u een openbaar HTTPS-endpoint kunt hosten. Poll als er geen webhook is, als u achter een firewall zit, of voor een klein aantal controles waarbij een minuut vertraging geen probleem is.

Hoe weet ik dat een webhook echt van de provider komt?

De meeste providers sturen een HMAC SHA-256 van de body in een header, berekend met een geheim dat alleen u en zij kennen. GitHub gebruikt bijvoorbeeld X-Hub-Signature-256 met een sha256=-voorvoegsel; Stripe gebruikt Stripe-Signature met een tijdstempel. Bereken hem opnieuw en vergelijk voordat u iets vertrouwt.

Wat gebeurt er als mijn endpoint plat ligt?

De meeste providers proberen mislukte leveringen opnieuw met steeds grotere tussenpozen, gedurende een periode die per provider verschilt. Stripe blijft live events bijvoorbeeld tot drie dagen opnieuw proberen. Daarna is het event alleen nog beschikbaar via hun API of dashboard.

Waarom moet een webhook-handler antwoorden voordat hij het werk doet?

Providers wachten maar kort op een antwoord. Als uw code eerst e-mails verstuurt of andere diensten aanroept, kan de levering een time-out krijgen en opnieuw worden geprobeerd, terwijl u er al op had gereageerd. Zet de taak in een wachtrij, geef 200 terug en verwerk daarna.

Pull: een API aanroepen

Push: een webhook ontvangen

Beide samen gebruiken

Een webhook-ontvanger die de handtekening controleert

Node en Express: HMAC SHA-256 over de ruwe body

express.raw houdt de body als bytes zodat de handtekening klopt. Dit headerformaat volgt de sha256=-conventie van GitHub; pas de headernaam aan voor andere providers.

Retries en dubbele berichten afhandelen

Een unieke index op het event-id laat de insert bij een tweede levering mislukken, zodat het werk één keer draait, hoe vaak het event ook binnenkomt.

Elk event-id één keer vastleggen (PostgreSQL)

ON CONFLICT DO NOTHING geeft geen rij terug bij een duplicaat, wat uw code behandelt als al afgehandeld.

Het alternatief: pollen

Pollen is eenvoudiger te hosten, maar trager en spraakzamer. Houd een cursor bij zodat elke poll alleen vraagt om wat nieuw is.

HMAC SHA-256-handtekeningcontrole

Plak een body en een geheim om de handtekening te berekenen die een provider zou sturen, en plak daarna de ontvangen header om te vergelijken. Alles draait in uw browser met de Web Crypto API; er wordt niets verstuurd.

Ruwe request-body

Webhook-geheim

Handtekening die deze body zou moeten hebben

Ontvangen handtekeningheader (optioneel)

Komt overeen: deze body en dit geheim geven deze handtekening.

Komt niet overeen: de body is veranderd, het geheim klopt niet, of de header gebruikt een ander formaat.

Bezig met berekenen

Gratis beginnen · Geen creditcard nodig

Gerelateerd: Gidsen

Product

Voor wie

Functies

Bronnen

Bedrijf

Sitemap