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"
      }
    ]

    参考にした記事

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark