2. 什么是变异?
3m
你现在使用的是本课程的旧版本。 查看课程更改日志.

🖋 GraphQL 操作

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

Query 类型非常相似, Mutation类型也充当模式的入口点。它遵循与 ,或 ,相同的语法,我们已经使用过它们。

✍️模式语法

我们使用 Mutation 关键字声明 Mutation 类型,然后是名称 Mutation。在大括号里面,我们有我们的进入点,即 ,我们用这些 修改我们的数据。

Illustration showing the schema syntax for adding a mutation

我们建议以一个动词开头,描述我们 的具体动作(例如 adddeletecreate),后接 作用于其上的任何数据。由于 通常修改特定对象,因此它们常常需要 。如有需要,我们还可以遵循相同的 语法添加 。冒号后面是 的返回类型。

对于 响应,我们应该返回 更新的数据,以便我们的客户端无需运行后续 即可更新其用户界面。

根据上述建议惯例,哪些是良好的 名称?

🤔 修改多个对象

更新的不只是单个对象时,我们如何选择要返回的对象?

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

Illustrating showing the schema syntax for spacecats and missions

空间猫拥有已分配到的任务列表。一项任务还可以分配多只空间猫(就像一个成员团队)。我们想要创建一个叫做assignMission,可以将一只空间猫分配到特定任务中。这将会更新该空间猫任务列表,同时它还会更新任务的成员列表。

那么我们的应该返回哪种类型?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
变更与查询
查询和变更都是 GraphQL 的类型
 
. 查询是始终 
 
操作, 
 
 数据。变更是
 
 操作,始终 
 
数据。类似于 Query 字段, 
 
 类型的字段也 
 
 到 GraphQL API 中。

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

  • 操作

  • 端点

  • 创建

  • 变更

  • 修改

  • 读取

  • delete

  • 书写

  • 检索

  • 作业

  • 入口点

这就是我们需要了解的 的基础!让我们深入了解代码并将我们的第一个变更添加到架构中。

上一步

分享你对这节课的问题和评论

你的反馈对我们有所帮助,以便我们不断改进!如果你遇到困难或困惑,请告诉我们,我们将帮助你解决问题。所有评论都是公开的,并且必须遵守 Apollo 行为准则。请注意,已解决或处理的评论可能会被删除。

你需要一个 GitHub 帐户才能在下方发布内容。还没有帐户? 转而发布在我们的探险者论坛中。