如果我有
type Post {
title: String!
body: String!
author: User!
}
type User {
name: String
posts: [Post!]!
}
type Query {
users: [User!]!
}
解析器users
返回什么?我知道它可以返回一个空列表,但是当它返回一个填充的列表时,我不知道如何处理它。直觉上,在我看来它应该是无限的,因为用户包含他们的帖子列表,每个帖子都包含用户等。显然不是这种情况,所以做解析器Query.users
返回?
答案 0 :(得分:1)
解析器仅返回您返回的内容。它不是根据类型自动生成的。它的作用是:它根据你解决的对象匹配对象的类型。
在这种情况下,您的解析器会返回一个用户列表,每个用户都有一个名称和一个帖子列表,每个帖子都有一个标题,正文和作者。
是的,它似乎可以创建一个无限的数据流,但这正是graph背后的想法,是所有数据都连接到它的关系,反之亦然。
你可以想象返回数据是这样的:
data: {
users: [
{
name: "user 1",
posts: [
{
title: "post 1",
body: "post body",
author: {
name: "user 1",
posts: [
{
title: "post 1",
body: "post body",
author: {
name: "user 1",
posts: [
{
.....
}
]
}
}
]
}
}
]
},
{
name: "user 2",
posts: [
{
title: "post 2",
body: "post body",
author: {
name: "user 2",
posts: [
{
title: "post 2",
body: "post body",
author: {
name: "user 2",
posts: [
{
.....
}
]
}
}
]
}
}
]
}
]
}
同样,GraphQL只返回您要求它返回的数据。因此,如果您只想要用户和帖子,则查询类似于:
query getUsers {
users {
name
posts {
title
body
}
}
}
在这种情况下,它只会返回用户及其帖子,而不是作者。