我在graphql-jave v8.0
上运行了Spring boot v1.5.10
个应用,而我正在尝试使用' fragment' GraphQL的功能,使用以下模式类型定义获取有限数量的字段:
type School {
id: ID
name: String
address: String
age: String
jobTitle: String
...
}
fragment UserFields on School {
age
jobTitle
}
type Query {
user (id: String!): School!
}
schema {
query: Query
}
执行此查询时:
{
user (id: "123")
{
... UserFields
}
}
预期结果应为:
{
"user": {
"age": "12",
"jobTitle": "student"
}
}
但是,它会导致以下错误
"message": "Validation error of type UndefinedFragment: Undefined fragment
UserFields @ 'user'",
当然我可以通过在查询中明确传递字段名称来做到这一点,但为了举例,我有兴趣使用GraphQL的fragment
功能。
知道我做错了吗?
答案 0 :(得分:1)
片段未在架构中定义,它们可以让您在构建复杂查询时创建抽象 - 主要目的是让您在查询的多个部分中查询相同类型时避免重复。 / p>
答案 1 :(得分:0)
作为Andrew said,作为official docs exemplify,片段未在架构中定义,但在查询中(ad hoc):
{
user (id: "123") {
... UserFields
}
}
fragment UserFields on School {
age
jobTitle
}
无条件片段(如此处的片段)用于避免重复。想象一下,您想在同一操作中选择age
和jobTitle
多个地方。
另一方面,条件片段用于根据具体的接口实现或union子类型进行条件选择。