Webhooks

Webhooks はサーバーが能動的(のうどうてき)通知(つうち) をプッシュする仕組(しく) み。ポーリング(Polling)と比較(ひかく) して、イベント更新(こうしん)即時(そくじ)受信(じゅしん) できる。

Polling vs Webhooks

Polling vs Webhooks

Short Polling

クライアントが定期的(ていきてき) にサーバーにリクエストを送信(そうしん) し、更新(こうしん)確認(かくにん)

  sequenceDiagram
    box Services
        participant OS as ...Service
        participant PS as Payment Service
    end
    participant PSP as External PSP (Stripe...)

    OS -->> PS: process
    PS -->> PSP: Payment ready?
    PSP -->> PS: not ready
    PS -->> PSP: Payment ready?
    PSP -->> PS: Yes!

欠点(けってん)

  • 過剰(かじょう) リクエスト: 頻繁(ひんぱん)周期的(しゅうきてき) リクエストが不要(ふよう) なサーバー負荷(ふか) とネットワークトラフィックを発生(はっせい)

  • **遅延(ちえん) **: 更新(こうしん) はポーリング間隔(かんかく) でのみ受信(じゅしん)

Long Polling

クライアントがリクエスト送信後(そうしんご) 、サーバーは(あたら) しいデータがあるかタイムアウトまで接続(せつぞく)維持(いじ)

  sequenceDiagram
    box Services
        participant OS as ...Service
        participant PS as Payment Service
    end
    participant PSP as External PSP (Stripe...)

    OS -->> PS: process
    PS -->>+ PSP: Payment ready?
    PSP -> PSP: Connection Open - timeout: 10 sec
    PSP -->>- PS: Yes

欠点(けってん)

  • **リソース集約的(しゅうやくてき) **: 長期(ちょうき) 接続(せつぞく)維持(いじ) がサーバーリソースを消費(しょうひ)

  • **接続(せつぞく) 中断(ちゅうだん) 遅延(ちえん) **: 接続(せつぞく)() れた場合(ばあい)再接続(さいせつぞく)遅延(ちえん)発生(はっせい)

Webhooks

サーバーがイベント発生時(はっせいじ)能動的(のうどうてき) にクライアントに通知(つうち)

  sequenceDiagram
    participant EcomW as Ecommerce Website
    participant Gate as API Gateway
    box Services
        participant OS as Order Service
        participant PS as Payment Service
    end
    participant PSP as External PSP (Stripe...)

    EcomW -->> Gate: Request
    Gate -->> OS: process
    OS -->> PS: process
    PS -->> PSP: call me back at http://example.webhook.com
    PSP -->> Gate: Result

Webhooks ベストプラクティス

1. Fallback Polling Mechanism

失敗(しっぱい) した配信(はいしん)検出(けんしゅつ) し、重要(じゅうよう)更新(こうしん)見逃(みのが) さないようにバックアップポーリングを使用(しよう)

2. Secure with Secrets and Tokens

(かく) ()() しの署名(しょめい)検証(けんしょう) し、本物(ほんもの) のユーザーであることを確認(かくにん)

3. Make Webhooks Idempotent

結果(けっか) データには一意(いちい)識別子(しきべつし)(ふく) め、重複(じゅうふく) 処理(しょり)副作用(ふくさよう)発生(はっせい) しないようにする。

4. Handle Webhook Overload

キューを使用(しよう) して大量(たいりょう) の webhook リクエストを処理(しょり) し、システム過負荷(かふか)回避(かいひ)

Comparison Summary

特性(とくせい)Short PollingLong PollingWebhooks
即時性(そくじせい)(てい)(ちゅう)(こう)
サーバー負荷(ふか)(こう)(ちゅう)(てい)
実装(じっそう) 複雑度(ふくざつど)(てい)(ちゅう)(こう)
適用(てきよう) シナリオ低頻度(ていひんど) 更新(こうしん)中頻度(ちゅうひんど) 更新(こうしん)即時(そくじ) 通知(つうち)