截至目前,我正在阅读GraphQL
了解描述Query
和Mutation
的部分。但是,缺乏显示和/或描述它们之间差异的真实示例,最重要的是 - 何时适合使用它。
非常感谢您的解释。
答案 0 :(得分:16)
从技术上讲,任何GraphQL查询都可以实现以引起数据写入。但是有一个约定,所有导致写操作都应该通过一个突变显式发送。
除了语义上的差异外,还有一项重要的技术差异:
Query
字段可以由GraphQL引擎并行执行,而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 操作。
仅当您在数据库中执行创建/更新/删除操作时,才应使用它。
如果您只打算读取数据而不修改(意味着不删除,编辑或创建)数据库中的任何内容,请使用查询。如果要删除,创建数据库级别的任何内容,请使用突变。
在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,这样我以后可以选择日志记录并将它们显示给客户端应用程序.
如果我使用查询,数据可能不完整(日志记录可能在创建之前被查询等)