Graphql 图QL,什么是;关于;为一个碎片做些什么

Graphql 图QL,什么是;关于;为一个碎片做些什么,graphql,Graphql,我正在看GraphQL,但我不明白为什么在使用下面的片段时,必须定义“on字符”?这可能是GraphQL文档中没有解释或没有上下文的任何名称 query { leftComparison: hero(id: "1") { ...comparisonFields } rightComparison: hero(id: "2") { ...comparisonFields } } fragment comparisonFields on Character {

我正在看GraphQL,但我不明白为什么在使用下面的片段时,必须定义“on字符”?这可能是GraphQL文档中没有解释或没有上下文的任何名称

query {
  leftComparison: hero(id: "1") {
    ...comparisonFields
  }
  rightComparison: hero(id: "2") {
    ...comparisonFields
  }
}

fragment comparisonFields on Character {
  name
  appearsIn
  friends {
    name
  }
}
虽然这并不能使这一点完全显而易见(可以是对象类型、接口或联合)。在片段内部,您只能使用名为的类型上存在的字段;服务器将为您检查这一点(如果客户机愿意,他们可以提前检查)

如果字段返回接口或联合类型,则类似地,只能选择已知存在的字段(因为接口提供了这些字段),但可以尝试匹配实现接口或联合成员的特定类型,以获取更多数据。这通常是通过完成的,但由于命名片段附加到类型,因此也可以使用命名片段。如果模式包含非常通用的查询

接口节点{id:id!}
类型查询{
节点(id:id!):节点
}
并且
字符
实现
节点
,然后您可以插入此处的命名片段

querygetCharacterDetails($id:id!){
节点(id:$id){
…比较场地
}
}

Ok,在本例中,英雄对象将使用“角色”界面?字符将是一个接口。遗憾的是,如果是这样的话,他们没有指明这一点。
。。。在Hero上
也可以正常工作;规范允许具体(对象)类型和接口(以及联合)。