はじめに
Queryに続いて、Mutationをいじってみた。
参考サイト
基本的な考え方
QueryがMutationに変わるだけ。
type Mutation {
addHero(name: String): Hero
}
を書いて、
@MutationMapping
public Hero addHero(@Argument String name) {
return new Hero(name);
}
「@MutationMapping」を書くだけ。
リクエストは、
mutation
{
addHero(name:"baan" ) {
name
}
}
で、OK
疑問
QueryとMutationは、ただの識別子?(動作としては変わらない?)と思い、Geminiに聞いてみる。
そうすると、1リクエスト内で複数クエリの場合に挙動が違うらしい。
複数クエリとは、以下のようにheroクエリとbookByIdクエリの2つを1リクエストで送信するような複数クエリ。
以下はQueryのパターン。
{
hero { ★1
name
friends(limit:1){name}
}
bookById(id: "book-1") { ★2
id
pageCount
author {
id
firstName
lastName
}
}
}
Mutationの複数クエリは以下。
mutation
{
hero1:updateHero(id:"1"name:"badman" ) {
name
}
hero2:updateHero(id:"2"name:"superman" ) {
name
}
}
で、Queryは複数クエリを並列実行となるらしく、Mutationは直列らしい。
が、試してみたけど、どちらも直列になったので、設定が必要そうな雰囲気。
振り返り
ちょっといじったレベルの感想では、GraphQLとRestAPIのどっちを使う?ってなったとき、GraphQLに慣れていたらどっちでも。って感じもした。
明確にGraphQLを使いたいなって思うところは、PCとモバイルの共通化とか?
GraphQLが流行っていなかった頃に、RestAPIでPCとモバイルを共通化した際に、この項目、PCしか使わないけどな。とか色々思ったことがあったので。
モバイルは、PCと比べて表示する項目が少ないとかあったので。
そういう時にGraphQLを使うと必要な項目だけを取得できるのは良いのかな?って思った。今日この頃。