Webhooks ermöglichen die automatische Benachrichtigung über Ereignisse, ohne ständige API-Abfragen. Der Artikel erklärt, wie Webhooks funktionieren, wo sie sich von klassischen APIs unterscheiden und welche Vorteile sie für Automatisierung und Integration bieten. Praxisbeispiele und Tipps zur sicheren Einrichtung runden den Leitfaden ab.
Webhook ist ein Mechanismus, mit dem ein System ein anderes automatisch über ein eingetretenes Ereignis informiert. Statt ständig Anfragen an den Server zu senden, erhält die Anwendung die Daten genau in dem Moment, in dem sie verfügbar sind - beispielsweise nach einer erfolgreichen Zahlung, einer neuen Bestellung oder einer Statusänderung bei der Lieferung.
Webhooks sind besonders nützlich bei der Integration mehrerer Dienste. Sie reduzieren überflüssige Anfragen und ermöglichen eine schnellere Reaktion auf Änderungen. Dabei stehen Webhooks in engem Zusammenhang mit klassischen APIs, funktionieren jedoch nach einem anderen Prinzip.
Am einfachsten lässt sich der Unterschied zwischen API und Webhook anhand von Benachrichtigungen veranschaulichen.
Bei einer klassischen API arbeitet die Anwendung aktiv: Sie fragt regelmäßig einen anderen Server, ob neue Daten verfügbar sind. Wenn sich nichts geändert hat, wiederholt sie die Anfrage nach einiger Zeit.
Ein Webhook funktioniert umgekehrt. Die Anwendung teilt dem Dienst eine spezielle Adresse - die Webhook-URL - mit, und der Dienst sendet aus eigener Initiative eine Anfrage dorthin, sobald das gewünschte Ereignis eintritt.
So muss beispielsweise ein Onlineshop nicht ständig das Zahlungssystem fragen, ob eine Bestellung bezahlt wurde. Das Zahlungssystem sendet selbst einen Webhook unmittelbar nach Zahlungsbestätigung.
Daher werden Webhooks oft als Benachrichtigungsmechanismus zwischen Programmen bezeichnet. Ein System fragt nicht ständig den Status des anderen ab, sondern wartet einfach auf die Nachricht zum gewünschten Ereignis.
Webhooks werden überall dort eingesetzt, wo ein System schnell auf Änderungen in einem anderen Dienst reagieren muss. Typische Beispiele:
Das Besondere an diesen Szenarien: Die Aktion wird durch ein Ereignis ausgelöst. Das System prüft nicht regelmäßig den Status, sondern erhält nur dann ein Signal, wenn tatsächlich etwas passiert ist.
Solche Prinzipien werden nicht nur bei einzelnen Integrationen, sondern auch in größeren Softwaresystemen eingesetzt. Mehr dazu im Beitrag Warum Event-driven-Architektur Systeme schneller und reaktionsfähiger macht.
Dadurch eignen sich Webhooks besonders für die Automatisierung. Nach dem Empfang eines Ereignisses kann ein Programm selbst den Bestellstatus ändern, eine Benachrichtigung an den Nutzer senden, Daten in einer Datenbank speichern oder einen weiteren Prozess starten.
Damit ein Webhook funktioniert, erstellt das empfangende System zunächst eine spezielle URL - den sogenannten Endpoint. An diese Adresse schickt der externe Dienst die Benachrichtigungen über Ereignisse.
Das Prinzip ist einfach:
Beispiel: Ein Nutzer bezahlt eine Bestellung. Das Zahlungssystem registriert die erfolgreiche Transaktion und sendet eine HTTP-Anfrage an die Webhook-URL des Onlineshops. Nach Empfang der Anfrage ändert der Shop den Bestellstatus auf "Bezahlt" und kann automatisch weitere Aktionen einleiten.
Für Webhooks wird meist die HTTP-Methode POST verwendet, da mit der Anfrage auch Ereignisdaten übermittelt werden. Das genaue Format hängt jedoch vom jeweiligen Dienst ab - manche Plattformen nutzen auch andere HTTP-Methoden.
Eine Webhook-Anfrage besteht in der Regel aus mehreren Teilen: Die URL enthält die Adresse des Handlers, die HTTP-Header können technische Daten transportieren und die Hauptinformationen zum Ereignis stehen im Body der Anfrage.
Viele Dienste übertragen die Daten im JSON-Format. Eine Benachrichtigung über eine Zahlung könnte beispielsweise folgende Informationen enthalten: Bestell-ID, Betrag, Währung, Zahlungsstatus und Zeitpunkt der Transaktion.
{
"event": "payment.success",
"order_id": "A1024",
"status": "paid"
}
Nach Erhalt liest die Anwendung das Feld event, ermittelt den Ereignistyp und startet die passende Logik. Bei einer Zahlung wird die Bestellung als "bezahlt" markiert, bei einer Lieferung wird der Status aktualisiert.
Nach erfolgreicher Verarbeitung gibt der Webhook-Server meist einen HTTP-Statuscode zurück. Ein Code im Bereich 200 signalisiert Erfolg. Bei Fehlern oder keiner Antwort kann der sendende Dienst die Übertragung erneut versuchen.
Stellen wir uns einen Onlineshop mit angebundener externer Zahlungsplattform vor. Der Käufer bestellt und gelangt zur Zahlungsseite. Nach Abschluss des Zahlungsprozesses erhält das Zahlungssystem die Bestätigung der Bank - der Shop weiß zu diesem Zeitpunkt eventuell noch nichts vom Ergebnis.
Statt dass der Shop ständig den Zahlungsstatus per API abfragt, sendet das Zahlungssystem einen Webhook:
Der Server des Shops nimmt die Benachrichtigung entgegen, prüft die Daten und setzt den Bestellstatus automatisch auf "Bezahlt". Danach kann das System z.B. eine Quittung versenden, das Lager informieren und die Vorbereitung des Versands starten.
Dieser Ansatz ist besonders nützlich bei Prozessen, bei denen das Ereignis Sekunden, Minuten oder sogar Stunden nach der ursprünglichen Anfrage auftreten kann. Die Anwendung muss nicht ständig den Status abfragen, sondern wartet einfach auf den Webhook.
Der Hauptunterschied zwischen Webhook und klassischem API besteht darin, wer den Datenaustausch initiiert.
Bei der Arbeit mit einer API sendet die Anwendung aktiv Anfragen an den Server - etwa um eine Bestellübersicht zu erhalten, ein Nutzerprofil abzurufen oder den Zahlungsstatus zu prüfen. Der Server antwortet erst nach einer solchen Anfrage.
Ein Webhook funktioniert anders: Der Empfänger teilt seine URL im Voraus mit, und der Quell-Dienst sendet eine Anfrage, sobald ein relevantes Ereignis eintritt.
Man kann es als zwei Modelle betrachten:
In der technischen Dokumentation werden diese Ansätze oft mit Pull- und Push-Modellen verknüpft. Die API wird für Pull verwendet (der Client holt die Daten aktiv ab), der Webhook für Push (die Daten werden dem Empfänger automatisch gesendet).
Webhook und REST API nutzen dieselben grundlegenden Internettechnologien: HTTP, URL, Header, Methoden wie POST und Datenformate wie JSON. Ihr Zweck ist jedoch unterschiedlich.
| Charakteristik | API | Webhook |
|---|---|---|
| Wer startet den Austausch? | Client | Quell-Dienst |
| Wann werden Daten übertragen? | Nach Anfrage | Nach Ereignis |
| Muss regelmäßig geprüft werden? | Manchmal ja | Nein |
| Reaktionsgeschwindigkeit | Abhängig von Anfragefrequenz | Meist nahezu sofort |
| Beliebige Daten abrufbar? | Ja | Meist nein |
| Hauptaufgabe | Daten abrufen oder verändern | Ereignisbenachrichtigung |
So kann ein Shop per API Informationen zu einer bestimmten Zahlung abrufen. Über den Webhook informiert das Zahlungssystem den Shop proaktiv über eine erfolgreiche Zahlung.
Deshalb sind Webhook und API keine sich gegenseitig ausschließenden Technologien.
In der Praxis werden Webhooks und APIs häufig gemeinsam eingesetzt.
Eine API wird gebraucht, wenn eine Anwendung selbst Daten abrufen oder ändern muss. Ein Webhook hingegen informiert schnell über eingetretene Ereignisse.
Beispiel: In einem CRM kann die Anwendung über die API Kundendaten abrufen oder ändern. Der Webhook benachrichtigt externe Systeme über neue Kunden oder geänderte Phasen bei Deals.
Oft enthält ein Webhook nur minimale Informationen, wie eine Objekt-ID und den Ereignistyp. Danach holt die Anwendung die vollständigen Daten per API.
So lässt sich die Anzahl ständiger Anfragen verringern und gleichzeitig die Flexibilität der API bewahren.
Ein Webhook eignet sich besonders, wenn das System unmittelbar nach Eintritt eines Ereignisses benachrichtigt werden soll.
Typische Beispiele sind Zahlungsbestätigungen, neue Bestellungen, Statusänderungen bei Lieferungen, neue Leads im CRM, Datei-Uploads oder das Publishing neuen Codes in Repositories.
Regelmäßige API-Anfragen erzeugen in solchen Szenarien unnötige Last, da viele Anfragen oft das gleiche Ergebnis liefern. Mit einem Webhook wird eine Anfrage nur bei tatsächlicher Änderung versendet.
Deshalb sind Webhooks besonders praktisch für die Automatisierung und Integration von Services, die möglichst sofort auf Ereignisse reagieren müssen.
Die klassische API bleibt vorteilhaft, wenn Anwendungen Daten zu beliebigen Zeitpunkten abrufen müssen.
Beispielsweise möchte ein Nutzer im Onlineshop seine Bestellungen sehen - hier fragt die Anwendung über die API den aktuellen Stand ab.
APIs werden außerdem benötigt, wenn das System:
Webhooks sind für solche Aufgaben nicht gedacht - sie benachrichtigen über Ereignisse, erlauben aber meist keinen Abruf beliebiger Daten auf Anfrage.
In der Praxis ist eine kombinierte Lösung weit verbreitet: Der Webhook signalisiert eine Änderung, danach holt das System alle nötigen Details über die API.
Der Webhook ist nicht die einzige Möglichkeit, um von anderen Diensten über Neuerungen informiert zu werden. Je nach Aufgabe kommen auch Polling oder WebSocket zum Einsatz.
Polling bedeutet, dass das System regelmäßig Anfragen an den Server stellt - etwa alle zehn Sekunden auf neue Nachrichten prüft. Das ist einfach umzusetzen, verursacht aber hohe Last, selbst wenn keine Änderungen auftreten.
Webhooks erzeugen keine dauerhafte Verbindung. Der Dienst sendet eine einzelne HTTP-Anfrage erst nach einem vordefinierten Ereignis. Das ist ideal für serverseitige Integrationen, Benachrichtigungen und Automatisierungen.
WebSocket wiederum baut eine dauerhafte bidirektionale Verbindung zwischen Client und Server auf, sodass beide Seiten jederzeit Daten austauschen können. Das ist nützlich für Chats, Online-Spiele, Handelsplattformen und andere Anwendungen mit Echtzeit-Kommunikation.
Mehr zum Prinzip dauerhafter Verbindungen finden Sie im Beitrag WebSocket einfach erklärt: So funktioniert die Echtzeit-Datenübertragung.
Die Wahl hängt von der Art der Daten ab: Für selbstbestimmte Anfragen ist die API ideal, zur automatischen Reaktion auf Ereignisse der Webhook, und für ständigen Datenfluss in Echtzeit der WebSocket.
Damit ein Webhook funktioniert, benötigt das empfangende System eine öffentlich erreichbare URL - den sogenannten Webhook-Endpoint.
Der Entwickler erstellt einen Handler, der eingehende Daten empfängt, prüft und die gewünschte Aktion ausführt. Die URL wird dann in den Einstellungen des Quell-Systems hinterlegt.
Beispiel für einen Endpoint:
https://example.com/webhooks/payment
Wenn das relevante Ereignis eintritt, sendet der externe Dienst die Anfrage genau an diese Adresse.
Wichtig ist, dass der Endpoint aus dem Internet erreichbar ist und HTTPS unterstützt. Für lokale Entwicklung werden oft spezielle Tunnel- oder Testdienste genutzt, die temporär eine öffentliche Adresse für den Entwickler-PC bereitstellen.
Ein Webhook-Endpoint ist für eingehende Anfragen offen, daher dürfen eingehende Requests nicht blind vertraut werden.
Wenn Unbefugte die Webhook-Adresse kennen, könnten sie versuchen, gefälschte Ereignisse zu senden. Viele Dienste signieren Webhook-Anfragen daher mit einem geheimen Schlüssel.
Das empfangende System berechnet die Signatur selbst und vergleicht sie mit der vom Dienst gesendeten. Stimmen beide überein, kann sichergestellt werden, dass die Daten vom erwarteten Absender kommen und unterwegs nicht verändert wurden.
Zusätzlich können geheim gehaltene Tokens, Prüfung der HTTPS-Verbindung und IP-Adress-Filter genutzt werden, sofern der Dienst dies unterstützt.
Ein Webhook garantiert nicht, dass eine Anfrage immer beim ersten Mal verarbeitet wird. Server können zeitweise nicht erreichbar sein, Verbindungen abbrechen oder die Verarbeitung kann zu lange dauern.
Daher implementieren viele Plattformen einen Retry-Mechanismus: Antwortet der Endpoint mit einem Fehler oder zu spät, wird die Anfrage später erneut gesendet.
So kann dasselbe Ereignis mehrfach eintreffen. Die empfangende Anwendung muss Duplikate erkennen und darf identische Aktionen nicht mehrfach ausführen.
Das ist besonders bei Zahlungen wichtig - bei doppelter Benachrichtigung dürfen Guthaben oder Bestellungen nicht doppelt angelegt oder Waren erneut verschickt werden.
Hier hilft ein Ereignis-Identifier: Vor jeder Aktion prüft die Anwendung, ob diese ID schon verarbeitet wurde. Dieser Ansatz wird idempotente Verarbeitung genannt.
Nach Erhalt des Webhooks sollte der Server einen HTTP-Statuscode zurückgeben - meist bestätigt ein Code im Bereich 200 die erfolgreiche Verarbeitung.
Antwortet der Server mit einem Fehler, wertet der externe Dienst die Zustellung als fehlgeschlagen und versucht die Übertragung erneut.
Aufwändige Aktionen sollten idealerweise nicht direkt im Webhook-Endpoint ausgeführt werden. Dauert eine Operation zu lange, kann das Ereignis zunächst geprüft, in eine Aufgabenwarteschlange gelegt und ein schneller Erfolgs-Response zurückgegeben werden. Die eigentliche Verarbeitung erfolgt dann asynchron.
Logging ist ebenfalls wichtig: Zeitpunkt des Ereignisses, Typ, ID und Ergebnis der Verarbeitung sollten gespeichert werden. Das erleichtert die Fehleranalyse und das Nachvollziehen von wiederholten Zustellungen.
Ein gut konfigurierter Webhook ist mehr als nur eine URL für POST-Anfragen. Eine zuverlässige Integration berücksichtigt Quell-Prüfung, Wiederholungsversuche, Dubletten, Fehler und temporäre Serverausfälle.
Webhooks ermöglichen es einem System, ein anderes automatisch und ohne ständige API-Abfragen über Ereignisse zu informieren. Das ist besonders praktisch für Zahlungen, Benachrichtigungen, Service-Integrationen, Automatisierungen und andere Prozesse, bei denen eine schnelle Reaktion auf Änderungen erforderlich ist.
Der Hauptunterschied zwischen Webhook und klassischer API liegt in der Richtung der Kommunikation. Bei APIs fragt der Client aktiv Daten ab, beim Webhook sendet das Quell-System nach einem Ereignis eine Benachrichtigung. Beide Technologien ergänzen sich jedoch meist und schließen sich nicht aus.
Wenn das System Daten auf Anfrage benötigt, Suchen durchführt oder Objekte verändert, ist die API die richtige Wahl. Für automatische Reaktionen auf bestimmte Ereignisse eignet sich der Webhook. Und für dauerhaften, beidseitigen Datenaustausch in Echtzeit wird häufig WebSocket genutzt.
Bei der Einführung von Webhooks sind nicht nur das Senden von HTTP-Anfragen, sondern auch Sicherheit, Signaturprüfung, Wiederholungen, Dubletten-Schutz und eine saubere Fehlerbehandlung zu berücksichtigen. Gerade diese Details machen aus einem einfachen Webhook-Endpoint eine zuverlässige Integration zwischen Diensten.