GraphQL解析器为具有关系的对象返回什么?

GraphQL解析器为具有关系的对象返回什么?,graphql,resolver,Graphql,Resolver,如果我有 type Post { title: String! body: String! author: User! } type User { name: String posts: [Post!]! } type Query { users: [User!]! } 解析程序用户返回什么?我知道它可以返回一个空列表,但当它返回一个填充的列表时,我不知道如何处理它。直观地说,在我看来,它应该是无限的,因为用户包含他们的帖子列表,每个帖子都包含用户,等等。显然,这不可能

如果我有

type Post {
  title: String!
  body: String!
  author: User!
}
type User {
  name: String
  posts: [Post!]!
}
type Query {
  users: [User!]!
}

解析程序
用户
返回什么?我知道它可以返回一个空列表,但当它返回一个填充的列表时,我不知道如何处理它。直观地说,在我看来,它应该是无限的,因为用户包含他们的帖子列表,每个帖子都包含用户,等等。显然,这不可能是这样的,那么
查询的解析器返回什么?用户
返回什么?

解析器只返回您让它返回的内容。它不是根据类型自动生成的。它所做的是:它根据您使其解析的内容匹配对象的类型

在这种情况下,解析器将返回一个用户列表,每个用户都有一个名称和一个帖子列表,每个帖子都有一个标题、正文和作者

是的,它似乎可以创建一个无限的数据流,但这正是背后的想法,所有数据都与它的关系相连,反之亦然

您可以想象返回数据如下所示:

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
    }
  }
}

在这种情况下,它将只返回用户及其帖子,而不返回作者。

谢谢。现在我回顾一下文档,发现在示例中,总是将
info
参数传递给ORM,这很有意义。