Webhookとは?

Webhookとは?

この記事は What’s a Webhook? の抄訳です。

近年、Webhookという仕組みが徐々に知名度を上げています。イベント駆動のWeb上の処理が増えるにしたがって、Webhookを適用できる場面は広がってきています。

Webhookは、「Webコールバック」や「HTTPプッシュAPI」などとも呼ばれ、あるアプリケーションから別のアプリケーションに対して、リアルタイムな情報提供を実現するための仕組みです。複数端末で情報をやり取りするときによく使われる手法に「ポーリング」がありますが、ポーリングによってリアルタイムなやり取りを実現するためには、高い頻度でデータの有無を問い合わせる必要があります。それに対してWebhookは、イベント発生をトリガにして送信側がデータを送出するので、送信側・受信側ともに効率のいい方法です。

ただし、唯一欠点があるとすれば、初期設定が難しいことです。Webhookは「リバースAPI」とも呼ばれるように、Webhookプロバイダ(リクエスト送信側)から提供されるAPI仕様に応じて、受信側のAPIを実装する必要があるためです。Webhookプロバイダは、指定されたURLに対してHTTPリクエスト(通常はPOST)を行い、受信側はその内容をパース(リクエストの内容を解釈)して利用します。

メール配信を無料ではじめる

Webhookの利用

Webhookを利用するための手順は以下の通りです。

  1. Webhookプロバイダからのリクエストを受ける、受信側アプリケーションのURLを設定(設定画面やAPIを通じて行うことが多い)する
  2. 受信側アプリケーションのURLがパブリックネットワークからアクセスできるよう、セットアップする

Webhookは通常、次のうちいずれかの方法でデータを送信します。

  • JSON(一般的)もしくはXML(微妙……)
  • フォームデータ(application/x-www-form-urlencodedもしくはmultipart/form-data)

どの方法でデータが送信されるかはプロバイダによって異なります(受信側で選択できる場合もあります)。いずれにせよ、通常はWebフレームワーク側がパースをしてくれます。Webフレームワークの機能でパースできない場合でも、ライブラリなどを利用すると簡単な関数を呼ぶだけでパースできます。

Webhookのデバッグ

Webhookは非同期処理のため、デバッグが難しい場合があります。トリガをひく→リクエストを待つ→レスポンスを確認する、といった流れが必要になるので、やり方によっては非常に効率が悪くなります。しかし、ラッキーなことにツールを使えば簡単にデバッグが可能です!公式ドキュメントでも紹介している方法を以下にまとめます。

  1. RequestBinのようなWebhookのリクエストを収集するツールを利用して、Webhookがどういったリクエストを送信するか確認する
  2. cURLPostmanのようなツールを利用してテスト用のリクエストを生成する
  3. ngrokのようなツールを利用してローカルマシン上でプログラムをテストする
  4. Runscopeのようなツールを利用して全体のフローを確認する

Webhookをセキュアにする

Webhookを利用するには、受信側アプリケーションのURLをパブリックネットワークに公開する必要があるため、そのURLを見つけた第三者から不正なリクエストが送られてくる可能性があります。こういったことを防ぐためには、Webhookの送信元が正当であるかどうかの確認が必要です。最低限対応すべき内容としてTLS接続(https)の強制化がありますが、その上で、さらにセキュアにする方法をいくつかご紹介します。

  1. Webhookプロバイダのリクエスト先URLに、`?auth=TK`のようなトークンをパラメータとして追加することで、一意に識別する(よく採用される方法です)
  2. 受信側アプリケーションにBasic認証を設定しておき、Webhookプロバイダのリクエスト先URLに認証情報を含めることで認証を通すようにする(簡単で、かつよく採用される方法です)
  3. Webhookプロバイダが、各リクエストに署名する

ほとんどの攻撃は最初の2つの方法で防ぐことができますが、リクエストにトークンや認証情報を追加して送信しなければなりません。3つ目の方法は、正しい送信者からのリクエストであることを受信側で確かめることができますが、プロバイダ側に署名してもらう必要があります。

重要なこと

Webhookの受信側アプリケーションを作成する際の注意点が2つあります。

  • Webhookプロバイダは、受信側アプリケーションがリクエストを正常に受け取ったら、その後のことは気にかけません。これは、受信側アプリケーションでエラーが発生した場合、データを失う可能性があることを意味します。多くのWebhookは受信側のレスポンスをチェックしていますので、受信側アプリケーションがエラーを返せば、リクエストは再送されます。逆に、受信側アプリケーションがリクエストを処理したにも関わらずエラーを返してしまうと、プロバイダからの再送によりデータが二重化してしまいます。Webhookプロバイダがレスポンスをどのように扱うか理解して、エラー処理を行ってください。
  • 多くのイベントが発生した場合、多数のリクエスト(POST)が送られてくることになるため、受信側アプリケーションに過剰な負荷がかかってしまう可能性があります。受信側アプリケーションが、想定しているスケールのリクエストを処理できることを確認してください。負荷テストツールとして、SendGrid LabsではLoader.ioというサービスを提供しています。

はじめてみましょう

Webhookを真に理解するための最良の方法は試してみることです。多くのサービスがWebhook機能を提供しています。いくつか例をご紹介します。

是非、Webhookで楽しんでみてください!

メール配信を無料ではじめる

アーカイブ

メールを成功の原動力に

開発者にもマーケターにも信頼されているメールサービスを利用して、
時間の節約、スケーラビリティ、メール配信に関する専門知識を手に入れましょう。