2. 什么是变异?
3m

🖋 GraphQL 操作

到目前为止,我们的应用程序只使用了一种 :查询。这些是检索数据的只读操作。要修改数据,我们需要使用另一种类型的 GraphQL 操作:变异,这是写操作

非常像查询类型,变异类型用作模式的入口点。它遵循与 (或

✍️ 模式语法

我们使用 Mutation 关键字声明 Mutation 类型,然后是名称 Mutation。在花括号内,我们有我们的入口点、,我们将会使用它们来变更我们的数据。

Illustration showing the schema syntax for adding a mutation

我们建议从描述我们更新操作的特定动作的动词开始 (例如 adddeletecreate),然后是 作用于的任何数据。因为变更通常修改一个特定对象,故它们通常需要 。根据需要,我们可以添加参数,遵循相同的 语法。变更的返回类型位于冒号后。

对于 响应,我们应该返回变更更新的数据,以便我们的客户端能够更新其用户界面,而不必运行后续

根据上述建议的约定,下列哪些是针对变更的良好名称?

🤔 修改多个对象

不止更新一个对象时,我们如何选择返回哪个对象?

为了回答这个问题,我们来看看包含 太空猫任务 的一个示例模式。

Illustrating showing the schema syntax for spacecats and missions

一只太空猫有其被分配到的任务清单。一个任务还可以分配到多只太空猫,就像机组人员一样。我们想要创建一个名为assignMission,它将一只太空猫分配到一个特定任务中。这将更新该太空猫任务清单,同时也将更新mission的机组人员清单。

那么我们的应该返回哪种类型?SpaceCat?还是Mission

我们将需要返回两者,因为我们的客户端可能需要两者。

此外,我们需要考虑可能发生的任何部分错误,并向客户端返回有用的信息。我们建议向所有响应添加三个常见的

  • code:一个Int,它引用响应的状态,类似于 HTTP 状态代码。

  • success:一个Boolean标志,它指示负责的所有更新是否成功。

  • message:一个String,用于在客户端显示关于结果的信息。如果突变仅部分成功,并且通用错误消息无法说明全部情况,这将特别有用。

Illustration showing the fields on the mutation type and the fields the response should include
其中哪些是为突变的返回类型创建单独对象的原因?

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

Illustration showing the new AssignMissionResponse return type
Mutation 与 Query
Query 和 Mutation 都是 GraphQL 的类型
 
. Query 是始终
 
 的
 
 数据。Mutation 是
 
 始终
 
数据。与 Query 字段类似, 
 
 类型的字段也可以
 
 到 GraphQL API 中。

将项目从该框中拖到上面的空白处

  • 编写

  • 操作

  • 入口点

  • 创建

  • 删除

  • 检索

  • 修改

  • 读取

  • 端点

  • 作业

  • Mutation

那就是关于 我们需要了解的基础知识!让我们深入了解代码并将我们的第一个 mutation 添加到模式中。

上一个

分享你对本章的疑问和评论

你的反馈有助于我们改进!如果你卡住了或感到困惑,请告诉我们,我们会帮助你。所有评论都是公开的,并且必须遵循 Apollo 行为准则。请注意,已解决或处理的评论可能会被删除。

您需要一个 GitHub 帐户才能在下面发布内容。没有帐户? 在此发布我们的 Odyssey 论坛。