SupabaseのData APIで DBの情報をREST APIから直接取得する
Supabaseでは、直接DBにアクセスするためのAPIが利用できるとの情報を耳にしました。テスト用のテーブルを作成し、データを投入しました。また、Row Level Securityを有効化するための手順も確認しました。準備ができたので、Data APIを使用してデータを取得しました。取得したデータは、指定の形式で取得できました。
広告ここから
広告ここまで
目次
あまりユースケースなどのイメージがあるわけではないのですが、どうやらSupabase上のDBに直接アクセスするためのAPIがあるらしいと耳にしたので、ひとまず試してみました。
テスト用のテーブルを用意する
ドキュメントを参考にテーブルとデータを用意しましょう。
create table todos (
id serial primary key,
task text
);
複数のデータを登録しておきます。
insert into todos (task)
values
('Create tables'),
('Enable security'),
('Add data'),
('Fetch data from the API');
Table Editorでデータが投入されていることを確認しておきます。
Row Level Securityをオンにする
Table Editorでtodos
テーブルをみると、Warningが出ています。これはRow Level Securityが有効化されていないためらしいです。RLSについてはまだあまり把握できていないのですが、この手のサジェスチョンは従っておくのが経験上吉だとおもっているので、有効化しておきましょう。
-- Turn on security
alter table "todos"
enable row level security;
-- Allow anonymous access
create policy "Allow anonymous access"
on todos
for select
to anon
using (true);
このクエリを実行すると、警告が消えます。
Data APIからテーブルのデータを取得する
データの準備ができたので、早速APIを叩いてみます。Project REF.supabase.co/rest/v1/{TABLE_NAME}
でGETリクエストが出せます。
curl 'https://<PROJECT_REF>.supabase.co/rest/v1/todos' \
-H "apikey: <ANON_KEY>" \
-H "Authorization: Bearer <ANON_KEY>"
今回の例ですと、このようなレスポンスが取れました。
[
{
"id": 1,
"task": "Create tables"
},
{
"id": 2,
"task": "Enable security"
},
{
"id": 3,
"task": "Add data"
},
{
"id": 4,
"task": "Fetch data from the API"
}
]