重たすぎる腰を上げてHasuraを触ってみる
Hasura on MySQLやる
MySQLのほうが馴染みがあるので、Hasuraを噛ましてみる
Hasura / GraphQLに期待していること
素人なので、まずは期待していることをまとめる
自社サービスに導入する
マナリンクに導入したい。すでに稼働しているMySQLがあるので、そいつをGraphQL移行したり、部分的に対応してみたりできると嬉しい
リアルタイム通信が実装できる
噂で聞いたけど、リアルタイム通信が実装できるっぽいので、そしたらFirebase卒業とかも検討できるので知りたい。
検索系のユースケース実装が改善できる
一覧系のページは、検索クエリが乱立してSQLだったり、RESTful APIが負債化しがちなイメージが有る。
更新系の処理はDDD的にやりたいので、Laravelで実装したいけど、閲覧系は割と別でもいいんじゃないのかなぁ・・・
Nuxt.jsのasyncDataをBFF的な扱いにして、Nuxtから直接GraphQL実行して検索系のユースケースをそれで済ませられないか?
ローカルで動いたところまで
自社のDBがdocker-composeですでに動いているので、以下のようにdocker-composeを設定した
docker-compose network設定は面倒なので割愛した。host.docker.internalってHostを書くのが肝
command:
- graphql-engine
- --mysql-host
- host.docker.internal
- --mysql-user
- root
- --mysql-port
- '3306'
- --mysql-dbname
- XXX
- --mysql-password
- ''
- serve
MySQLバージョン
8以上に対応らしい。弊社はAurora使っている関係でまだ5.7なので、ここは我慢かな。
現時点でわかっていないこと
- リアルタイム通信ができるのか
- 認証済みのユーザーしかアクセスできない、はどう実装するか?
- 外部キー等で関連しているデータの引っ張り方(GraphQL自体の知識の問題)
追加
- デプロイはどうするのか?AWSとかに上げれる?ECS上で動くと嬉しいんだけど
リアルタイム通信
これでは?w
Introduction
A GraphQL subscription is essentially a query where the client receives an update whenever the value of any field changes upstream.
Subscriptions are supported for all kinds of queries. All the concepts of queries hold true for subscriptions as well.
Subscriptionとかいうやつ、API Explorerで動かせられないものかね
うーん、まあこれNuxtでも動かしてみるかー
Subscription is not supported
"message": "Subscriptions over MySQL not supported"
認証
Webhookを生やす
現状
- リアルタイム通信はMySQL経由だと未対応
- 認証はWebhook実装したらいけそうだが、実際動かさないと感覚がわからない。ただ可能は可能
- デプロイは未調査
- 外部キーも未調査
総じて、Postgres使ったほうがまだ扱いが安定してそう。やってみた途端未対応なんですってなる可能性があるので。Preview版のうちはGraphQL自体の勉強とかに当てるほうがいいかな。