单事务中的GraphQL变异操作

单事务中的GraphQL变异操作,graphql,Graphql,我想提供一个GraphQL服务,在一个事务中运行整个变异操作,要么全部改变,要么什么都不改变 顶级字段在单个事务中串行处理,并相应地更改数据库。只有在执行过程中没有错误时,才应将更改提交到数据库,否则应全部回滚 现在我有两个问题: 根据GraphQL规范,toplevel字段的串行执行意味着每个toplevel字段将填充一个值,该值反映修改后的状态,然后才知道后面的字段是否会导致错误。当更高级别的字段导致回滚事务的错误时,这是否不是字段的实际值 如果顶级字段的突变失败,那么执行以下顶级字段是没有

我想提供一个GraphQL服务,在一个事务中运行整个变异操作,要么全部改变,要么什么都不改变

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

现在我有两个问题:

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

如果顶级字段的突变失败,那么执行以下顶级字段是没有意义的,因为事务可能处于阻止进一步处理的状态,并且所有更改都将回滚。根据GraphQL语义,可以跳过那些返回null的字段的执行,或者是错误列表的条目吗


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

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


规范中让您感到困惑的部分涉及当存在多个顶级字段选择集时会发生什么。每个变异都是独立的。

这完全取决于您的后端实现,它与GraphQL无关。GraphQL只是一个如何与后端交互的接口。是的,好的,但这也是一个最佳实践/API用户期望的问题。我这样解释规范:GraphQL请求中有一个GraphQL操作,这是一个变异。变异通过解析字段的副作用,连续修改服务器上实现的顶级字段。现在,我想把所有顶级字段修改放在一个事务中。问题是,可以这么说,规范是否可以被解释为,一旦顶级字段出现错误,解析顶级字段的副作用就不会执行任何工作?不,规范不能这样解释。GraphQL与事务无关。它只是一个接口,使用您选择的持久或非持久存储,连接到后台存储的数据。事务必须经过GraphQL层处理。