Webhookとメッセージキューでイベント駆動型APIを構築する方法

Ashley Innocent

Ashley Innocent

13 3月 2026

Webhookとメッセージキューでイベント駆動型APIを構築する方法

要約 (TL;DR)

イベント駆動型APIは、外部通知にウェブフックを、内部処理にメッセージキューを使用します。イベントをキュー(RabbitMQ、Kafkaなど)に発行し、非同期で処理し、ウェブフックを通じてクライアントに通知します。モダンなPetstoreAPIは、注文処理、在庫更新、支払い通知にこのパターンを使用しています。

はじめに

顧客が注文を行います。あなたのAPIは、支払い処理、在庫更新、メール送信、倉庫への通知、ウェブフックのトリガーを行う必要があります。これらすべてを同期的に行い、顧客を10秒間待たせますか?それとも、すぐに応答し、非同期で処理しますか?

イベント駆動型APIは、迅速に応答し、バックグラウンドで処理を行います。注文のエンドポイントはすぐに201 Createdを返します。イベントがバックグラウンド処理をトリガーします。完了すると、ウェブフックがクライアントに通知します。

モダンPetstoreAPIは、注文、支払い、在庫にイベント駆動型アーキテクチャを使用しています。

Apidogは、ウェブフックのテスト、イベントフローの検証、非同期処理のシミュレーションを支援します。

ボタン

イベント駆動型アーキテクチャ

イベント駆動型APIは、何かが発生したときにイベントを発行します。他のサービスが購読し、反応します。

コンポーネント

  1. イベントプロデューサー - イベントを発行するAPIエンドポイント
  2. イベントバス/キュー - イベントをルーティングします(RabbitMQ、Kafka、SQSなど)
  3. イベントコンシューマー - イベントを処理するバックグラウンドワーカー
  4. ウェブフック - 外部クライアントに通知します

フロー

Client → POST /orders → API
API → "order.created"を発行 → キュー
API → 201 Createdを返す → Client
Worker → イベントを消費 → 注文を処理
Worker → "order.completed"を発行 → キュー
Webhook Worker → ウェブフックを送信 → Client

外部イベントのためのウェブフック

ウェブフックは、外部クライアントにイベントを通知します。

// 注文が作成されたときにイベントを発行
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);
});

// バックグラウンドワーカーがウェブフックを送信
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
    });
  }
});

内部イベントのためのメッセージキュー

メッセージキューは内部イベント処理を扱います。

RabbitMQの例

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

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

モダンPetstoreAPIがイベント駆動型APIをどのように実装しているか

注文処理

  1. POST /orders はすぐに201を返します
  2. order.createdイベントを発行します
  3. 支払いワーカーが支払いを処理します
  4. 在庫ワーカーが在庫を更新します
  5. メールワーカーが確認メールを送信します
  6. ウェブフックワーカーがクライアントに通知します

モダンPetstoreAPIのイベントアーキテクチャをご覧ください。

Apidogによるテスト

Apidogはイベント駆動型APIテストをサポートしています:

結論

イベント駆動型APIは、パフォーマンスとスケーラビリティを向上させます。外部通知にはウェブフックを、内部処理にはメッセージキューを使用します。モダンPetstoreAPIは、本番環境で利用できるイベント駆動型パターンを示しています。

よくある質問

ウェブフックとメッセージキューの違いは何ですか?

ウェブフックはHTTP経由で外部クライアントに通知します。メッセージキューは内部サービス間の通信を処理します。

どのメッセージキューを使用すべきですか?

シンプルさにはRabbitMQ、高スループットにはKafka、マネージドサービスにはAWS SQSです。

ウェブフックの失敗はどのように処理しますか?

指数関数的バックオフを用いたリトライロジックを実装します(ウェブフックの信頼性ガイドを参照)。

メッセージキューなしでイベントを使用できますか?

はい、しかしキューは耐久性、リトライ、分離を提供します。

イベント駆動型APIはどのようにテストしますか?

Apidogを使用してウェブフックをテストし、イベントフローを検証します。

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる