GraphQL异步查询结果

GraphQL异步查询结果,graphql,batch-processing,Graphql,Batch Processing,我正在尝试用GraphQL实现一个批处理查询接口。我可以得到一个同步工作的请求,但我不知道如何使结果异步。基本上,我希望能够启动查询并返回一个排序指针,指向查询完成后最终结果的位置。我想这样做是因为查询有时需要花费相当长的时间 在REST中,这是微不足道的。返回一个202并返回一个Location头,该头指向客户端可以去哪里获取结果。作为规范的GraphQL似乎没有这个概念;它似乎总是希望同步处理请求 在GraphQL中这样做有什么惯例吗?我非常喜欢查询规范,但我不希望在后端执行大型查询时,让客

我正在尝试用GraphQL实现一个批处理查询接口。我可以得到一个同步工作的请求,但我不知道如何使结果异步。基本上,我希望能够启动查询并返回一个排序指针,指向查询完成后最终结果的位置。我想这样做是因为查询有时需要花费相当长的时间

在REST中,这是微不足道的。返回一个202并返回一个Location头,该头指向客户端可以去哪里获取结果。作为规范的GraphQL似乎没有这个概念;它似乎总是希望同步处理请求


在GraphQL中这样做有什么惯例吗?我非常喜欢查询规范,但我不希望在后端执行大型查询时,让客户端HTTP连接保持打开状态长达几分钟。如果发生任何事情导致该连接中断,则需要重试整个查询,即使结果本身是持久的。

您尝试执行的操作不容易以符合规范的方式解决。阿波罗提出了一个指令的想法,这个指令几乎可以满足你的需求,但它仍然是一个实验性的特性。我相信继电器是现代的


这个想法实际上是一样的——客户机使用一个指令将字段或片段标记为可延迟的。服务器解析请求,但将延迟字段保留为空。然后,它向客户端发送一个或多个带有延迟数据的修补程序。客户端能够将初始请求和修补程序分别应用于其缓存,并像往常一样每次触发相应的UI更改。

我最近正在处理一个类似的问题。我的用例是提交一个作业来创建一个报告,并将结果返回给用户。创建报告需要几分钟的时间,这使它成为一个异步操作。我创建了一个变种,它将作业提交到后端处理系统并返回作业ID。然后,我使用查询定期轮询
作业
字段,以了解作业的状态以及最终的结果。作为一个文件的结果,我返回一个指向另一个端点的链接,在那里可以下载它(Github使用的方法类似)


实际结果的轮询工作如预期,但我想订阅可能会更好地解决这一问题。

感谢链接,这些信息非常有用。我遇到的部分问题就是无法在谷歌上搜索任何东西,因为“异步”和“批处理”这两个术语的负载过重。我想这就是为什么“延迟”流行起来的原因。顺便说一句,这可能有点骇人,但您也可以在您的用例中使用订阅。