GraphQL 解析器为具有关系的对象返回啥?
Posted
技术标签:
【中文标题】GraphQL 解析器为具有关系的对象返回啥?【英文标题】: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
返回?
【问题讨论】:
【参考方案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。以上是关于GraphQL 解析器为具有关系的对象返回啥?的主要内容,如果未能解决你的问题,请参考以下文章
使用 eslint 从 graphql 解析器返回啥严格的打字稿类型?
用于可迭代对象的 Java GraphQL 解析器:休眠异常