GraphQL 中的双向获取
Posted
技术标签:
【中文标题】GraphQL 中的双向获取【英文标题】:Bidirectional fetching in GraphQL 【发布时间】:2015-12-20 11:53:23 【问题描述】:我有以下 GraphQL 架构:
interface Node
id: ID!
type User : Node
id: ID!
name: String!
tasks: [Task]
type Task : Node
id: ID!
day: Int!
description: String!
type Viewer
users: [User]
type Query
viewer: Viewer
基本上,每个用户都可以拥有一个任务列表。当我需要获取所有任务的列表以获得这样的响应时,就会出现问题:
tasks: [
day: 1,
user:
name: "John"
,
day: 2,
user:
name: "Jane"
]
我应该如何编辑我的架构以允许这样的获取?
【问题讨论】:
【参考方案1】:为了能够获取所有任务的列表,请将其作为属性添加到查看器
type Viewer
users: [User]
tasks: [Task]
并将users
字段添加到Task
:
type Task : Node
id: ID!
day: Int!
description: String!
users: [User]
使用更新的架构,您可以查询所有用户和任务的列表:
viewer
users // all users
name
tasks // user's tasks
description
tasks // all tasks
day
users // task's users
name
此外,您应该使用分页而不是一次获取所有任务(或用户)。如果您打算将 GraphQL 服务器与 Relay 一起使用,请不要将您的用户/任务定义为列表,而是定义为带有边缘的连接。见https://facebook.github.io/relay/docs/graphql-connections.html#content
【讨论】:
以上是关于GraphQL 中的双向获取的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 AppSync GraphQL 转换为双向一对多 @connection 执行字段级别 @auth?
如何通过 GraphQL 中的过滤器和顺序动态创建/获取数据?