Mutation和Query之间有什么区别

Reb*_*orn 14 graphql

到目前为止,我正在阅读GraphQL学习部分,Query并在其中Mutation进行描述.然而,缺乏显示和/或描述它们之间差异的真实示例,最重要的是 - 何时适合使用它.

非常感谢您的解释.

Rom*_*siy 31

从技术上讲,可以实现任何GraphQL查询以引起数据写入.但是有一个约定,任何导致写入的操作都应该通过突变显式发送.

除了语义上的差异外,还有一个重要的技术差异:

Query字段可以由GraphQL引擎并行执行,Mutation顶级字段必须根据规范连续执行:

如果操作是突变,则操作的结果是在突变根对象类型上执行突变的顶级选择集的结果.该选择集应该连续执行.

预计变异操作中的顶级字段对底层数据系统执行副作用.所提供的突变的连续执行确保在这些副作用期间抵抗竞争条件.

资料来源:http://facebook.github.io/graphql/June2018/#sec-Mutation


Ran*_*had 9

简单来说,查询是SELECT语句,而变异是INSERT Operation。

graphql中的查询用于获取数据,而突变用于INSERT / UPDATE / DELETE操作。

  • @maxkoryukov 是的,这是简短的答案,但如果您看到接受的答案比这晚一年。这是该问题的第一个答案。 (2认同)

小智 8

查询 =选择

变异 =插入,更新,删除


Muh*_*ssa 8

休息时思考:

查询=> GET突变=> POSTPUTPATCHDELETE


hat*_*gic 6

询问:

它应该仅用于数据库上的READ操作。

突变:

仅当您在数据库中执行CREATE / UPDATE / DELETE某些内容时才应使用它。

概括

如果您只想读取数据而不修改(即不删除、编辑或创建)数据库中的任何内容,请使用查询。如果您打算在数据库级别删除、创建任何内容,请使用突变。

这是文档的内容

在 REST 中,任何请求最终都可能会对服务器造成一些副作用,但按照惯例,建议不要使用 GET 请求来修改数据。GraphQL 类似 - 从技术上讲,任何查询都可以实现以引起数据写入。然而,建立一个约定是有用的,即任何导致写入的操作都应该通过突变显式发送。

就像在查询中一样,如果突变字段返回对象类型,您可以请求嵌套字段。这对于在更新后获取对象的新状态非常有用。

除了名称之外,查询和突变之间还有一个重要区别:

虽然查询字段是并行执行的,但突变字段是串行运行的,一个接一个。这意味着,如果我们在一个请求中发送两个incrementCredits突变,则保证第一个在第二个开始之前完成,确保我们不会结束与我们自己竞争条件。