graphql中upade函数的单独类型突变有什么意义?

时间:2019-04-14 12:53:34

标签: graphql

在graphql中编写模式时,我们通常使用两个单独的块,type Query用于简单的get查询功能,type Mutation用于那些将更新服务器端数据的功能。但是,当我尝试将更新功能放在简单的graphql type Query的架构中时,令人惊讶的是它仍然有效。我猜有两个独立的查询函数和变异函数块可以使阅读API的人更加清楚,但除此之外,是否真的有必要仅在type Mutation块中拥有变异函数?

1 个答案:

答案 0 :(得分:1)

根据spec,GraphQL支持三种操作:

  
      
  • 查询–只读获取。
  •   
  • 变异–先写后抓取。
  •   
  • 订阅–响应源事件而获取数据的长期请求。
  •   

这是预期的用法,但是因为如何字段的解析取决于服务本身,所以没有一种实现方式可以有效地阻止您进行带有副作用或查询的查询。只是只读的变异。

查询和变异操作之间的唯一实际区别是执行顺序。通常,并行选择同一选择集中的字段。 However

  

预期突变操作中的顶级字段会对基础数据系统产生副作用。连续执行提供的突变可确保在出现这些副作用时避免种族条件。

换句话说,这里foobar将被并行解析:

query {
  foo
  bar
}

,这里将首先解析foo,然后解决bar

mutation {
  foo
  bar
}

保持规范中确立的模式的三个主要原因:

  1. 如上所述,为了使您的API使用者能够安全地顺序执行突变。

  2. 为避免与Apollo之类的客户端有关的问题,Apollo会根据该操作是query还是mutation对客户端如何使用特定操作进行某些假设-例如,react-apollo假定在安装组件时应运行查询,而变异应由用户操作触发。

  3. 要遵循规范和已建立的约定,这可以避免API使用者或团队中其他开发人员不必要的混乱。