gpt4 book ai didi

asynchronous - 如何处理 GraphQL Apollo 客户端中的异步突变

转载 作者:行者123 更新时间:2023-12-05 04:08:21 25 4
gpt4 key购买 nike

结构

这是一个如何在我们当前的基础架构中最好地使用 Apollo Client 2 的问题。我们有一个连接到多个其他端点的 Graphql 服务器(Apollo 服务器 2)。突变通过 RabbitMQ 发送,我们的 Graphql 也监听 RabbitMQ,然后通过订阅将其推送到客户端。

实现

我们有一个 Apollo 服务器,我们发送突变,这些总是给出一个 null 因为它们是异步的。结果将通过订阅发回。我目前是这样实现的。

  • 发送突变。
  • 创建一个optimisticResponse
  • 通过 update 函数中的 writeQuery 乐观地更新状态。
  • 当真正的响应到来时(它是 null),在 update 方法中再次使用 optimisticResponse
  • 等待订阅返回响应。
  • 然后用实际数据刷新状态/组件。

如您所见.. 这不是最理想的方式,而且客户端非常复杂。

希望让客户尽可能保持愚蠢并降低复杂性。似乎 Apollo 主要是为同步突变而设计的(这是合乎逻辑的)。

对于更好的实现方式,您有什么想法?

最佳答案

突变可以是异步的

在 Apollo Client 中,突变通常不是同步的。客户端可以根据需要等待突变结果。您可能不希望您的 GraphQL 服务在此期间保持 HTTP 连接打开,这似乎是您在这里处理的问题。您响应突变的方法与 GraphQL 的设计工作方式背道而驰,这开始产生您不希望拥有的复杂性。

在实现层面解决问题 - 而不是 API 层面

为了让这项工作更好,我的想法如下:遵循 GraphQL 规范和教条方法。让突变返回突变结果。这将创建一个任何开发人员都熟悉的 API。而是将这些结果的交付视为您要解决的实际问题。 GraphQL 没有指定客户端服务器通信的传输协议(protocol)。如果你有在服务器和客户端之间运行的 websockets 已经抛弃了 HTTP 并完全在套接字级别运行。

利用 Apollo Client 的灵活链接系统

这就是 Apollo Client 2 的用武之地。Apollo Client 2 允许您编写自己的网络链接来处理客户端服务器通信。如果在链路层面解决通信,开发者可以在不了解网络通信细节的情况下,照常使用客户端。

我希望这对您有所帮助,您仍然有机会朝这个方向前进。我知道这可能需要在服务器端进行更改,但是当您的应用程序前端繁重时(如今大多数应用程序都是如此),这可能是完全值得的

关于asynchronous - 如何处理 GraphQL Apollo 客户端中的异步突变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47691433/

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