Asynchronous 如何处理GraphQL Apollo客户端中的异步突变 结构
这是一个如何在我们当前的基础架构中最好地使用Apollo Client 2的问题。我们有一个Graphql服务器(Apollo服务器2),它连接到多个其他端点。突变通过RabbitMQ发送,我们的Graphql还侦听RabbitMQ,然后通过订阅将其推送到客户端 实施 我们有一个阿波罗服务器,我们发送变异,它们总是给出一个Asynchronous 如何处理GraphQL Apollo客户端中的异步突变 结构,asynchronous,rabbitmq,graphql,apollo,apollo-client,Asynchronous,Rabbitmq,Graphql,Apollo,Apollo Client,这是一个如何在我们当前的基础架构中最好地使用Apollo Client 2的问题。我们有一个Graphql服务器(Apollo服务器2),它连接到多个其他端点。突变通过RabbitMQ发送,我们的Graphql还侦听RabbitMQ,然后通过订阅将其推送到客户端 实施 我们有一个阿波罗服务器,我们发送变异,它们总是给出一个null,因为它们是异步的。结果将通过订阅发送回。 我现在已经这样实现了它 发送变异 创建一个优化响应 通过Update功能中的writeQuery优化更新状态 当实际响应出
null
,因为它们是异步的。结果将通过订阅发送回。
我现在已经这样实现了它
- 发送变异
- 创建一个
优化响应
- 通过
功能中的Update
优化更新状态writeQuery
- 当实际响应出现(为空)时,再次使用
方法中的更新
优化响应
- 等待订阅返回响应
- 然后用实际数据刷新状态/组件
您对更好的实现方法有何想法?突变可以是异步的 Apollo客户端中的突变通常不同步。客户可以根据需要等待突变结果。您可能不希望您的GraphQL服务在这段时间内保持HTTP连接打开,这似乎就是您在这里要处理的问题。您对突变的响应方式与GraphQL的设计方式背道而驰,这就开始产生复杂性——在我看来——这是您不希望的 在实现级别而不是API级别解决问题 我的想法是:遵循GraphQL规范和教条式方法。让突变返回突变结果。这将创建一个任何开发人员都熟悉的API。相反,将这些结果的交付视为您想要解决的实际问题。GraphQL未指定客户端-服务器通信的传输协议。如果您在服务器和客户端之间运行WebSocket,那么就已经抛弃HTTP,完全在套接字级别上运行 利用阿波罗客户的灵活链接系统 这就是阿波罗2号客户机的用武之地。Apollo Client 2允许您编写自己的网络链接来处理客户机-服务器通信。如果您在链路级别上解决通信问题,开发人员就可以像往常一样使用客户端,而不需要了解任何网络通信细节
我希望这会有所帮助,你仍然有机会朝着这个方向前进。我知道这可能需要在服务器端进行更改,但当您的应用程序前端很重时(就像现在大多数应用程序一样),这完全是值得的。突变可以是异步的 Apollo客户端中的突变通常不同步。客户可以根据需要等待突变结果。您可能不希望您的GraphQL服务在这段时间内保持HTTP连接打开,这似乎就是您在这里要处理的问题。您对突变的响应方式与GraphQL的设计方式背道而驰,这就开始产生复杂性——在我看来——这是您不希望的 在实现级别而不是API级别解决问题 我的想法是:遵循GraphQL规范和教条式方法。让突变返回突变结果。这将创建一个任何开发人员都熟悉的API。相反,将这些结果的交付视为您想要解决的实际问题。GraphQL未指定客户端-服务器通信的传输协议。如果您在服务器和客户端之间运行WebSocket,那么就已经抛弃HTTP,完全在套接字级别上运行 利用阿波罗客户的灵活链接系统 这就是阿波罗2号客户机的用武之地。Apollo Client 2允许您编写自己的网络链接来处理客户机-服务器通信。如果您在链路级别上解决通信问题,开发人员就可以像往常一样使用客户端,而不需要了解任何网络通信细节 我希望这会有所帮助,你仍然有机会朝着这个方向前进。我知道这可能需要在服务器端进行更改,但当您的应用程序前端比较繁重时(就像现在大多数应用程序一样),这是完全值得的