TERM 038
Webhook
イベントが起きたら、HTTPで相手へ知らせる
Webhookは、あるシステムでイベントが発生したとき、登録されたURLへHTTPリクエストを送る通知方式です。受け手が定期的に問い合わせるPollingを減らせます。
イベント発生時に別のシステムへHTTPで通知する仕組みの全体像。
CONTENTSこの記事の目次+
QUICK OVERVIEW
30秒でつかむ
受信URL
HTTPSで公開し、短時間で受理結果を返します。
送信元の検証
共有Secretなどによる署名を生Bodyから検証します。
重複の識別
処理済みIDを記録し、同じ通知の再実行を防ぎます。
01 — DEFINITION
Webhookとは
何か
Webhookは、あるシステムでイベントが発生したとき、登録されたURLへHTTPリクエストを送る通知方式です。受け手が定期的に問い合わせるPollingを減らせます。
02 — HOW IT WORKS
仕組みを
3段階で見る
細部へ入る前に、入力から結果までの役割を順番に捉えます。
出来事が発生
支払完了やPushなど、通知対象の状態変化が起きる。
→登録URLへ送信
イベントIDと内容をHTTP Requestとして届ける。
→検証して受理
署名と重複を確認し、すぐ成功応答を返す。
Webhookを理解するときの、最小の処理単位です。
03 — ESSENTIALS
押さえるべき
3つの要点
名前だけでなく、この3点の関係まで理解すると実装へつなげやすくなります。
受信URL
HTTPSで公開し、短時間で受理結果を返します。
送信元の検証
共有Secretなどによる署名を生Bodyから検証します。
重複の識別
処理済みIDを記録し、同じ通知の再実行を防ぎます。
04 — REAL WORLD EXAMPLE
決済完了を注文へ反映する
決済サービスが非同期で支払結果を確定します。
- 01
payment.succeededを受信する
- 02
署名とイベントIDを検証する
- 03
Queueへ渡して注文状態を一度だけ更新する
05 — WATCH OUT
理解するときの
注意点
便利な仕組みほど、守備範囲と失敗の前提を明確にします。
受信したBodyを先に加工しない
署名方式によっては生のRequest Bodyそのものが検証対象です。
重い処理を同期で行わない
まず受理してQueueへ渡し、送信側のTimeoutと再送を減らします。
IN ONE SENTENCE
Webhookとは?
イベント発生時に別のシステムへHTTPで通知する仕組み。
