GraphQL 在嵌套图中获取子边的附加数据

Posted

技术标签:

【中文标题】GraphQL 在嵌套图中获取子边的附加数据【英文标题】:GraphQL fetching additional data of subedges in a nested graph 【发布时间】:2017-03-31 19:41:57 【问题描述】:

我有一个更复杂的数据结构,导致了一个深度嵌套的图表。现在我总是通过根查询获取/重新加载。但是我认为这不是最好的方法,因为它总是需要服务器来解析整个树。

是否可以在不遍历整个树的情况下在第二个请求中获取/重新加载嵌套图中子边的附加数据/边?

如果是怎么办?

例如:我有一个

RootQuery Spaces
 + ... Other Layers
    + Project
        + Edge Tasks
            + Edge SubTasks
                + Edge Assigned User

显示项目列表我没有根据初始请求加载任务。如果用户打开一个项目,我想只加载这个项目的任务,而不是从 RootQuery 开始重新加载父/根或整个树。

【问题讨论】:

【参考方案1】:

简答: 不,您不能查询未列为根查询类型定义字段的数据。

长答案: 尽管不向根查询添加字段是不可能的,但您只需添加带有项目 ID 参数的 tasks 查询即可实现您正在寻找的行为。然后在您的客户端中,当您查询 projects 时,不要询问他们的任务边缘,而只需在需要时发送单独的查询 tasks(projectId: ID)

在 apollo 的 GitHunt 示例中,他们正在做同样的事情来查询每个 repo 的 cmets 列表,甚至在用户将鼠标悬停在 repo 的链接上时预取数据。那当然是半热切的行为而不是懒惰的行为,因此您可以在那里做出自己的选择。

GraphQL 未来的功能将使您能够在准备就绪时将任务列表@stream 发送给客户端,并且还可以@defer 任何您希望继续没有的字段。您的方案可能会有更好的解决方案,不需要发送第二个查询。

欲了解更多信息,请在此处查看 lee 的演讲:https://youtu.be/ViXL0YQnioU?t=12m50s

【讨论】:

以上是关于GraphQL 在嵌套图中获取子边的附加数据的主要内容,如果未能解决你的问题,请参考以下文章

使用嵌套结构的参数使用 django-graphene 过滤父级

Apollo/GraphQL:如何获取嵌套元素?

我目前有一个问题,我试图在 grapql 中查询嵌套的猫鼬对象,但似乎无法弄清楚

使用嵌套对象获取 React 中 Graphql 的问题 - 对象未定义

GraphQL - 从嵌套的 JSON 对象中获取所有字段

Apollo/graphQL:如何将乐观 UI 用于嵌套反应组件的突变?