summary:
プログラマであるJeff Lindsayが2007年頃にwebhookという用語を提唱したことで,広く知られるようになった.それ以前にも HTTP callback や URL ping として類似の手法は存在していたが,Webhookという語が導入されたことで,明確なパターンとして定義され,普及が進んだ.
当初はブログの更新通知[Pingback]やRSSリーダーにおける購読更新の通知などが主な用途であったが,GitHub,Slack,Stripe,TwilioなどのAPI提供プラットフォームがWebhookを正式にサポートするようになったことにより,開発者コミュニティにおいて事実上の標準的通知機構として定着した.
Webhookは,通常HTTPまたはHTTPSプロトコルを用い,POSTメソッドで通知を送信する.エンドポイント側では,送信元の正当性を検証するために,署名付きのHMACヘッダーやトークンベースの認証を行うことが推奨される.
通知先が一時的にダウンしている場合に備え,再送処理や,受信側での冪等な処理が重要となる.StripeやGitHubのような主要サービスでは,失敗時のリトライ処理が組み込まれており,再送時に同一イベントIDを送信することで,重複処理の回避が可能となっている.
大規模な分散システムでは,Webhookの送信をQueue[例:KafkaやSQS]や専用ゲートウェイ[例:Convoy]を介して行うことでスケーラビリティと信頼性を確保する.また,エンドポイントの公開による攻撃リスクを回避するため,IP制限,HTTPS,署名検証などのセキュリティ対策が必要不可欠である.
Mathematics is the language with which God has written the universe.