SupabaseのDatabase Webhookを試してみた
SupabaseのWebhook機能について試してみた結果を報告しています。WebhookはAPIリクエストをDB操作と連動して外部に送ることができます。デフォルトではINSERTに対してイベントが発火し、指定したURLにJSON形式のデータが送信されます。開発時はngrokなどを使用してローカル環境にProxyを設定する必要があります。Webhookを活用することで、サービス開発とデータ連携を効率化することができますが、双方向の連携には注意が必要です。
目次
Supabaseでは、DBへの操作と連動して外部にAPIリクエストを送れるWebhook機能があると聞きましたので、試してみました。
プロジェクトのWebhook機能を有効化する
まずダッシュボードでWebhookを有効化しておきましょう。[Enable webhooks]ボタンをクリックするだけでOKです。

[Create a new hookw]ボタンが出ていれば、利用可能です。

Webhookを SQLで登録する
PostgreSQLの機能でもあるためか、SQLから登録できます。APIはLocalhostを指定してもイベントが届きません。そのため、開発時はngrokなどでローカルにProxyする準備をしておきましょう。
create trigger "my_webhook" after insert
on "public"."my_table" for each row
execute function "supabase_functions"."http_request"(
'https://xxxxxxx.ngrok-free.app',
'POST',
'{"Content-Type":"application/json"}',
'{}',
'1000'
);
[Success]がSQL Editorに表示されたら成功です。

ダッシュボードのWebhookセクションにも表示されました。

Webhookを実行してみる
デフォルトではINSERTに対してイベントが発火します。ですので次のようなINSERTのSQLを実行してみましょう。
insert into books
(title, author, description)
values
(
'book name',
'author',
'Description'
);
APIのログを見ると、次のようなBodyを持つイベントが届きました。
{
type: 'INSERT',
table: 'books',
record: {
id: 8,
title: 'Book name',
author: 'Author name',
description: 'description'
},
schema: 'public',
old_record: null
}
Webhookを使いこなして、サービス開発とデータ連携を効率化しよう
WordPressくらいでしかRDBMSを扱ったことがなかったため、DBからWebhookイベントを投げれるのはなかなか衝撃的でした。サービス関連系は、データのフローを双方向にしすぎると無限ループが起きうるなどのリスクもあります。ただし連携することで、より効率的な開発や運用が期待できそうです。