我想提供一个GraphQL服务,在单个事务中运行整个变异操作(全部或全部没有变化)。
在单个事务中串行处理顶级字段并相应地更改数据库。只有在执行期间没有错误时,才应该将更改提交到数据库,否则它们都应该回滚。
现在我有两个问题:
根据GraphQL规范,顶级字段的串行执行意味着每个顶级字段将填充一个反映修改后状态的值,然后才知道后一个字段是否导致错误。当后来的顶级字段导致回滚事务的错误时,这是不是该字段的实际值?
如果顶级域的变异失败,则执行以下顶级字段是没有意义的,因为事务可能处于阻止进一步处理的状态,并且无论如何都将回滚所有更改。根据GraphQL语义,是否可以跳过这些字段的执行(返回null并可能是错误列表的一个条目)?
答案 0 :(得分:4)
我担心你误解了GraphQL规范的那一部分。如果我理解你的问题,你会想到事务的DB写/更新操作是单独的突变。
GraphQL有一个变异根对象,它可以有一个或多个顶级字段。这些顶级字段是单个突变。如果我们想要一个具有事务行为的服务,我们将其实现为单个突变。后端实现必须处理如何确保事务行为。
让您感到困惑的规范部分涉及当存在多个突变顶级字段(选择集)时会发生什么。每个突变都是独立的。