跳转至

服务值被应用重命名或重新生成的写入

Issue: https://github.com/morluto/rea/issues/4933

结果

为展示每次写入的效果而制作的录制,每次写入都会被一次读回,并且每个工具有两个临时对象,仍然会让一些写入无法被服务,因为应用存储值的方式无法用写入规则解释:

  • 创建操作的成员被存储在另一个名称下:Shlink 将 customSlug 存储为 shortCode,其 shortUrl 也以此结尾,因此除记录到的 slug 外,其他所有 slug 都被拒绝;
  • 更新操作每次为字段赋予一个新的 UUID:n8n 的 versionId,客户端会将其随读取到的版本一起发送回来;
  • 更新操作用新 UUID 重写子行:Mealie 在每次更新时都会为配方的说明重新生成 id。

这些写入现在得到了解释,并且在所有已记录调用都与解释一致的情况下被服务。

规则

  • 创建。 一个成员被完整复制到另一个名称的字段中,并且没有以其自身名称存储时,该字段可接受其 JSON 类型的任意值。包含复制值作为分隔令牌的字符串是该复制字段的模板,并会围绕新值重建;复制值至少具有复制规则中的 8 个字符。回显值及其副本不会构成模板,因为回显的名称可能会在不相关的文本中再次出现。每个包含复制值的文本都必须重建该副本;在一个文本中重建它并不会让其他模板中的出现变得安全。否则,该成员将保持为其记录值。
  • 更新。
  • unique:一个字段原本持有一个 UUID,现在持有另一个 UUID,而该调用并未发送这个新 UUID(不论大小写),且该类型的其他实体均未持有它。以这种方式被替换的已发送成员可接受任意值。如果一个值与其他输出字段共享,就不是独立生成:标量和嵌套生成器无法重现这种关系,因此该更新仍保持未解释状态,而不是服务一组互不关联的 UUID。
  • renewed:一个数组或对象,其唯一的变化是 UUID 被替换为它自身或该类型其他实体都未曾持有的 UUID,替换发生在规则指定的指针处(* 表示任意数组索引):那里的每个 UUID 都是新的,每个旧 UUID 只对应一个新 UUID,而其他位置的 UUID 保持不变。单独的 UUID 永远不会被续新:它要么是 unique,要么是未解释的。续新身份是规范且不区分大小写的,包括同一字段中重复出现的混合大小写;源拼写保留在被保留的实体中,并在服务时得到保留。新值不得在请求中发送、不得由更早的或其他实体拥有,也不得与非续新的输出字段共享。在生成规则能够重现这些关系之前,它们仍然未被解释。嵌套的续新字段仍可共享同一个新替换值。
  • 服务。 unique 字段获得一个与创建时同样派生的 UUID。renewed 字段保留实体的当前值,将规则指针处的每个 UUID 替换为调用所播种的一个 UUID;只要调用续新该 UUID,就使用相同的替换值;没有该字段的实体仍然没有该字段。

门控对这两者都采用记录值,就像对其他生成字段一样。后续调用必须以相同方式判定字段,而任何已记录调用都不能保留 unique 或 renewed 字段,因为服务会在每次调用时改变它。

验收

  • 试点录制中的 Shlink 创建和 n8n 更新可以被服务。Mealie 的更新仍然无法被服务:一个已记录调用保留了门控的配方副本中显示为续新的配料 ID,而其他判定均不变。
  • 已发布的 50 个捕获保持所有判定不变;只有 Shlink 的未服务创建方案发生变化,现在接受 customSlug 并将 shortUrl 作为模板。
  • 50 个捕获中每个已服务的写入工具仍然适用。
  • 一个单元测试表明,其他实体持有的 UUID 不是 unique,文本发生变化的子行不是 renewed。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 rea2/rea