Mutation和Query之间有什么区别

时间:2017-12-28 07:59:00

标签: graphql

截至目前,我正在阅读GraphQL了解描述QueryMutation的部分。但是,缺乏显示和/或描述它们之间差异的真实示例,最重要的是 - 何时适合使用它。

非常感谢您的解释。

7 个答案:

答案 0 :(得分:16)

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

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

Query字段可以由GraphQL引擎并行执行,而Mutation顶级字段必须按规范顺序执行

  

如果操作是突变,则操作的结果是对突变根对象类型执行突变的顶级选择集的结果。此选择集应顺序执行

     

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

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

答案 1 :(得分:7)

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

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

答案 2 :(得分:3)

查询 = SELECT

变异 = INSERT,UPDATE,DELETE

答案 3 :(得分:2)

REST 中思考:

查询 => GET 变异 => POST PUT PATCH Delete

答案 4 :(得分:2)

查询:

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

静音:

仅当您在数据库中执行创建/更新/删除操作时,才应使用它。

摘要

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

这就是文档所说的here

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

就像在查询中一样,如果变异字段返回对象类型, 您可以要求嵌套字段。这对于获取新的文件可能很有用 更新后对象的状态。

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

虽然查询字段并行执行,但变异字段在 系列,一个接一个。这意味着如果我们发送两个 一个请求中的crementCredits突变,保证第一个 在第二秒开始之前完成,确保我们不会以 自己的比赛条件。

答案 5 :(得分:0)

引用来自:https://graphql.org/learn/queries/#multiple-fields-in-mutations

一个突变可以包含多个字段,就像查询一样。有一个 查询和变异之间的重要区别,除了 名称:

虽然查询字段并行执行,但变异字段在 系列,一个接一个。

这意味着,如果您并行运行2个突变,则仅在第一个突变完成后才执行第二个突变。

答案 6 :(得分:0)

我想分享我自己的经验,也许它可以为上面的好答案增加价值。

Graphql 操作主要是查询数据库。关于这一点,查询可以使用简单的 select 语句获取数据,该语句不会在 db 级别修改任何内容。但是也可以运行一个存储过程(spr)左右并获得相同的数据。

当我使用 spr 时,我也在 db 端创建了一些日志记录。例如,有时需要记录 spr 参数。或者记录谁在 db 表中提出请求。

如果我需要将数据请求(日志记录等)所做的修改显示给客户端,唯一的方法是使用 Mutation,这样我以后可以选择日志记录并将它们显示给客户端应用程序.

如果我使用查询,数据可能不完整(日志记录可能在创建之前被查询等)