【问题标题】:What does a GraphQL resolver return for an object with a relation?GraphQL 解析器为具有关系的对象返回什么?
【发布时间】:2018-11-25 17:57:42
【问题描述】:

如果我有

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

解析器users 返回什么?我知道它可以返回一个空列表,但是当它返回一个填充列表时,我不确定如何处理它。直观地说,在我看来它应该是无限的,因为用户包含他们的帖子列表,每个帖子都包含用户等。显然情况并非如此,那么解析器 做什么Query.users返回?

【问题讨论】:

    标签: graphql resolver


    【解决方案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
        }
      }
    }
    

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

    【讨论】:

    • 谢谢。现在这很有意义,因为我回顾文档并看到在示例中,总是将 info 参数传递给 ORM。
    猜你喜欢
    • 1970-01-01
    • 2019-09-15
    • 2020-02-21
    • 2020-10-04
    • 2021-03-09
    • 2017-02-14
    • 2020-04-22
    • 2021-09-16
    • 2020-04-28
    相关资源
    最近更新 更多