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

graphql中upade函数的seprate类型突变有什么意义?,graphql,Graphql,在graphql中编写模式时,我们通常使用两个单独的块,type Query用于简单的get查询函数,而type Mutation用于更新服务器端数据的函数。但是,当我尝试将更新函数放在简单graphql类型查询的模式中时,令人惊讶的是它仍然有效。我想,有两个单独的块用于查询函数和变异函数可以让那些阅读API的人更清楚一些,但除此之外,真正有必要只在类型变异块中使用变异函数。根据图,GraphQL支持三种操作: 查询–只读获取 突变–写入后接取 订阅–一个长期请求,用于获取数据以响应源事件

在graphql中编写模式时,我们通常使用两个单独的块,
type Query
用于简单的get查询函数,而
type Mutation
用于更新服务器端数据的函数。但是,当我尝试将更新函数放在简单graphql
类型查询的模式中时,令人惊讶的是它仍然有效。我想,有两个单独的块用于查询函数和变异函数可以让那些阅读API的人更清楚一些,但除此之外,真正有必要只在
类型变异
块中使用变异函数。

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

  • 查询–只读获取
  • 突变–写入后接取
  • 订阅–一个长期请求,用于获取数据以响应源事件
这是预期用途,但由于字段的解析方式取决于服务本身,因此实现无法有效地防止您的查询产生副作用或仅为只读获取的变异

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

预计突变操作中的顶级字段会对底层数据系统产生副作用。连续执行提供的突变可确保在这些副作用期间不受竞争条件的影响

换句话说,这里的
foo
bar
将并行解析:

query {
  foo
  bar
}
这里将首先解析
foo
,然后解析
bar

mutation {
  foo
  bar
}
维护规范中建立的模式有三个主要原因:

  • 使API的使用者能够安全地按顺序执行突变,如上所述

  • 为了避免像Apollo这样的客户机出现问题,根据操作是
    查询
    还是
    变异
    ,对客户机将如何使用特定操作进行某些假设——例如,react Apollo假设在安装组件时应运行查询,而突变应该由用户操作触发

  • 遵循规范和既定惯例,这避免了API使用者或团队中其他开发人员不必要的混淆


  • 可能的重复不是一个精确的重复,但这个问题实际上是在问同样的问题,而被接受的答案充分回答了这个问题。不,它不是重复的。因为提出这些问题的人已经同意,如果登录对服务器端进行了任何更改/产生了任何副作用,那么登录应该已经进入了内部。另一方面,我在问,为什么如果服务器端发生了变化,那么从技术上讲,为什么有必要将其放入变异块中?