Symfony Component Advent Calendar 2023の15日目の記事です。
外部サービスからのイベントを受け取るよ、"Webhook"
Webhookは、外部サービスからのイベントをWebhookで受け取るコンポーネントです。
インストール
composer require symfony/webhook
使い方
メールサービスなどのSaaSなサービスは、サービス内で起こったイベントをきっかけに設定したWebhookを呼び出す機能があったりします。通常であれば、その受け取るWebhookを実装していくのですが、Webhookコンポーネントを使えば簡単に実装できます。
まず、Webhookを受け取った際の処理を行うConsumerを作っていきます。ConsumerInterface
を実装します。
#[AsRemoteEventConsumer(name: 'sample')]
class SampleEventConsumer implements ConsumerInterface
{
public function consume(RemoteEvent $event): void
{
// サービスから送られてきて解析されたリクエスト
$payload = $event->getPayload();
// 何かしらイベントを受け取ってやる処理
}
}
引き続き、#[AsRemoteEventConsumer()]
に指定した名前をつかって、webhookのルーティングを行います。
ここでは、SendGridのwebhookとして登録してみます。
framework:
webhook:
routing:
sample:
service: 'mailer.webhook.request_parser.sendgrid'
この設定を行うと、{ドメイン}/webhook/sample
というWebhookが作成されます。ここで作ったWebhookは202
ステータスを返して、何も出力されずに完了します。
まとめ
今回はWebhook
を紹介しました。他にもMailgunやtwilioなどのサービスのWebhookも設定されているので、簡単にWebhookが作れます。では、他のサービスや独自で作ったものに対してはどうすれば良いのでしょうか?
続きは後半、RemoteEvent
で。