ミリしらだけどAndroidにもfragmentってあるよね。
モチベーション
- fragmentを使ったことがないので使ってみたい
fragment
graphql.orgのfragmentの説明がいきなり例から入ってちょっと笑った。たしかに例交えたほうが説明しやすい。
fragmentを使うことで以下のことが実現できる。
- フィールドの集合を構成できる
- クエリに含めることができる
さっそく書いてみよう。
コード
GraphQLサーバーはlucasbento/graphql-pokemonを利用。
fragmentを無理やり使用するケースを考えた。
{ "data": { "pokemon": { "number": "025", "name": "Pikachu", "types": [ "Electric" ] }, "pokemons": [ { "number": "001", "name": "Bulbasaur", "types": [ "Grass", "Poison" ] }, { "number": "002", "name": "Ivysaur", "types": [ "Grass", "Poison" ] } ] } }
下記に記載するクエリはどちらも上記のレスポンスを得る。
fragmentを使用しない場合
query { pokemon(name: "Pikachu") { number name types } pokemons(first: 2) { number name types } }
fragmentを使用した場合
query { pokemon(name: "Pikachu") { ...pokemonFragment } pokemons(first: 2) { ...pokemonFragment } } fragment pokemonFragment on Pokemon { number name types }
共通化できていて良い。
また、以下のようにfragmentとフィールドをまとめて利用することもできる。
query { pokemon(name: "Pikachu") { ...pokemonFragment } pokemons(first: 2) { ...pokemonFragment id // ココ! } } fragment pokemonFragment on Pokemon { number name types }