🖋 GraphQL 操作
到目前为止,我们的应用程序只使用了一种 GraphQL 操作:查询。这些是检索数据的只读操作。要修改数据,我们需要使用另一种类型的 GraphQL 操作:变异,这是写操作。
非常像查询类型,变异类型用作模式的入口点。它遵循与 模式定义语言(或 SDL
✍️ 模式语法
我们使用 Mutation 关键字声明 Mutation 类型,然后是名称 Mutation。在花括号内,我们有我们的入口点、字段,我们将会使用它们来变更我们的数据。

我们建议从描述我们更新操作的特定动作的动词开始 操作(例如 add、delete或 create),然后是 变更作用于的任何数据。因为变更通常修改一个特定对象,故它们通常需要 参数。根据需要,我们可以添加参数,遵循相同的 SDL 语法。变更的返回类型位于冒号后。
对于 变更 响应,我们应该返回变更更新的数据,以便我们的客户端能够更新其用户界面,而不必运行后续 查询。
🤔 修改多个对象
当 变更 不止更新一个对象时,我们如何选择返回哪个对象?
为了回答这个问题,我们来看看包含 太空猫 和 任务 的一个示例模式。

一只太空猫有其被分配到的任务清单。一个任务还可以分配到多只太空猫,就像机组人员一样。我们想要创建一个名为突变的assignMission,它将一只太空猫分配到一个特定任务中。这将更新该太空猫的任务清单,同时也将更新mission的机组人员清单。
那么我们的突变应该返回哪种类型?SpaceCat?还是Mission?
我们将需要返回两者,因为我们的客户端可能需要两者。
此外,我们需要考虑可能发生的任何部分错误,并向客户端返回有用的信息。我们建议向所有突变响应添加三个常见的字段:
code:一个Int,它引用响应的状态,类似于 HTTP 状态代码。success:一个Boolean标志,它指示突变负责的所有更新是否成功。message:一个String,用于在客户端显示关于突变结果的信息。如果突变仅部分成功,并且通用错误消息无法说明全部情况,这将特别有用。

回顾 assignMission mutation,我们将创建一个 新的 特定的类型专门用于它的响应。 按照惯例,此返回类型将以 mutation (AssignMission) 的名称开头,并以 Response 结尾。 此类型将包含三个信息属性,以及 mutation 更新的每个对象的附加 fields

Query 字段类似, 将项目从该框中拖到上面的空白处
搜索
编写
操作
入口点
创建
删除
检索
修改
读取
端点
作业
Mutation
那就是关于 mutations 我们需要了解的基础知识!让我们深入了解代码并将我们的第一个 mutation 添加到模式中。
分享你对本章的疑问和评论
你的反馈有助于我们改进!如果你卡住了或感到困惑,请告诉我们,我们会帮助你。所有评论都是公开的,并且必须遵循 Apollo 行为准则。请注意,已解决或处理的评论可能会被删除。
您需要一个 GitHub 帐户才能在下面发布内容。没有帐户? 在此发布我们的 Odyssey 论坛。