Xây Dựng API Hướng Sự Kiện với Webhooks và Message Queues Như Thế Nào?

Ashley Innocent

Ashley Innocent

13 tháng 3 2026

Xây Dựng API Hướng Sự Kiện với Webhooks và Message Queues Như Thế Nào?

Apidog cho doanh nghiệp

Triển khai tại chỗ

SSO & RBAC

Tuân thủ SOC 2

Khám phá Apidog Enterprise

Tóm tắt

API hướng sự kiện sử dụng webhook để thông báo bên ngoài và hàng đợi tin nhắn để xử lý nội bộ. Phát hành sự kiện vào một hàng đợi (RabbitMQ, Kafka), xử lý bất đồng bộ và thông báo cho khách hàng qua webhook. PetstoreAPI hiện đại sử dụng mẫu này để xử lý đơn hàng, cập nhật kho hàng và thông báo thanh toán.

Giới thiệu

Một khách hàng đặt hàng. API của bạn cần tính phí thanh toán, cập nhật kho hàng, gửi email, thông báo cho kho và kích hoạt webhook. Bạn làm tất cả những việc này đồng bộ, khiến khách hàng phải đợi 10 giây? Hay phản hồi ngay lập tức và xử lý bất đồng bộ?

API hướng sự kiện phản hồi nhanh chóng và xử lý trong nền. Điểm cuối đơn hàng trả về 201 Created ngay lập tức. Các sự kiện kích hoạt xử lý nền. Webhook thông báo cho khách hàng khi hoàn thành.

PetstoreAPI hiện đại sử dụng kiến trúc hướng sự kiện cho đơn hàng, thanh toán và kho hàng.

Apidog giúp bạn kiểm tra webhook, xác thực luồng sự kiện và mô phỏng xử lý bất đồng bộ.

nút

Kiến trúc hướng sự kiện

API hướng sự kiện phát hành sự kiện khi có điều gì đó xảy ra. Các dịch vụ khác đăng ký và phản ứng.

Các thành phần

  1. Event Producer (Nhà sản xuất sự kiện) - Điểm cuối API phát hành sự kiện
  2. Event Bus/Queue (Bus/Hàng đợi sự kiện) - Định tuyến các sự kiện (RabbitMQ, Kafka, SQS)
  3. Event Consumer (Người tiêu thụ sự kiện) - Các worker nền xử lý sự kiện
  4. Webhooks - Thông báo cho các máy khách bên ngoài

Luồng hoạt động

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

Webhook cho các sự kiện bên ngoài

Webhook thông báo cho các máy khách bên ngoài về các sự kiện.

// Phát hành sự kiện khi đơn hàng được tạo
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);
});

// Worker nền gửi 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
    });
  }
});

Hàng đợi tin nhắn cho các sự kiện nội bộ

Hàng đợi tin nhắn xử lý các sự kiện nội bộ.

Ví dụ về RabbitMQ

// Nhà xuất bản
await publishEvent('order.created', { orderId: '019b4132' });

// Người tiêu thụ
await consumeEvents('order.*', async (event) => {
  await processOrder(event);
});

Cách PetstoreAPI hiện đại triển khai API hướng sự kiện

Xử lý đơn hàng

  1. POST /orders trả về 201 ngay lập tức
  2. Phát hành sự kiện order.created
  3. Worker thanh toán xử lý thanh toán
  4. Worker kho hàng cập nhật số lượng
  5. Worker email gửi xác nhận
  6. Worker webhook thông báo cho khách hàng

Xem kiến trúc sự kiện của PetstoreAPI hiện đại.

Kiểm thử với Apidog

Apidog hỗ trợ kiểm thử API hướng sự kiện:

Kết luận

API hướng sự kiện cải thiện hiệu suất và khả năng mở rộng. Sử dụng webhook cho các thông báo bên ngoài và hàng đợi tin nhắn cho xử lý nội bộ. PetstoreAPI hiện đại thể hiện các mẫu hướng sự kiện sẵn sàng cho sản xuất.

Câu hỏi thường gặp

Sự khác biệt giữa webhook và hàng đợi tin nhắn là gì?

Webhook thông báo cho các máy khách bên ngoài qua HTTP. Hàng đợi tin nhắn xử lý giao tiếp dịch vụ nội bộ.

Tôi nên sử dụng hàng đợi tin nhắn nào?

RabbitMQ để đơn giản, Kafka cho thông lượng cao, AWS SQS cho dịch vụ được quản lý.

Bạn xử lý lỗi webhook như thế nào?

Triển khai logic thử lại với thời gian chờ tăng dần theo cấp số nhân (xem hướng dẫn độ tin cậy webhook của chúng tôi).

Bạn có thể sử dụng các sự kiện mà không cần hàng đợi tin nhắn không?

Có, nhưng hàng đợi cung cấp độ bền, khả năng thử lại và tách rời.

Bạn kiểm thử API hướng sự kiện như thế nào?

Sử dụng Apidog để kiểm thử webhook và xác thực luồng sự kiện.

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API