このブログ記事はGraphQLサーバのHasuraを使ってデータを保存取得しています。
hasura cloudを使ってみて
10/4/2023
普段はフロントエンドで主に見た目の部分、取得/送信データの整形部分、をやっています
殆どバックエンドには触れてこなかったので、試しに…と思いhasura
当然ツマズキポイント盛りだくさんでした
特に権限周りは最初よく分からず(現在はわかっているとは言っていない)、覚書としてこの記事を書きます
hasuraに登録してデータベースの接続、これは簡単でhasuraがおすすめしてくれているneonを選択すると登録などを済ませば勝手に接続してくれます
そうしたらcreate tableで適当な名前(todoやarticleなどなど)をつけて、
- id
- title
- description
- user-id
というテーブルを作りましょう(とりあえず最小限の構成)
idは自動で振ってくれた方が良さそうなのでuuidにしてgen_random_uuid()を選択します。そのほかは全部textでok
次にusersを作ります
とりあえずは
- id
- name
だけで良いでしょう。どちらもtextでok
これだけでqueryとmutation,subscriptionを自動で作ってくれます。
次にForeign Keysを作ります
DATA->(todoやarticleなどなど)に移動->Modify->Foreign Keysをクリック
Fromを先程のuser-id、Toをidにします
この時わかると思いますがFromにはtodoやarticleなどなどのテーブル,Toにはusersのテーブルのキーがあるのがわかります
これでtodoやarticleなどなどのuser-idとuserのidが紐付けられる
Relationshipを見てみましょう、何もなければAddして名前をつけて今の関係を保存
次に権限
todoやarticleなどなどのテーブル->Permissionsに移動
adminは全てにチェックが入っています
Enter New Roleにuserとでも入れて権限を追加して行きます
insert,update,deleteはWith custom checkを下記のように設定
{
"user-id" :{
"_eq" : "X-Hasura-User-Id" [X-Hasura-User-Id]
}
}
_eqはイコールって意味
select(取得)だけはWithout any checksにしています
もう一つ権限を作り、anonymousとでもしておいてselect(取得)だけWithout any checksにして設定。残りは何も設定しません
要はuser-idがなくても取得だけはできるよって事ですね
データを表示する権限はフリーにして特にuserを作らなくても見ることはできる状態にするということ
試しにDATA->users->Insert Rowで適当なuserを一人作ってみましょう
APIに移動してRequest Headersのkey(わかりにくい位置にある!)にx-hasura-user-idとして(リクエストヘッダーなので大文字小文字関係ないです)、valueに先程作ったuserのidを追加してみると
先程の権限どおりtodoやarticleなどなど)のQuery(select)、mitationのinsert(新規追加)、update,deleteができるようになっているはずです
試しにmutationのinsertをやってみましょう、この時user-idに先程作ったusersのidを入れるのを忘れないように
queryで取得してみると取得したデータの中にuserの情報もあることが確認できると思います
この後フロントではhasuraにリクエストを送る際にRequest Headersにuser-idを渡してあげれば良いということになります
以上!!!!!