0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Symfony ComponentAdvent Calendar 2023

Day 15

外部サービスからのイベントを受け取るよ(前編)、"Webhook"

Last updated at Posted at 2023-12-14

Symfony Component Advent Calendar 2023の15日目の記事です。

外部サービスからのイベントを受け取るよ、"Webhook"

Webhookは、外部サービスからのイベントをWebhookで受け取るコンポーネントです。

インストール

composer require symfony/webhook

使い方

メールサービスなどのSaaSなサービスは、サービス内で起こったイベントをきっかけに設定したWebhookを呼び出す機能があったりします。通常であれば、その受け取るWebhookを実装していくのですが、Webhookコンポーネントを使えば簡単に実装できます。

まず、Webhookを受け取った際の処理を行うConsumerを作っていきます。ConsumerInterfaceを実装します。

SampleEventConsumer.php

#[AsRemoteEventConsumer(name: 'sample')]
class SampleEventConsumer implements ConsumerInterface
{
    public function consume(RemoteEvent $event): void
    {
        // サービスから送られてきて解析されたリクエスト
        $payload = $event->getPayload();

        // 何かしらイベントを受け取ってやる処理
    }
}

引き続き、#[AsRemoteEventConsumer()]に指定した名前をつかって、webhookのルーティングを行います。
ここでは、SendGridのwebhookとして登録してみます。

services/packages/webhook.yaml
framework:
    webhook:
        routing:
            sample:
                service: 'mailer.webhook.request_parser.sendgrid'

この設定を行うと、{ドメイン}/webhook/sample というWebhookが作成されます。ここで作ったWebhookは202ステータスを返して、何も出力されずに完了します。

まとめ

今回はWebhookを紹介しました。他にもMailgunやtwilioなどのサービスのWebhookも設定されているので、簡単にWebhookが作れます。では、他のサービスや独自で作ったものに対してはどうすれば良いのでしょうか?
続きは後半、RemoteEventで。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?