よろずやIT
プログラミング

Webhookとは|APIとの違いと、通知が届く仕組み・安全に受け取る注意点

執筆・監修:よろずやIT編集部|編集方針を見る

結論:まずここだけ読めばOK

詳しい手順・原因は、この下で解説しています。

プログラミングのイラスト

結論: **Webhook(ウェブフック)**は、「何かが起きたら、このURLに知らせて」と、先にお願いしておく仕組みです。サービス側が、イベントの発生時に、自動で、HTTPで通知を送ります。問い合わせに行くAPIとは、向きが逆で、無駄な問い合わせが少なく、反応も早いのが、利点です。ただし、受け取る側の備え(署名の検証、再送への対応)が、欠かせません。

Webhookとは

たとえば、次のような場面で使われています。

「起きた時だけ、向こうから届く」のが、特徴です。

ポーリングとの違い

ポーリングでは何度も聞きに行き、Webhookでは起きた時だけ通知が届くことを比べた図解

方式 動き 長所 短所
ポーリング 一定の間隔で、「新着は?」と聞きに行く 実装が簡単 無駄な問い合わせが多い。反応が遅れる
Webhook 起きた時に、向こうから通知が届く 無駄がない。反応が早い 受け取る側が、公開URLと、安全な処理を用意する

APIとの違い

API Webhook
向き こちらから、問い合わせる 向こうから、知らせてくれる
きっかけ こちらが、必要な時 向こうで、何かが起きた時
受け取る側が必要なもの なし(呼び出すだけ) 通知を受け取る、公開URL

**対立するものではなく、組み合わせて使います。**たとえば、Webhookで「注文が入った」と知らされたら、APIで、詳しい注文内容を取りに行く、といった形です。APIの基本は、APIとはで解説しています。

通知が届く流れ

Webhookの通知が届くまでの4つのステップと、安全に受け取るための3つの注意の図解

  1. 受け取るURLを、サービスに登録する
  2. 出来事が起きる(決済完了、投稿など)
  3. サービスが、そのURLへ、HTTPリクエスト(多くはPOST)で通知を送る
  4. 受け取る側が処理し、「200」などの成功の応答を返す

通知の中身は、JSONという形式で、届くことが多くあります(JSONとは)。

受け取る側が気をつけること

① 本物かどうかを、署名で確認する

受け取るURLは、外部から、誰でも送れる入口になります。偽の通知を防ぐために、多くのサービスは、署名を付けます。

② すぐに「200」を返す

応答が遅いと、サービス側が、失敗とみなして、再送します。重い処理は、受け取ったあとに、別の仕組み(キューなど)で行い、まず、「200」を返します。

③ 同じ通知が、複数回届いても、大丈夫にする

再送や、通信の都合で、同じ通知が、複数回届くことがあります。通知のIDを記録して、処理済みなら、何もしない作りにします。この性質を、冪等性といいます(冪等性とは)。

④ HTTPSで受け取る

通知には、顧客の情報などが含まれることがあります。HTTPSで受け取ります。

よくあるトラブル

トラブル 原因・対処
通知が、届かない URLの打ち間違い。外部から、アクセスできない状態(ローカルのURL、ファイアウォール)
署名の検証が、失敗する 秘密の文字列の違い。本文を、加工してから、署名を計算している
同じ通知が、何度も届く 応答が遅い、または、失敗している。再送の設定
通知が、順番どおりに届かない 順番は、保証されないことがある。時刻や、バージョンで、判断する
処理に失敗した通知が、消えた 失敗した通知を、あとから確認できる仕組みを用意する(デッドレターキューとは)

まとめ

関連記事:APIとは、JSONとは、冪等性とは、APIキーとは、環境変数とは

SHAREXLINEはてブ

よくある質問

Q.WebhookとAPIは、何が違いますか?

A.APIは、こちらから、サービスに「教えて」と問い合わせる方式です。Webhookは、サービス側が、何かが起きた時に、「起きたよ」と、こちらに知らせる方式です。向きが逆で、「リバースAPI」と呼ばれることもあります。実際のシステムでは、組み合わせて使います。

Q.ポーリングとは、何ですか?

A.一定の間隔で、「新しい情報はありますか?」と、サービスに聞きに行く方式です。実装は簡単ですが、何も起きていなくても、問い合わせが発生し、反応も、間隔の分だけ遅れます。

Q.ローカルのパソコンで、Webhookを試せますか?

A.Webhookを受け取るには、外部のサービスから、届くURLが必要です。ローカルで試す場合は、一時的に、外部から届くURLを用意する、トンネルツールなどを使う方法があります。使うツールの安全性と、公開範囲に注意してください。

Q.同じ通知が、2回届きました。壊れていますか?

A.多くのサービスは、受け取りの応答がないと、通知を、再送します。そのため、同じ通知が、複数回届くことがあります。受け取る側は、通知のIDを記録するなどして、同じ通知を、2回処理しても、問題が起きないようにします(冪等性)。

Q.Webhookの通知が、本物かどうかを、確認する方法は?

A.多くのサービスは、通知に、署名(共通の秘密の文字列を使った、検証用の値)を付けます。受け取る側は、同じ秘密で、署名を計算して、一致するかを確認します。秘密の文字列は、コードに直書きせず、環境変数などで管理します。

関連記事

プログラミング用語解説

PHPとは?何ができる?仕組みとWordPressとの関係を図解で解説

PHPは、Webサイトの裏側(サーバー)で動くプログラミング言語で、WordPressもPHPで動いています。何ができるか、動く仕組み、簡単なコード例、メリット・注意点、始め方を、図解つきで初心者向けに解説します。

プログラミング用語解説

冪等キー(Idempotency-Key)とは?二重決済・二重登録を防ぐAPI設計と実装のポイント

通信エラーで、結果が分からず再送したら、二重に決済・登録されてしまった。この問題を防ぐのが、冪等キーです。仕組み、サーバー側の実装で決めること、クライアント側の使い方、よくある落とし穴を、サンプルコードつきで解説します。

プログラミング用語解説

Pythonとは?できること・向いている人・始め方を初心者向けに解説

Pythonとは何ができるプログラミング言語なのか。AI・データ分析・自動化・Web開発などの用途、読みやすいと言われる理由、始め方と最初のコード例を、初心者向けに解説します。

プログラミング用語解説

REST APIとGraphQLの違い|メリット・デメリットと選び方

REST APIとGraphQLの違いを、レストランの注文に例えて解説。メリット・デメリットの比較表と、どちらを選ぶかの判断基準もまとめました。

最新のIT関連書籍 トップ10

PR / 楽天市場の売れ筋ランキングを定期的に取得しています。価格は変動する場合があるため、購入前に各ストアでご確認ください。