Cara Membuat API Event-Driven dengan Webhooks dan Message Queue

Ashley Innocent

Ashley Innocent

13 March 2026

Cara Membuat API Event-Driven dengan Webhooks dan Message Queue

Ringkasan

API berbasis peristiwa (event-driven) menggunakan webhook untuk notifikasi eksternal dan antrean pesan untuk pemrosesan internal. Publikasikan peristiwa ke antrean (RabbitMQ, Kafka), proses secara asinkron, dan beri tahu klien melalui webhook. PetstoreAPI Modern menggunakan pola ini untuk pemrosesan pesanan, pembaruan inventaris, dan notifikasi pembayaran.

Pendahuluan

Seorang pelanggan melakukan pemesanan. API Anda perlu membebankan pembayaran, memperbarui inventaris, mengirim email, memberi tahu gudang, dan memicu webhook. Apakah Anda melakukan semua ini secara sinkron, membuat pelanggan menunggu 10 detik? Atau merespons segera dan memproses secara asinkron?

API berbasis peristiwa merespons dengan cepat dan memproses di latar belakang. Titik akhir pesanan segera mengembalikan 201 Created. Peristiwa memicu pemrosesan latar belakang. Webhook memberi tahu klien setelah selesai.

Modern PetstoreAPI menggunakan arsitektur berbasis peristiwa untuk pesanan, pembayaran, dan inventaris.

Apidog membantu Anda menguji webhook, memvalidasi alur peristiwa, dan mensimulasikan pemrosesan asinkron.

tombol

Arsitektur Berbasis Peristiwa

API berbasis peristiwa mempublikasikan peristiwa ketika sesuatu terjadi. Layanan lain berlangganan dan bereaksi.

Komponen

  1. Event Producer (Produsen Peristiwa) - Titik akhir API yang mempublikasikan peristiwa
  2. Event Bus/Queue (Bus/Antrean Peristiwa) - Merutekan peristiwa (RabbitMQ, Kafka, SQS)
  3. Event Consumer (Konsumen Peristiwa) - Pekerja latar belakang yang memproses peristiwa
  4. Webhooks - Memberi tahu klien eksternal

Alur

Klien → POST /orders → API
API → Publikasikan "order.created" → Antrean
API → Kembalikan 201 Created → Klien
Worker → Konsumsi peristiwa → Proses pesanan
Worker → Publikasikan "order.completed" → Antrean
Webhook Worker → Kirim webhook → Klien

Webhook untuk Peristiwa Eksternal

Webhook memberi tahu klien eksternal tentang peristiwa.

// Publikasikan peristiwa ketika pesanan dibuat
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);
});

// Pekerja latar belakang mengirim webhook
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
    });
  }
});

Antrean Pesan untuk Peristiwa Internal

Antrean pesan menangani pemrosesan peristiwa internal.

Contoh RabbitMQ

// Publisher (Penerbit)
await publishEvent('order.created', { orderId: '019b4132' });

// Consumer (Konsumen)
await consumeEvents('order.*', async (event) => {
  await processOrder(event);
});

Bagaimana Modern PetstoreAPI Mengimplementasikan API Berbasis Peristiwa

Pemrosesan Pesanan

  1. POST /orders segera mengembalikan 201
  2. Publikasikan peristiwa order.created
  3. Pekerja pembayaran memproses pembayaran
  4. Pekerja inventaris memperbarui stok
  5. Pekerja email mengirim konfirmasi
  6. Pekerja webhook memberi tahu klien

Lihat arsitektur peristiwa Modern PetstoreAPI.

Pengujian dengan Apidog

Apidog mendukung pengujian API berbasis peristiwa:

Kesimpulan

API berbasis peristiwa meningkatkan kinerja dan skalabilitas. Gunakan webhook untuk notifikasi eksternal dan antrean pesan untuk pemrosesan internal. Modern PetstoreAPI menunjukkan pola berbasis peristiwa yang siap produksi.

Pertanyaan Umum

Apa perbedaan antara webhook dan antrean pesan?

Webhook memberi tahu klien eksternal melalui HTTP. Antrean pesan menangani komunikasi layanan internal.

Antrean pesan mana yang harus saya gunakan?

RabbitMQ untuk kesederhanaan, Kafka untuk throughput tinggi, AWS SQS untuk layanan terkelola.

Bagaimana Anda menangani kegagalan webhook?

Terapkan logika coba ulang dengan backoff eksponensial (lihat panduan keandalan webhook kami).

Bisakah Anda menggunakan peristiwa tanpa antrean pesan?

Ya, tetapi antrean menyediakan durabilitas, coba ulang, dan decoupling.

Bagaimana Anda menguji API berbasis peristiwa?

Gunakan Apidog untuk menguji webhook dan memvalidasi alur peristiwa.

Mengembangkan API dengan Apidog

Apidog adalah alat pengembangan API yang membantu Anda mengembangkan API dengan lebih mudah dan efisien.