gpt4 book ai didi

graphql - GraphQL 是否会在发生故障时取消数据获取?

转载 作者:行者123 更新时间:2023-12-04 01:42:37 29 4
gpt4 key购买 nike

我想了解 GraphQL 的(Java)实现是否足够智能,如果在其中一个提取器的执行期间抛出异常,可以取消预定的数据提取?

例如,我运行一个查询来检索客户的所有订单。假设客户有 100 个订单。这意味着 GraphQL 应该进行 100 次调用来检索每个订单的详细信息,但在执行过程中有一次调用失败了——49 次请求已经成功,第 50 次失败,还有 50 次请求。 GraphQL 将中断正在进行的查询执行,并立即向客户端返回错误。但它是否会进行剩余的 50 次调用?

最佳答案

That means GraphQL should make 100 calls to retrieve details for each order

它必须调用 解析器函数 100 次,但这是否意味着 100 次网络调用取决于您。没有什么能阻止您在 1 个网络请求中批量加载所有 100 个(如果 API 允许的话)。

GraphQL will break the ongoing execution of the query and will immediately return an error to the client.

这只会在您抛出 AbortExecutionException 时发生,否则下一个节点将正常处理。部分结果是 GraphQL 中的常态。一个错误的列表元素不会阻止所有其他列表元素的解析。作为Ken Chan noted ,此行为由规范描述。

查询的执行方式完全掌握在您的手中。如果全部是同步的,并且您使用 AbortExecutionException 中断执行,则不会进行进一步的调用。如果您发送异步请求(通过返回 CompletionStage,例如 CompletableFuture),Java 中没有中断这些任务的通用机制。当您取消 CompletableFuture 时,它 does not interrupt the underlying thread .更疯狂的是,它甚至无法将取消传播到之前的 CompletionStage。这是一个 Java 问题,根本不是 GraphQL 或 graphql-java 特有的。你必须想出非平凡的机器来实现这一点。一种方法可能是使用 Tascalate Concurrent ,因为它允许取消传播和线程中断。您仍然需要以一种真正对中断使用react的方式来执行您的任务。所以大部分工作都在您身上。

关于graphql - GraphQL 是否会在发生故障时取消数据获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56744951/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com