如何使用GraphQL发送持久数据结构及其随时间的变化?

我经常遇到一个问题,我必须随着时间的推移跟踪数据结构并通过GraphQL传递它,例如,这可能是列表及其更改的时间轴:

[]
[1]
[1 2]
[-1 1 2]
[-1 2]
[2]
[]

我正在寻找一个允许我描述此数据结构及其更改并自动找到正确的graphql表示形式以仅发布差异的库?

例如,它将上面的结构分解为:

start empty
add 1
add 2
insert -1 in the beginning
etc.

以GraphQL术语。

以前有人解决过吗?

理想情况下为ReasonmL(前端)和Python(后端),但需要查找任何示例。

ccqqilindi 回答:如何使用GraphQL发送持久数据结构及其随时间的变化?

您可以使用graphql订阅(有关详细信息,请参见apollo文档)。

在开始时查询当前状态。双方(服务器和客户端)将拥有相等的数据。两者都可以使用相同的库,例如immutable.js

客户端调用订阅,开始收听“ onListChange”消息。

在服务器上insertElementremoveElementupdateElement解析器正在执行相同的操作:

  • 处理后端状态的变异;
  • insert(或removeupdate)编码为actionType,并将所需数据(变异参数,新创建的ID,版本号)编码为payload
  • 使用发布将此('onListChange')消息发送给订阅者。

客户

  • 收到消息;
  • 解码消息并更新/更改自己的状态(处理与服务器上相同的更改);
  • 更新本地版本号。

因此,客户端应具有相同的状态。

客户端可以检测到丢失的消息(有效负载中传递的版本号与本地版本指示符相比),并强制[re-]查询当前(整个)状态。

更新

如果服务器端发生更改:

  • 不受突变驱动(例如,其他应用在同一数据库上运行);
  • 不是变化的流,而仅仅是新状态(新状态刚到/从外部源读取);

...-您没有机会将逻辑注入应用变更的过程中-您应该有一个运行的监视过程

  • 检测状态变化;
  • 将状态差异转换为一组“补丁” (例如,使用jiff);
  • 将补丁发布为订阅消息。

客户端解码(消息是其中的流)修补到本地状态的变异(与服务器状态同步)。如上所述-如果版本匹配或重新查询整个状态,则应用更改。

Graphql只是一个通信渠道(查询,消息)-它无须处理此任务所需的过程(以及双方的数据)。

本文链接:https://www.f2er.com/2393850.html

大家都在问