🖋 GraphQL 操作
到目前为止,我们的应用程序只使用一种 GraphQL 操作:查询。这些是用于检索数据的只读操作。要修改数据,我们需要使用另一种 GraphQL 操作: 变异,它们是写入操作。
与Query
类型非常相似, Mutation
类型也充当模式的入口点。它遵循与 模式定义语言,或 SDL,相同的语法,我们已经使用过它们。
✍️模式语法
我们使用 Mutation
关键字声明 Mutation
类型,然后是名称 Mutation
。在大括号里面,我们有我们的进入点,即 fields,我们用这些 fields 修改我们的数据。
我们建议以一个动词开头,描述我们 操作 的具体动作(例如 add
、delete
或 create
),后接 mutation 作用于其上的任何数据。由于 mutations 通常修改特定对象,因此它们常常需要 arguments。如有需要,我们还可以遵循相同的 SDL 语法添加 arguments。冒号后面是 mutation 的返回类型。
对于 mutation 响应,我们应该返回 mutation 更新的数据,以便我们的客户端无需运行后续 query 即可更新其用户界面。
🤔 修改多个对象
当 mutation 更新的不只是单个对象时,我们如何选择要返回的对象?
为了回答这个问题,让我们来看一个包含 太空猫 和 任务 的示例架构。
空间猫拥有已分配到的任务列表。一项任务还可以分配多只空间猫(就像一个成员团队)。我们想要创建一个变异叫做assignMission
,可以将一只空间猫分配到特定任务中。这将会更新该空间猫的任务列表,同时它还会更新任务的成员列表。
那么我们的变异应该返回哪种类型?SpaceCat
?还是Mission
?
我们想要返回两者,因为我们的客户端可能同时需要两者。
此外,我们需要考虑可能会发生的任何部分错误,并向客户端返回有用的信息。我们建议向所有变异响应添加三个通用字段:
code
:一个Int
,表示响应状态,类似于 HTTP 状态代码。success
:一个Boolean
标志,指示变异负责的所有更新是否都已成功。message
:一个String
,用于在客户端显示有关变异结果的信息。如果变异只是部分成功,并且一般的な错误消息无法说明全部情况,这个信息尤为有用。
回过头来看 assignMission
变更,我们将创建一个 新的类型,专门用于它的响应。按照惯例,此返回类型将以 变更 (AssignMission
) 的名称开始,并以 Response
结束。此类型将包含三个信息属性,以及 变更更新的每个目标的附加 字段
Query
字段, 从该框中将项目拖拽到上面的空白处
操作
端点
创建
变更
修改
读取
delete
书写
检索
搜索
作业
入口点
这就是我们需要了解的 变更 的基础!让我们深入了解代码并将我们的第一个变更添加到架构中。
分享你对这节课的问题和评论
你的反馈对我们有所帮助,以便我们不断改进!如果你遇到困难或困惑,请告诉我们,我们将帮助你解决问题。所有评论都是公开的,并且必须遵守 Apollo 行为准则。请注意,已解决或处理的评论可能会被删除。
你需要一个 GitHub 帐户才能在下方发布内容。还没有帐户? 转而发布在我们的探险者论坛中。