Webhook vs. API: wann du abfragst und wann du benachrichtigt wirst

Webhook vs. API

Webhook vs. API: Push vs. Pull, Signaturen, Retries | We.Inc

Webhook vs. API erklärt, mit Vergleichstabelle, den Vor- und Nachteilen von Polling und Push, einem HMAC-Signaturprüfer im Browser, dem Umgang mit Retries und idempotentem Empfänger-Code.

Bei einem API-Aufruf fragt dein Code einen anderen Dienst nach Daten, wann immer er will: Das ist Pull. Bei einem Webhook sendet der Dienst einen HTTP-POST an deine URL, sobald etwas passiert: Das ist Push. Die meisten Integrationen nutzen beides, einen Webhook, um schnell von einer Änderung zu erfahren, und einen API-Aufruf, um den vollständigen, aktuellen Datensatz abzurufen.

API-Anfrage vs. Webhook

Jede Minute eine API abzufragen, um zu sehen, ob eine Zahlung durch ist, verschwendet Anfragen und kommt trotzdem zu spät. Ein Webhook dreht die Richtung um, verlagert aber auch Verantwortung zu dir: Dein Endpunkt muss öffentlich sein, die Echtheit jeder Nachricht nachweisen, schnell antworten und damit klarkommen, dass dasselbe Ereignis zweimal eintrifft. Diese Seite behandelt jede dieser Aufgaben mit Code zum Kopieren.

Häufige Fragen

Ist ein Webhook eine Art API?

Im weiteren Sinne ja. Es ist eine HTTP-Anfrage mit einem JSON-Body, nur in die entgegengesetzte Richtung gesendet. Manche nennen es eine umgekehrte API. Der entscheidende Unterschied ist, wer das Gespräch beginnt und wer online sein muss, um es zu empfangen.

Sollte ich pollen oder Webhooks verwenden?

Verwende Webhooks, wenn der Anbieter sie für die benötigten Ereignisse anbietet und du einen öffentlichen HTTPS-Endpunkt hosten kannst. Polle, wenn es keinen Webhook gibt, wenn du hinter einer Firewall sitzt oder bei wenigen Prüfungen, bei denen eine Minute Verzögerung in Ordnung ist.

Woher weiß ich, dass ein Webhook wirklich vom Anbieter kommt?

Die meisten Anbieter senden in einem Header einen HMAC SHA-256 des Body, berechnet mit einem Geheimnis, das nur du und sie kennen. GitHub verwendet zum Beispiel X-Hub-Signature-256 mit dem Präfix sha256=; Stripe verwendet Stripe-Signature mit einem Zeitstempel. Berechne ihn neu und vergleiche, bevor du irgendetwas vertraust.

Was passiert, wenn mein Endpunkt nicht erreichbar ist?

Die meisten Anbieter wiederholen fehlgeschlagene Zustellungen mit wachsenden Abständen zwischen den Versuchen, über einen Zeitraum, der vom Anbieter abhängt. Stripe zum Beispiel wiederholt Live-Ereignisse bis zu drei Tage lang. Danach ist das Ereignis nur noch über die API oder das Dashboard verfügbar.

Warum sollte ein Webhook-Handler antworten, bevor er die Arbeit erledigt?

Anbieter warten nur kurz auf eine Antwort. Wenn dein Code zuerst E-Mails verschickt oder andere Dienste aufruft, kann die Zustellung in ein Timeout laufen und wiederholt werden, obwohl du schon darauf reagiert hast. Stelle den Job in die Warteschlange, gib 200 zurück und verarbeite danach.

Pull: eine API aufrufen

Push: einen Webhook empfangen

Beides zusammen nutzen

Ein Webhook-Empfänger, der die Signatur prüft

Node und Express: HMAC SHA-256 über den rohen Body

express.raw behält den Body als Bytes, damit die Signatur passt. Dieses Header-Format folgt der sha256=-Konvention von GitHub; passe den Header-Namen für andere Anbieter an.

Retries und Duplikate behandeln

Ein Unique Index auf der Ereignis-ID lässt das Insert bei einer zweiten Zustellung fehlschlagen, sodass die Arbeit genau einmal läuft, egal wie oft das Ereignis eintrifft.

Jede Ereignis-ID einmal speichern (PostgreSQL)

ON CONFLICT DO NOTHING gibt bei einem Duplikat keine Zeile zurück, was dein Code als bereits erledigt behandelt.

Die Alternative Polling

Polling ist einfacher zu hosten, aber langsamer und gesprächiger. Führe einen Cursor mit, damit jede Abfrage nur nach Neuem fragt.

HMAC-SHA-256-Signaturprüfer

Füge einen Body und ein Geheimnis ein, um die Signatur zu berechnen, die ein Anbieter senden würde, und füge dann den empfangenen Header zum Vergleich ein. Alles läuft in deinem Browser mit der Web Crypto API; nichts wird irgendwohin gesendet.

Roher Request-Body

Webhook-Geheimnis

Signatur, die dieser Body tragen sollte

Empfangener Signatur-Header (optional)

Treffer: Body und Geheimnis ergeben diese Signatur.

Kein Treffer: Entweder hat sich der Body geändert, das Geheimnis ist falsch oder der Header nutzt ein anderes Format.

Wird berechnet

Kostenlos starten · Keine Kreditkarte nötig

Verwandt: Ratgeber

Produkt

Für wen

Funktionen

Ressourcen

Unternehmen

Sitemap