Webhook
Webhook ist ein Mechanismus, bei dem eine Anwendung automatisch eine andere Anwendung ueber ein Ereignis benachrichtigt. Statt regelmaessig nachzufragen, ob es Neuigkeiten gibt (Polling), sendet das Quellsystem aktiv eine HTTP-Anfrage an eine vordefinierte URL. Diese Art der Kommunikation wird auch als HTTP Callback oder Reverse API bezeichnet und bildet die Grundlage fuer moderne Event-Driven Architectures.
Wie funktionieren Webhooks?
Die Funktionsweise von Webhooks laesst sich in vier Schritte unterteilen. Im Kern geht es darum, dass ein Quellsystem bei bestimmten Ereignissen automatisch Daten an ein Zielsystem uebertraegt.
1. Registrierung
Zuerst registrierst du beim Anbieter (dem Quellsystem) eine URL - den sogenannten Webhook-Endpunkt. Dieser Endpunkt ist ein HTTP-Server auf deiner Seite, der eingehende Anfragen entgegennimmt. Zusaetzlich legst du fest, bei welchen Ereignissen der Webhook ausgeloest werden soll. Bei GitHub koenntest du beispielsweise festlegen, dass du bei jedem Push-Event benachrichtigt werden moechtest.
2. Ereignis tritt ein
Sobald das konfigurierte Ereignis im Quellsystem eintritt - etwa eine erfolgreiche Zahlung bei einem Payment-Provider oder ein neuer Commit in einem Repository - erkennt das System dies automatisch und bereitet die Benachrichtigung vor.
3. HTTP-POST-Request
Das Quellsystem sendet eine HTTP-POST-Anfrage an deine registrierte URL. Die Ereignisdaten werden als Payload im Request-Body uebertragen, typischerweise im JSON-Format. Der Request enthaelt auch Header-Informationen wie Content-Type, Zeitstempel und oft eine kryptografische Signatur zur Verifizierung.
4. Verarbeitung und Bestaetigung
Dein Webhook-Endpunkt empfaengt die Anfrage, verarbeitet die Daten und antwortet mit einem HTTP-Statuscode. Ein 200 OK signalisiert dem Quellsystem, dass die Nachricht erfolgreich empfangen wurde. Die meisten Webhook-Systeme erwarten diese Bestaetigung innerhalb von 5 Sekunden - laengere Verarbeitungen solltest du daher asynchron ausfuehren.
// Beispiel: Einfacher Webhook-Endpunkt mit Express.js
const express = require('express');
const app = express();
app.use(express.json());
app.post('/webhook', (req, res) => {
const event = req.body;
console.log('Webhook empfangen:', event.type);
// Ereignis verarbeiten
switch (event.type) {
case 'payment.completed':
// Bestellung als bezahlt markieren
break;
case 'user.created':
// Willkommens-E-Mail senden
break;
}
// Schnelle Bestaetigung senden
res.status(200).json({ received: true });
});
app.listen(3000);
Webhook vs. Polling vs. API
Um die Vorteile von Webhooks zu verstehen, lohnt sich ein Vergleich mit alternativen Ansaetzen zur Datenuebertragung zwischen Systemen. Jeder Ansatz hat seine Berechtigung - die Wahl haengt vom konkreten Anwendungsfall ab.
| Aspekt | Webhook (Push) | Polling (Pull) | Klassische API |
|---|---|---|---|
| Kommunikationsrichtung | Server sendet aktiv | Client fragt regelmaessig | Client fragt bei Bedarf |
| Latenz | Echtzeit (Sekunden) | Abhaengig vom Intervall | Abhaengig vom Aufruf |
| Ressourcenverbrauch | Minimal (nur bei Events) | Hoch (viele leere Anfragen) | Variabel |
| Komplexitaet Client | Muss HTTP-Server bereitstellen | Einfache HTTP-Requests | Einfache HTTP-Requests |
| Zuverlaessigkeit | Erfordert Retry-Logik | Sehr zuverlaessig | Sehr zuverlaessig |
| Skalierbarkeit | Sehr gut | Schlecht bei vielen Clients | Gut |
Webhooks eignen sich besonders, wenn Ereignisse selten auftreten, aber schnell verarbeitet werden muessen. Polling ist sinnvoll, wenn du keinen eigenen Server betreiben kannst oder die Datenquelle keine Webhooks unterstuetzt. Klassische API-Aufrufe sind die beste Wahl, wenn du Daten gezielt und auf Anfrage abrufen moechtest - etwa um den aktuellen Status einer Bestellung anzuzeigen.
Typische Anwendungsfaelle
Webhooks sind aus modernen Softwarearchitekturen nicht mehr wegzudenken. Sie verbinden unterschiedliche Systeme und ermoeglichen automatisierte Workflows ohne manuellen Eingriff.
CI/CD-Pipelines
Versionskontrollsysteme wie GitHub, GitLab oder Bitbucket nutzen Webhooks, um Build-Server ueber neue Commits zu informieren. Sobald du Code pushst, triggert ein Webhook automatisch die CI/CD-Pipeline - Tests laufen, Code wird kompiliert und bei Erfolg automatisch deployed.
Payment-Services
Zahlungsdienstleister wie Stripe, PayPal oder Klarna senden Webhooks bei Zahlungsereignissen. Dein Shop-System erfaehrt sofort, wenn eine Zahlung erfolgreich war, fehlgeschlagen ist oder zurueckgebucht wurde - ohne dass du staendig den Status abfragen musst.
Chat-Bots und Messaging
Plattformen wie Slack, Discord oder Telegram nutzen Webhooks fuer Bot-Integrationen. Wenn jemand eine Nachricht an deinen Bot sendet, erhaelt dein Server einen Webhook mit dem Nachrichteninhalt und kann entsprechend reagieren.
Monitoring und Alerting
Monitoring-Tools wie Grafana, Datadog oder PagerDuty senden Webhooks, wenn bestimmte Schwellwerte ueberschritten werden. So kannst du bei einem Serverausfall automatisch Benachrichtigungen an Slack schicken oder Incident-Tickets erstellen.
E-Commerce und CRM
Online-Shops nutzen Webhooks, um Bestellungen an Lagersysteme weiterzuleiten, Versanddienstleister zu benachrichtigen oder CRM-Systeme mit Kundendaten zu synchronisieren. Jede neue Bestellung triggert eine Kette von automatisierten Aktionen.
Sicherheit bei Webhooks
Da Webhook-Endpunkte oeffentlich erreichbar sein muessen, sind sie ein potenzielles Angriffsziel. Ein Angreifer koennte gefaelschte Requests senden, um dein System zu manipulieren. Deshalb sind mehrere Sicherheitsmassnahmen erforderlich.
HMAC-Signaturpruefung
Die wichtigste Sicherheitsmassnahme ist die Signaturverifizierung. Der Webhook-Anbieter signiert jeden Request mit einem geheimen Schluessel (Shared Secret) unter Verwendung von HMAC-SHA256. Du berechnest die Signatur auf deiner Seite erneut und vergleichst sie mit der im Header uebermittelten Signatur. Stimmen beide ueberein, ist der Request authentisch.
const crypto = require('crypto');
function verifyWebhookSignature(payload, signature, secret) {
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
// Timing-safe Vergleich gegen Timing-Attacken
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expectedSignature)
);
}
// Verwendung im Express-Handler
app.post('/webhook', (req, res) => {
const signature = req.headers['x-webhook-signature'];
const isValid = verifyWebhookSignature(
JSON.stringify(req.body),
signature,
process.env.WEBHOOK_SECRET
);
if (!isValid) {
return res.status(401).json({ error: 'Invalid signature' });
}
// Webhook verarbeiten...
});
Weitere Sicherheitsmassnahmen
Neben der Signaturpruefung gibt es weitere Best Practices, die du beachten solltest:
- HTTPS verwenden: Webhooks sollten ausschliesslich ueber TLS-verschluesselte Verbindungen empfangen werden
- Zeitstempel validieren: Pruefe, ob der Request nicht aelter als wenige Minuten ist (Replay-Schutz)
- IP-Whitelist: Manche Anbieter veroeffentlichen ihre IP-Bereiche, die du per Firewall erlauben kannst
- Idempotenz: Stelle sicher, dass mehrfache Zustellung desselben Events keine Probleme verursacht
- Rate Limiting: Begrenze die Anzahl eingehender Requests, um DoS-Angriffe abzuwehren
Vor- und Nachteile von Webhooks
Webhooks bieten viele Vorteile, bringen aber auch Herausforderungen mit sich. Die Entscheidung fuer oder gegen Webhooks haengt von deinen Anforderungen und deiner Infrastruktur ab.
Vorteile
- Echtzeit-Benachrichtigungen: Ereignisse werden sofort uebermittelt, ohne Verzoegerung
- Ressourceneffizienz: Keine verschwendeten Anfragen bei ausbleibendem Event
- Einfache Integration: Standardisiertes HTTP-Protokoll, keine speziellen Bibliotheken noetig
- Lose Kopplung: Sender und Empfaenger sind unabhaengig voneinander
- Skalierbarkeit: Gut geeignet fuer Event-Driven Architectures und Microservices
Nachteile
- Erreichbarkeit erforderlich: Dein Endpunkt muss oeffentlich erreichbar und hochverfuegbar sein
- Fehlerbehandlung komplex: Bei Ausfaellen musst du Retry-Logik und Dead-Letter-Queues implementieren
- Debugging schwieriger: Eingehende Requests sind schwerer nachzuvollziehen als ausgehende API-Calls
- Sicherheitsrisiko: Oeffentliche Endpunkte erfordern sorgfaeltige Absicherung
- Keine Garantie: "At-least-once"-Semantik bedeutet, dass Events mehrfach ankommen koennen
Webhooks in der IT-Praxis
Webhooks begegnen dir in nahezu jeder modernen Entwicklungsumgebung. Als Fachinformatiker fuer Anwendungsentwicklung wirst du Webhooks implementieren, wenn du Integrationen zwischen verschiedenen Services baust - etwa um Bestellungen aus einem Shop-System an ein Lagerverwaltungssystem weiterzuleiten.
Auch als Fachinformatiker fuer Systemintegration sind Webhooks relevant: Du konfigurierst sie in CI/CD-Systemen, richtest Monitoring-Alerts ein oder verbindest verschiedene Cloud-Services miteinander. Das Verstaendnis von HTTP, JSON und grundlegenden Sicherheitskonzepten ist dabei essenziell.