$shibayu36->blog;

エンジニアをしています。プログラミングや読書のことなどについて書いています。

GraphQLのクエリについて学んだ

Apollo Clientについて学ぼうと思い、0. Introduction - Apollo Basics - Apollo GraphQL Docsをやっていた。しかし、これをやる中でGraphQLのクエリ言語についてあまり分かってないことに気づいたので、Queries and Mutations | GraphQLを見て、クエリについて学習した。

Fragment、queryの命名、変数を使ってRDBプレースホルダー的なことをする方法、ifの利用などが分かってよかった。以下メモ書き。

  • Fragmentを用いてクエリの再利用ができる
    • 引数名を用いてFragmentに変数を引き継ぐこともできる
query HeroComparison($first: Int = 3) {
  leftComparison: hero(episode: EMPIRE) {
    ...comparisonFields
  }
  rightComparison: hero(episode: JEDI) {
    ...comparisonFields
  }
}

fragment comparisonFields on Character {
  name
  friendsConnection(first: $first) {
    totalCount
    edges {
      node {
        name
      }
    }
  }
}
  • queryなどには命名ができ、そうすることでサーバ上でログなどが取りやすくなる
query HeroNameAndFriends {
  hero {
    name
    friends {
      name
    }
  }
}
  • 動的に値を変えるために一部分を変数にしておいて、分割して変数だけ渡すこともできる
    • default valueもつけられる
query HeroNameAndFriends($episode: Episode) {
  hero(episode: $episode) {
    name
    friends {
      name
    }
  }

以下のようにvariablesを指定する

{
  "episode": "JEDI"
}
  • @include(if: Boolean)や@skip(if: Boolean)で、条件付きで取得するクエリも作れる
query Hero($episode: Episode, $withFriends: Boolean!) {
  hero(episode: $episode) {
    name
    friends @include(if: $withFriends) {
      name
    }
  }
}
  • 複数クエリを発行したとき、queryは並列実行されるが、mutationは直列実行される