查询和变更
你可以在本页学到有关如何查询 GraphQL 服务器的详细信息。
内联片段(Inline Fragments)
跟许多类型系统一样,GraphQL schema 也具备定义接口和联合类型的能力。在 schema 指南中可了解更多。
如果你查询的字段返回的是接口或者联合类型,那么你可能需要使用内联片段来取出下层具体类型的数据:
# { "graphiql": true, "variables": { "ep": "JEDI" } }
query HeroForEpisode($ep: Episode!) {
hero(episode: $ep) {
name
... on Droid {
primaryFunction
}
... on Human {
height
}
}
}
这个查询中,hero
字段返回 Character
类型,取决于 episode
参数,其可能是 Human
或者 Droid
类型。在直接选择的情况下,你只能请求 Character
上存在的字段,譬如 name
。
如果要请求具体类型上的字段,你需要使用一个类型条件内联片段。因为第一个片段标注为 … on Droid
,primaryFunction
仅在 hero
返回的 Character
为 Droid
类型时才会执行。同理适用于 Human
类型的 height
字段。
具名片段也可以用于同样的情况,因为具名片段总是附带了一个类型。
元字段(Meta fields)
某些情况下,你并不知道你将从 GraphQL 服务获得什么类型,这时候你就需要一些方法在客户端来决定如何处理这些数据。GraphQL 允许你在查询的任何位置请求 __typename
,一个元字段,以获得那个位置的对象类型名称。
# { "graphiql": true}
{
search(text: "an") {
__typename
... on Human {
name
}
... on Droid {
name
}
... on Starship {
name
}
}
}
上面的查询中,search
返回了一个联合类型,其可能是三种选项之一。没有 __typename
字段的情况下,几乎不可能在客户端分辨开这三个不同的类型。
GraphQL 服务提供了不少元字段,剩下的部分用于描述 内省 系统。
当前内容版权归 GraphQL中文网 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 GraphQL中文网 .