Aliases

時々引数が異なる同じフィールドを指定したいことがあります。そんな時以下のようにしてもfieldConflictエラーになってしまいます。

{
  user(login: "a") {
    id
  }
  user(login: "b") {
    id
  }
}

これは同じuserというキーに別々の結果を入れようとするからです。(ちなみに引数がまったく同じだと許容される)

これはそれぞれの結果を格納するキーを別の名前に変更することで回避できます。それには各フィールドの前に<alias>:を付けます。
引数を持つフィールドだけでなく、持たないフィールドにも使えます。

{
  viewer1: viewer {
    login
  }
  viewer2: viewer {
    name: login
  }
  user1: user(login: "nju33") {
    id
  }
  user2: user(login: "nju33") {
    uid:id
  }
}

この結果は以下の通りです。親フィールドにviewerNuserNという名前が付いてることが分かります。また子フィールドでもloginnameiduidとしてます。

{
  "data": {
    "viewer1": {
      "login": "nju33"
    },
    "viewer2": {
      "name": "nju33"
    },
    "user1": {
      "id": "MDQ6VXNlcjE1OTAxMDM4"
    },
    "user2": {
      "uid": "MDQ6VXNlcjE1OTAxMDM4"
    }
  }
}