UI設計したり、ウェブシステムを開発したりします。 

SQL見るだけクエリ#119 PHPでWebhookを利用する方法

記入日:2023-05-07 編集日:2023-05-07

PHPでWebhookを利用する方法を解説してみようと思います。

この記事を読むと(約5分)
PHPでWebhookを利用する方法をイメージできます。

PHPでWebhookを利用する方法

Webhookは、Webアプリケーション間でのリアルタイムな通信を実現するための仕組みの一つです。具体的には、あるWebアプリケーションが、自身の状態の変化や特定のイベントが発生したことを別のWebアプリケーションに自動的に通知するために使用されます。

例えば、あるWebアプリケーションのデータベースに新しいデータが追加された場合、その情報を他のWebアプリケーションに自動的に通知することができます。この場合、新しいデータを追加するたびに、Webアプリケーションは特定のURLにHTTPリクエストを送信し、通知を行います。受信側のWebアプリケーションは、このリクエストを受け取り、必要な処理を行います。

Webhookを利用することで、Webアプリケーション間の通信を自動化することができ、処理の効率化やリアルタイムなデータの共有が可能になります。


以下はPHPを使用したWebhookの例です。

例えば、あるWebアプリケーションがユーザー登録のイベントが発生した場合、他のWebアプリケーションに通知する必要があるとします。以下のように、PHPのcURLライブラリを使用してウェブフックを送信することができます。

// ウェブフック送信先URL
$webhook_url = "https://example.com/webhook";

// 送信するデータ
$data = array(
    "event" => "user_registered",
    "user_id" => "12345",
    "timestamp" => time()
);

// cURLを初期化
$ch = curl_init();

// cURLオプションを設定
curl_setopt($ch, CURLOPT_URL, $webhook_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

// ウェブフックを送信
$response = curl_exec($ch);

// cURLリソースを解放
curl_close($ch);

この例では、送信するデータをJSON形式にエンコードしてWebhookを送信しています。受信側のWebアプリケーションは、このJSONデータを解析し、必要な処理を行うことができます。

このように、PHPを使用してWebhookを送信することで、Webアプリケーション間でリアルタイムな通信を実現することができます。

受信側コード例

Webhookを受信する側のWebアプリケーションでは、HTTPリクエストを受け取り、処理するためのコードが必要です。

例えば、PHPを使用してHTTP POSTリクエストを受け取り、受信したJSONデータを処理する場合は、以下のように記述することができます。

// HTTP POSTリクエストを受け取る
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 受信したJSONデータを取得
    $data = json_decode(file_get_contents("php://input"), true);

    // 受信したデータを処理
    if ($data["event"] === "user_registered") {
        // ユーザー登録のイベントが発生した場合の処理
        $user_id = $data["user_id"];
        $timestamp = $data["timestamp"];
        // ...
    }
}

この例では、HTTP POSTリクエストを受け取るために、$_SERVER['REQUEST_METHOD']を使用してリクエストメソッドがPOSTかどうかをチェックしています。そして、file_get_contents("php://input")を使用してHTTPリクエストボディからJSONデータを取得し、json_decode()を使用してデータを配列として解析しています。

受信したデータを処理するためには、受信したJSONデータの内容に応じた処理を行う必要があります。この例では、$data["event"]の値が"user_registered"である場合にユーザー登録のイベントが発生したと判断し、$data["user_id"]や$data["timestamp"]などの情報を取り出して処理を行っています。

このように、受信側のWebアプリケーションでは、HTTPリクエストを受け取り、受信したデータを解析して必要な処理を行うコードが必要です。

file_get_contents("php://input")関数とは

file_get_contents("php://input")は、PHPにおいて標準入力を読み込むための関数です。

HTTPリクエストを受け取る際に、リクエストボディに含まれるデータを取得する場合に使用されます。"php://input"という特殊なファイル名を指定することで、現在のスクリプトに送信されたリクエストボディの内容を取得することができます。

例えば、以下のようなHTTP POSTリクエストが送信された場合

POST /example.php HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 25

{"name": "John", "age": 30}

file_get_contents("php://input")を使用することで、{"name": "John", "age": 30}というJSONデータを取得することができます。

file_get_contents("php://input")が返すデータは、HTTPリクエストボディに含まれる生のデータであり、HTTP POSTリクエストの場合は常にapplication/x-www-form-urlencodedまたはmultipart/form-data形式であるため、データの解析にはjson_decode()やparse_str()などの適切な関数を使用する必要があります。

SQLの使いどころ

サイトに大量の情報を掲載することは、ユーザーにとってとても便利なことです。しかし、情報が多すぎると、目的の情報を見つけるのが困難になります。そのため、SQLを使用することで、情報を効率的に管理することができます。

SQLを使用することで、データベース内の情報を検索したり、フィルタリングしたりすることができます。これにより、ユーザーは目的の情報をスムーズかつ簡単に見つけることができます。

また、SQLを使用することで、データを集計したり、統合したりすることもできます。これにより、ユーザーはさまざまな視点から情報を分析することができます。つまり、サイトに多くの情報を掲載することが重要である一方で、その情報を効率的かつ簡単に管理することが求められる場合には、SQLが不可欠であるといえます。

KK

機械工学を専攻。工業デザイナーとして、国内及び海外の自動車・搬送ラインの設計などに従事した後、2003年にウェブシステム会社を設立。UI設計やウェブシステムの開発、DX化のディレクションなどを行っています。