为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人2483693 2022-10-18 17:36:22
我有一个反复出现的问题,我必须随着时间的推移跟踪数据结构并通过 GraphQL 传递它,例如,这可能是列表及其更改的时间线:[][1][1 2][-1 1 2][-1 2][2][]我正在寻找一个允许我描述此数据结构及其更改并自动找到正确的 graphql 表示以仅发布差异的库?例如,它将上述结构分解为:start emptyadd 1add 2insert -1 in the beginningetc.在 GraphQL 术语中。以前有人解决过这个问题吗?理想情况下是 ReasonML(前端)和 Python(后端),但要寻找任何示例。
查看完整描述

1 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

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

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

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

在服务器 insertElement, 上removeElementupdateElement解析器也在做同样的事情:

  • 处理后端状态的突变;

  • insert将(或remove)编码updateactionType和所需的数据(突变参数、新创建的 id、版本号)为payload

  • 使用发布将此('onListChange')消息发送给订阅者。

客户

  • 收到一条消息;

  • 解码消息并更新/改变自己的状态(处理与服务器上相同的突变);

  • 更新本地版本号。

结果客户端应该具有相同的状态。

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

更新

如果服务器端发生变化:

  • 不受突变驱动(其他应用程序在同一个数据库上运行);

  • 不是变化流,而只是新状态(新状态刚刚到达/从外部源读取);

... - 您没有机会将逻辑注入应用更改的流程中 - 您应该有一个正在运行的监控流程

  • 检测状态变化;

  • 将状态差异转换为“补丁”集(fe 使用jiff);

  • 将补丁作为消息发布给订阅者。

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

Graphql 只是一个通信通道(查询、消息)——它没有任何东西可以处理此任务所需的进程(以及双方的数据)。


查看完整回答
反对 回复 2022-10-18
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号