GraphQLを使ってシンプルな電子掲示板を作ってみる(3)

2020.5.17 12:00

前回作成したスキーマ図に従ってバックエンド環境を構築していく。

2-1

準備

GraphQLを簡単に取り扱えるミドルウェアの一つに Hasura があるので、今回はこれを使ってみる。

下記のソフトウェアが必要なので、予めインストールしておく。

  • docker
  • docker-compose

Localhostにサーバを建てる

公式のマニュアル に沿って行っていけば良い。

ただし、途中で出てくる docker-compose.yml は少し修正が必要である。

   ...
      environment:
        HASURA_GRAPHQL_DATABASE_URL: postgres://postgres:postgrespassword@postgres:5432/postgres
        HASURA_GRAPHQL_ENABLE_CONSOLE: "true"
        HASURA_GRAPHQL_ENABLED_LOG_TYPES: startup, http-log, webhook-log, websocket-log, query-log
+       # Hasuraコンソールにアクセスするためのパスワードを設定する
+       HASURA_GRAPHQL_ADMIN_SECRET: <自分で決めた管理用パスワード>
+       # 認証なしユーザのAPI使用をuserのロールで許可する
+       HASURA_GRAPHQL_UNAUTHORIZED_ROLE: user
  volumes:
…

完了すると http://localhost:8080/console にアクセスできるようになる。

postgresにテーブルを作成する

Hasuraはデータベースにpostgresを使っているので、 スキーマ定義をpostgresに反映していく。

まず、 DATA タブを開き、左ペインから [Add Table] をクリックし、 「記事」の保存のために必要な情報を入力し、postsテーブルを作成する。

3-1

終わったら最下段の [Add Table] ボタンを押し作成する。

「返信」の保存のために必要な情報も入力し、commentsテーブルを作成する。 なお、「返信」には「記事」への外部キーがあるため、それも設定する。

3-2

Hasuraへの外部キーの登録

Hasuraにpostgresの外部キーを登録する必要があるため、 DATA タブの初期ページから [Track All] ボタンで登録する。

3-3

権限を設定する

postsにアクセス制限を設定する。

insert

左ペインからテーブルを選択し、 Permissions のタブを開く。

Roleの入力欄にuserと入力し、その右のペンアイコンをクリックすると、 insertの権限設定ができる。

3-4

Row insert permissions は行に対する設定である。 今回は全員に無条件で許可するため、 Without any checks を選択する。

Column insert permissions は列に対する設定である。 idcreated_atはシステムで設定する内容なので不許可にする。

入力が終わったら [Save Permissions] をクリックする。

select

delete_keyが参照できてしまうと誰でも消せてしまうので、不許可にする。

3-5

update

今回は更新機能はないため全拒否のままにしておく。

delete

delete_keyが一致しない場合には消させたくないため、 Row insert permissionsWith custom check を選択する。

リクエストヘッダーにX-Hasura-で始まるデータを付与するとここでその値を使ってチェックできるので、 クライアントからX-Hasura-Delete-Keyとして削除キーを送ってもらい、 一致するものだけを削除対象として選択できるようにする。

{
  "delete_key": {
    "_eq": "X-Hasura-Delete-Key"
  }
}

3-6

comments

commentsについても同様に設定していく。
設定内容はpostsと同じため割愛する。

次回

次回は実際にクエリを実行して動作を見てみる。

graphql

Copyright 2020 tkzwhr's tech notes. All Rights Reserved. Built with Gatsby.