对于具有关系的对象,GraphQL 解析器 return 有什么作用?

What does a GraphQL resolver return for an object with a relation?

如果我有

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

解析器 users return 的作用是什么?我知道它可以 return 一个空列表,但是当它 return 是一个填充列表时,我不确定如何处理它。直觉上,在我看来它应该是无限的,因为用户包含他们的帖子列表,每个帖子都包含用户等。显然情况不可能如此,所以 does Query.users return?

的解析器

解析器 return 仅由您自行决定 return。它不是根据类型自动生成的。它的作用是:它根据你让它解析的内容匹配 object 的类型。

在这种情况下,您的解析器将 return 一个用户列表,每个用户都有一个名称和一个 post 列表,每个 post 都有一个标题,body 和一位作者。

是的,它似乎可以创建无限数据流,但这正是 graph 背后的想法,所有数据都与其关系相关联 vice-versa。

你可以想象 return 数据是这样的:

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 仅 return 提供您向其请求的数据 return。因此,如果您只需要用户和 posts,查询将类似于:

query getUsers {
  users {
    name
    posts {
      title
      body
    }
  }
}

在这种情况下,它只会 return 用户和他们的 post,而不是作者。