graphql中的嵌套内联片段
给定graphql联合类型graphql中的嵌套内联片段,graphql,union-types,Graphql,Union Types,给定graphql联合类型 union SearchResult = Human | Droid | Starship 以及以下graphql查询: { search(text: "an") { ... on Human { ... on SearchResult { ... on Droid { appearsIn } } } } } 为什么在graphql中,从“子类型”内联片段(Huma
union SearchResult = Human | Droid | Starship
以及以下graphql查询:
{
search(text: "an") {
... on Human {
... on SearchResult {
... on Droid {
appearsIn
}
}
}
}
}
为什么在graphql中,从“子类型”内联片段(Human
)到“超级类型”内联片段(SearchResult
),再回到另一个“子类型”内联片段(Droid
)在语法上是正确的?这方面有什么用例吗
对我来说,这真的没有意义,它应该抛出一个错误。它会导致像上面的
Droid
内联片段这样的死查询部分,对查询结果没有影响。如果没有此规则,命名片段和内联片段可以以相同的方式运行,如果您有更多涉及接口或联合类型的“获取通用位”片段,这是有意义的。如果以这种方式拆分查询:
fragment SearchResultBits on SearchResult {
...on Droid { appearsIn }
# could have parts for other union choices too
}
query DoSearch($text: String!) {
search(text: $text) { ... SearchResultBits }
}
然后在您的查询中,重用(命名)SearchResultBits
query FromQuestion {
search(text: "an") {
... on Human {
name
... SearchResultBits
}
# or return nothing for non-humans
}
}
由于命名片段引用和内联片段的行为方式相同,因此在这里您将得到相同的结果。这个命名片段引用是合法的似乎更合理,因此似乎也没有强有力的理由禁止等效的内联片段