webhook(ウェブフック)は、web開発でカスタムのコールバックを用いてウェブページやウェブアプリケーションの動作を追加または変更するための方法である。このコールバックは、元のウェブサイトやアプリケーションはサードパーティのユーザーや開発者がメンテナンス、修正、管理できる場合がある。「webhook」という用語は、コンピュータプログラミングの用語hookから、2007年にJeff Lindsayによって作られた[1]。
フォーマットには、通常JSONが利用される。リクエストは、HTTP POST
(英語版)リクエストとして行われる。webhookは「ユーザー定義のHTTPコールバック」である[2]。通常、コードをリポジトリにプッシュしたときや[3]、コメントがブログに投稿されたときなどのイベントによってトリガーされる[4]。イベントが発生すると、ソースサイトはwebhook用に設定されたURLにHTTPリクエストを送信する。ユーザーは、あるサイトのイベントによって、別のサイトの動作を呼び出すように設定できる。
一般的な用途には、継続的インテグレーションシステムでビルドをトリガーする[5]、バグトラッキングシステムに通知するなどがある。webhookはHTTPを使用するため、新しいインフラストラクチャを追加せずにWebサービスに統合することができる[6]。 クライアント(発信元のWebサイトまたはアプリケーション)がサードパーティユーザーのサーバーにwebhook呼び出しを行う場合、スプーフィング攻撃を回避するために、受信したPOSTリクエストを認証する必要がある。クライアントを認証するためには、次にようなさまざまな手法がある。
webhook通知の認証
受信エンドポイントが、要求を許可する既知のソースのIPアドレスのリストを保持する。
HTTPのBasic認証を使用して、クライアントを認証する[7]。
Webhookに、イベントの種類に関する情報、Webhookを検証するためのシークレットまたは署名を含める。
HMAC署名をHTTPヘッダーに含める。 GitHubとStripe[8]はこの方法を利用している。
SHA-1を使用してリクエストに署名する[9]。Facebookはこの方法を利用している。
接続が確立されたときにMutual TLS認証
プロトコル
HTTP
v2
v3
暗号化
WebDAV
CGI
SCGI(英語版)
FCGI
AJP(英語版)
WSRP(英語版)
WebSocket
APIs
C NSAPI(英語版)
C ASAPI
C ISAPI
Java Servlet
CIL System.Web.IHttpHandler(英語版)
Python WSGI
Ruby Rack(英語版)
JavaScript JSGI(英語版)
Perl PSGI
Lua WSAPI(英語版)
トピックス
Webサービス
アプリケーションサーバ
リソース (WWW)
Open API(英語版)
サーバサイドスクリプト
Webhook
クライアントサイド
Browser APIs
ActiveX
Browser Helper Object
Google Native Client
WebAssembly
Web API(英語版)
W3C
Canvas
CORS(英語版)
File API(英語版)
Geolocation(英語版)
IndexedDB
Microdata(英語版)
SVG
WebGPU
WebRTC
WebSocket
WebVTT
Web Messaging(英語版)
Web storage(英語版)
Web worker(英語版)
XMLHttpRequest
オーディオ
ビデオ
クロノス
WebCL
WebGL
その他
Gears
Web SQL Database(英語版)
WebUSB(英語版)
トピックス
Ajax
DHTML
Mashup
Web IDL(英語版)
関連項目
ウェブページ
静的
動的(英語版)
Open Web Platform(英語版)
Web API security(英語版)
ウェブアプリケーション
RIA
SPA
PWA
ウェブユーザインタフェース