这是一个如何在我们当前的基础设施中最好地使用Apollo Client 2的问题。我们有一个Graphql服务器(Apollo服务器2)连接到多个其他端点。变种通过RabbitMQ发送,我们的Graphql也会监听RabbitMQ,然后通过订阅将其推送到客户端。
我们有一个Apollo服务器,我们发送突变,这些服务器始终提供null
,因为它们是异步的。结果将通过订阅发回。
我目前已经像这样实现了它。
optimisticResponse
。writeQuery
函数中的update
乐观地更新状态。optimisticResponse
方法中再次使用update
。正如你所看到的......不是最理想的方式,而且客户端也很复杂。
愿意让客户尽可能地愚蠢并降低复杂性。 似乎Apollo主要是为同步突变而设计的(这是合乎逻辑的)。
您对实施此方法的更好方法有何看法?
答案 0 :(得分:2)
突变可以是异步的
Apollo Client中的突变通常不同步。只要需要,客户端就可以等待突变结果。您可能不希望GraphQL服务在此期间保持HTTP连接打开,这似乎是您在此处理的问题。你对突变做出反应的方法违背了GraphQL的设计方式,并开始产生复杂性 - 在我看来 - 你不想拥有它。
解决实施级别的问题 - 而不是API级别
我更好地完成这项工作的想法如下:遵循GraphQL规范和教条方法。让突变返回突变结果。这将创建一个任何开发人员熟悉的API。而是将这些结果的交付视为您要解决的实际问题。 GraphQL未指定客户端服务器通信的传输协议。如果你在服务器和客户端之间运行的websockets已经丢弃了HTTP并完全在套接字级别上运行。
利用Apollo客户端灵活的链接系统
这就是Apollo Client 2的用武之地.Apollo Client 2允许您编写自己的网络链接来处理客户端服务器通信。如果您在链接级别解决通信问题,开发人员可以在不知道网络通信细节的情况下使用客户端。
我希望这会有所帮助,你仍然有机会朝着这个方向前进。我知道这可能需要在服务器端进行更改,但是当您的应用程序前端很重时(因为大多数应用程序都是这些天),这可能是完全值得的。