TL;DR
Ereignisgesteuerte APIs verwenden Webhooks für externe Benachrichtigungen und Nachrichtenwarteschlangen für die interne Verarbeitung. Veröffentlichen Sie Ereignisse in einer Warteschlange (RabbitMQ, Kafka), verarbeiten Sie diese asynchron und benachrichtigen Sie Clients über Webhooks. Die moderne PetstoreAPI nutzt dieses Muster für die Auftragsverarbeitung, Bestandsaktualisierungen und Zahlungsbenachrichtigungen.
Einführung
Ein Kunde gibt eine Bestellung auf. Ihre API muss die Zahlung belasten, den Bestand aktualisieren, eine E-Mail senden, das Lager benachrichtigen und Webhooks auslösen. Tun Sie all dies synchron und lassen den Kunden 10 Sekunden warten? Oder antworten Sie sofort und verarbeiten asynchron?
Ereignisgesteuerte APIs reagieren schnell und verarbeiten im Hintergrund. Der Bestell-Endpunkt gibt sofort 201 Created zurück. Ereignisse lösen die Hintergrundverarbeitung aus. Webhooks benachrichtigen Clients, wenn der Vorgang abgeschlossen ist.
Die moderne PetstoreAPI verwendet eine ereignisgesteuerte Architektur für Bestellungen, Zahlungen und den Lagerbestand.
Apidog hilft Ihnen, Webhooks zu testen, Ereignisflüsse zu validieren und asynchrone Verarbeitung zu simulieren.
Ereignisgesteuerte Architektur
Ereignisgesteuerte APIs veröffentlichen Ereignisse, wenn Dinge geschehen. Andere Dienste abonnieren und reagieren.
Komponenten
- Ereignis-Produzent – API-Endpunkt, der Ereignisse veröffentlicht
- Ereignis-Bus/Warteschlange – Leitet Ereignisse (RabbitMQ, Kafka, SQS)
- Ereignis-Konsument – Hintergrund-Worker, die Ereignisse verarbeiten
- Webhooks – Benachrichtigen externe Clients
Ablauf
Client → POST /orders → API
API → Publish "order.created" → Queue
API → Return 201 Created → Client
Worker → Consume event → Process order
Worker → Publish "order.completed" → Queue
Webhook Worker → Send webhook → Client
Webhooks für externe Ereignisse
Webhooks benachrichtigen externe Clients über Ereignisse.
// Publish event when order created
app.post('/v1/orders', async (req, res) => {
const order = await createOrder(req.body);
await eventBus.publish('order.created', {
orderId: order.id,
userId: order.userId,
total: order.total
});
res.status(201).json(order);
});
// Background worker sends webhooks
eventBus.subscribe('order.completed', async (event) => {
const webhooks = await getWebhooks(event.userId, 'order.completed');
for (const webhook of webhooks) {
await sendWebhook(webhook.url, {
event: 'order.completed',
data: event
});
}
});
Nachrichtenwarteschlangen für interne Ereignisse
Nachrichtenwarteschlangen verwalten die interne Ereignisverarbeitung.
RabbitMQ Beispiel
// Publisher
await publishEvent('order.created', { orderId: '019b4132' });
// Consumer
await consumeEvents('order.*', async (event) => {
await processOrder(event);
});
Wie die moderne PetstoreAPI ereignisgesteuerte APIs implementiert
Auftragsverarbeitung
- POST /orders gibt sofort 201 zurück
- Veröffentlicht das Ereignis order.created
- Zahlungs-Worker verarbeitet die Zahlung
- Bestands-Worker aktualisiert den Lagerbestand
- E-Mail-Worker sendet Bestätigung
- Webhook-Worker benachrichtigt den Client
Siehe die Ereignisarchitektur der modernen PetstoreAPI.
Testen mit Apidog
Apidog unterstützt das Testen ereignisgesteuerter APIs:
- Webhook-Zustellung testen
- Ereignis-Payloads validieren
- Asynchrone Verarbeitung simulieren
- Wiederholungslogik testen
Fazit
Ereignisgesteuerte APIs verbessern Leistung und Skalierbarkeit. Verwenden Sie Webhooks für externe Benachrichtigungen und Nachrichtenwarteschlangen für die interne Verarbeitung. Die moderne PetstoreAPI demonstriert produktionsreife ereignisgesteuerte Muster.
FAQ
Was ist der Unterschied zwischen Webhooks und Nachrichtenwarteschlangen?
Webhooks benachrichtigen externe Clients über HTTP. Nachrichtenwarteschlangen verwalten die interne Dienstkommunikation.
Welche Nachrichtenwarteschlange sollte ich verwenden?
RabbitMQ für Einfachheit, Kafka für hohen Durchsatz, AWS SQS für verwalteten Dienst.
Wie gehen Sie mit Webhook-Fehlern um?
Implementieren Sie eine Wiederholungslogik mit exponentiellem Backoff (siehe unseren Leitfaden zur Webhook-Zuverlässigkeit).
Können Sie Ereignisse ohne Nachrichtenwarteschlangen verwenden?
Ja, aber Warteschlangen bieten Persistenz, Wiederholung und Entkopplung.
Wie testen Sie ereignisgesteuerte APIs?
Verwenden Sie Apidog, um Webhooks zu testen und Ereignisflüsse zu validieren.
