Hasura!✊Hasura!✊Hasura!✊(USA風に) Vueを使って開発する場合、GraphQL Vue チュートリアルを読んでおくと良いでしょう。 また、Hasuraを使用する場合、直接SQLを呼び出せるので、便利です。(変換もまとめたい)
HasuraでGraphQLサーバを立てています。フロントエンドはNuxt.jsを使用しています。
GraphQL APIの呼び出しは、癖があり、なかなかコツを掴まないと難しいので、メモしておきます。Apollo Clientを使い、APIの呼び出しを行います。
上記を意識した呼び出しを考えた方が恩恵を受けそうです。
apollo: { user: { query: QUERY, variables: { id: 1, }, }, },
apollo-module/test/fixture/pages/asyncData.vue
asyncData({ app }) { const client = app.apolloProvider.defaultClient client .query({ query: QUERY, variables: { id: 1, }, }) .then((res) => { console.log(res) }) },
※variables()
のように関数実行すると、gqlに引数が渡らないので注意!予め、変数を作っておきましょう! (原因は分からず)loadingkeyが関係しているかも!
this.$apollo.query({ query: QUERY, variables: { id: 1, }, }) .then((res) => { console.log(res) this.user = res.data.user })
基本の形
query { users ( limit: 10, offset: 10 ) { id name created_at updated_at } }
gql
ファイルで取得する場合、users.gql
(ファイル名は変更しても、特に影響ありません。)
query users($limit: Int, $offset: Int){ users( limit: $limit, offset: $offset ) { id name created_at updated_at } }
import users from "@/apollo/queries/users/users.gql" export default { apollo: { $loadingKey: "loading", users: { // ここがdata()に追加される。 prefetch: true, // これで this.$router.paramsなどが使用できる。 query: users, // importしたqueryを指定する。 variables: { limit: 10, offset: 10, }, }, },
users_aggregate
でtotalCount
を取得できます。
query { users_aggregate { aggregate { totalCount: count } } users { id name } }
edges
を使用しなくてもwhere
で、1:mのどちらからでもクエリを取得できる。Full Text Search with Hasura GraphQL API and Postgres