🖋 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 论坛。