单笔交易中的GraphQL变异操作

Lei*_*ter 3 graphql

我想提供一个 GraphQL 服务,该服务在单个事务中运行整个变异操作(全部或不改变)。

顶级字段在单个事务中串行处理并相应地更改数据库。只有在执行过程中没有错误时,才应该将更改提交到数据库,否则它们应该全部回滚。

现在我有两个问题:

  1. 根据 GraphQL 规范,顶级字段的串行执行意味着每个顶级字段都将填充一个反映其修改后状态的值,然后才能知道后面的字段是否会导致错误。当后面的顶级字段导致回滚事务的错误时,这是​​否不是该字段的实际值?

  2. 如果顶级字段的突变失败,则执行以下顶级字段是没有意义的,因为事务可能处于阻止进一步处理的状态,并且无论如何都会回滚所有更改。根据 GraphQL 语义,是否可以跳过这些字段的执行(返回 null 并且可能是错误列表的条目)?

Ahm*_*ous 5

恐怕你误解了 GraphQL 规范的那部分。如果我理解您的问题,您将事务的 DB 写入/更新操作视为单独的突变。

GraphQL 有一个变异根对象,它可以有一个或多个顶级字段。这些顶级字段是单个突变。如果我们想要一个具有事务行为的服务,我们会将它实现为单个突变。后端实现必须处理如何确保事务行为。

规范中让您感到困惑的部分与当有多个变异顶级字段(选择集)时会发生什么有关。每个突变都是独立的。