到目前为止,我正在阅读GraphQL学习部分,Query并在其中Mutation进行描述.然而,缺乏显示和/或描述它们之间差异的真实示例,最重要的是 - 何时适合使用它.
非常感谢您的解释.
Rom*_*siy 31
从技术上讲,可以实现任何GraphQL查询以引起数据写入.但是有一个约定,任何导致写入的操作都应该通过突变显式发送.
除了语义上的差异外,还有一个重要的技术差异:
Query字段可以由GraphQL引擎并行执行,而Mutation顶级字段必须根据规范连续执行:
如果操作是突变,则操作的结果是在突变根对象类型上执行突变的顶级选择集的结果.该选择集应该连续执行.
预计变异操作中的顶级字段对底层数据系统执行副作用.所提供的突变的连续执行确保在这些副作用期间抵抗竞争条件.
资料来源:http://facebook.github.io/graphql/June2018/#sec-Mutation
简单来说,查询是SELECT语句,而变异是INSERT Operation。
graphql中的查询用于获取数据,而突变用于INSERT / UPDATE / DELETE操作。
它应该仅用于数据库上的READ操作。
仅当您在数据库中执行CREATE / UPDATE / DELETE某些内容时才应使用它。
如果您只想读取数据而不修改(即不删除、编辑或创建)数据库中的任何内容,请使用查询。如果您打算在数据库级别删除、创建任何内容,请使用突变。
在 REST 中,任何请求最终都可能会对服务器造成一些副作用,但按照惯例,建议不要使用 GET 请求来修改数据。GraphQL 类似 - 从技术上讲,任何查询都可以实现以引起数据写入。然而,建立一个约定是有用的,即任何导致写入的操作都应该通过突变显式发送。
就像在查询中一样,如果突变字段返回对象类型,您可以请求嵌套字段。这对于在更新后获取对象的新状态非常有用。
除了名称之外,查询和突变之间还有一个重要区别:
虽然查询字段是并行执行的,但突变字段是串行运行的,一个接一个。这意味着,如果我们在一个请求中发送两个incrementCredits突变,则保证第一个在第二个开始之前完成,确保我们不会结束与我们自己竞争条件。
| 归档时间: |
|
| 查看次数: |
3705 次 |
| 最近记录: |