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

Facebook graph api GraphQL在嵌套图中获取子边的附加数据,facebook-graph-api,graphql,graphql-js,apollostack,apollo-server,Facebook Graph Api,Graphql,Graphql Js,Apollostack,Apollo Server,我有一个稍微复杂一点的数据结构,产生了一个深度嵌套的图形。现在我总是通过根查询获取/重新加载。但是,我认为这不是最好的方法,因为它总是需要服务器解析整个树 是否可以在第二个请求中获取/重新加载嵌套图中的子边的附加数据/边,而无需遍历整个树 如果是,怎么做 我有一个朋友 RootQuery Spaces + ... Other Layers + Project + Edge Tasks + Edge SubTasks

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

是否可以在第二个请求中获取/重新加载嵌套图中的子边的附加数据/边,而无需遍历整个树

如果是,怎么做

我有一个朋友

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

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

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

长答案: 虽然如果不向根查询添加字段,这是不可能的,但只需添加带有项目id参数的
任务
查询,就可以实现所需的行为。然后,在客户端中,当您查询
项目
时,不要请求其任务边缘,只需发送单独的查询
任务即可(projectd:ID)
当您需要时

在apollo的GitHunt示例中,他们正在做同样的事情来查询每个回购协议的评论列表,甚至在用户悬停在回购协议的链接上时预取数据。当然,这是半渴望行为,而不是懒惰行为,因此您可以在那里做出自己的选择

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

有关更多信息,请查看lee的演讲: