こんにちは!
ES開発部のだいです!
今私はアプリ開発の現場で業務をしています。
そこで初めて耳にしたWebhookという単語についてサクッとまとめていこうと思います。
Webhookとは
Wikipediaを見ると以下のように書かれています。
webhook(ウェブフック)は、web開発でカスタムのコールバックを用いてウェブページやウェブアプリケーションの動作を追加または変更するための方法である。このコールバックは、元のウェブサイトやアプリケーションはサードパーティのユーザーや開発者がメンテナンス、修正、管理できる場合がある。「webhook」という用語は、コンピュータプログラミングの用語hookから、2007年にJeff Lindsayによって作られた[1]。
フォーマットには、通常JSONが利用される。リクエストは、HTTP POSTリクエストとして行われる。
Wikipedia参照
これだと個人的には少し難しいので、もう少しわかりやすく説明すると、
WebhookとはWebアプリケーションでなにかしらのイベントが実行されたときに、他のサービスにHTTP通信で通知をする仕組みです。
ここだけ聞くとそれってAPIじゃ・・・という声が聞こえてきそうなので、APIとの違いを説明していこうと思います。
WebhookとAPIの違い
まず簡単にAPIのおさらいから。
APIとはApplication Programming Interfaceの略でインターフェイスとは何かと何かを繋ぐという意味があります。
つまりソフトウェアやプログラムやWebサービスとプログラムを繋ぐものといったイメージです。
WebhookとAPIの違いは以下の点です。
- APIはリクエストがあると、レスポンス返却してくれますが、Webhookはリクエストがなくても、あらかじめ設定した条件を満たせばレスポンスを返却してくれます。
日常でたとえると、お気に入りの漫画が更新されたとします。
APIで更新を知る場合はこちら側からリクエストをしないと更新されたかどうか結果がわかりません。Webhookの場合は「更新されたら通知する」という設定をしておくと、更新されるたびに勝手に通知が来るようになるイメージです。
そのためWebhookの方がリアルタイムで情報を入手できるという点で優れています。
Webhookのメリット
次にWebhookのメリットについても確認していきます。
1.ポーリングの必要がない
ポーリングとは更新がなかったかを定期的に確認する手法です。
ポーリングでは、リアルタイムに近い情報を取得しようとすると、通信トラフィックが増えてサーバーに負荷がかかってしまいます。
しかし、Webhookでは、上記でも説明したように設定した条件を満たした際に自動でレスポンスを返却するため、サーバーへの負荷を軽減し、かつリアルタイムな更新を確認することができます。
2.利用が簡単
現在Webhookは対応しているサービスがどんどん増えて来てます。
Webhookに対応したサービスの場合、プログラムを書いてWebhook機能を実装するといった難しいことをしなくても、ユーザーインターフェースから簡単にセットアップできるケースが増えているようです。
Webhookのデメリット
続けてWebhookのデメリットについても確認していきましょう。
1.セキュリティリスク
WebhookはサーバーからクライアントにPOSTメソッドでリクエストを送信します。
そのため悪意を持ったユーザーが不正なリクエストを送ることで、誤った情報を受け取ったり、悪意のある操作が行われる可能性があります。また、ユーザーからのリクエストが暗号化や認証の手段で保護されていない場合、個人情報が漏洩するリスクもあります。
対策として、Authenticationヘッダーに特定の文字列を指定したり、Basic認証を指定するなどして、不正なリクエストを受け取らないように設定することが大切です。
2.サーバーへの負荷
メリットの方でポーリングの必要がないのでサーバーへの負荷が少ないって言ったじゃないか!と思われる方もいらっしゃると思いますが、それはあくまでWebhookに適した処理の場合です。
Webhookは設定した条件を満たした際に自動でレスポンスを返却する仕組みで、少量の通信に向いている機能となっています。
そのため大量のデータが同時に送られてくる場合や、処理が複雑な場合など、Webhookに適していない処理に対して使用してしまうとサーバーへの負荷が増加してしまい通信に失敗したり問題が発生する可能性があります。
身の回りに潜むWebhook
現在Webhookは以下のような様々なサービスが対応しています。
・Slack
・LINE
・PayPay
・PayPal
・Google Drive
上記にはみなさんが日頃から使われるサービスも含まれているのではないでしょうか。
少し考えてみると皆さんの身の回りでも「あ、これWebhookつかってるのかも!?」と気づく箇所があるかもしれません。
自分の知っている知識が生活の中に溶け込んでいるのを発見すると少しうれしい気持ちになるのは私だけでしょうか!?
最後までお読みいただきありがとうございました。