3. 为我们的模式添加一个突变
2m
你当前正在使用本课程的旧版本。 查看课程变更日志.

✍️ 更新我们的模式

要添加,让我们在 server/src 文件夹中的 schema.js 文件中转到我们的模式。

我们将从 type 关键字开始,然后是 Mutation,后接大括号。

type Mutation {
}

我们要增加音轨的浏览量,因此我们将调用此 incrementTrackViews。此 需要知道要更新哪条音轨,因此我们将打开圆括号,并在里面添加一个 ,称为 id。此 的类型是 ID,并且是必需的,因此我们将添加一个感叹号 (!) 在最后。

incrementTrackViews(id: ID!)

我们需要此 的返回类型。我们可以返回一个单独的 音轨,因为这是该 要更新的内容,但就像我们在上一课中看到的那样,有一种更好的方法。

让我们为我们的 响应创建一个新类型。按照惯例,我们将把我们突变的名称 (IncrementTrackViews) 和 Response 结合起来。

type IncrementTrackViewsResponse {
}

此类型将具有我们之前提到的三个

  • 代码(不可为 Int
  • 成功(不可为 Boolean
  • 以及 消息(不可为 字符串

最后,我们将添加修改过的对象。在我们的例子中,我们只修改了一个对象:track,类型为 Track。请注意,track 可以null,因为我们的 可能会失败。

我们还为每个 添加注释,以便使我们的 API 文档更有用。

"Similar to HTTP status code, represents the status of the mutation"
code: Int!
"Indicates whether the mutation was successful"
success: Boolean!
"Human-readable message for the UI"
message: String!
"Newly updated track after a successful mutation"
track: Track
在 mutation 响应类型 (IncrementTrackViewsResponse) 中,为什么修改对象的目标语言是可空的 (track: Track)?

最后,我们可以将 的返回类型设置为这个新的 IncrementTrackViewsResponse 类型,并使它不可空。以下是现在的 incrementTrackViews 的样子:

server/src/schema.js
type Mutation {
incrementTrackViews(id: ID!): IncrementTrackViewsResponse!
}
代码挑战!

为这个现有架构添加一个 mutation。该 mutation 应该为一个特定的 mission 分配一艘宇宙飞船。它应该被称为 assignSpaceship。它需要两个必需参数:类型为 ID!spaceshipId 以及类型为 ID!missionId。它应该返回一个不可空的 AssignSpaceshipResponse 类型。此返回类型应该返回上面讨论的三个信息属性,以及可空的 spaceshipmission 字段以及相应的返回类型。

现在我们已经准备好了架构,让我们弄清楚我们将需要使用哪些端点来更新我们的数据。

上一个

分享您关于此课程的问题和评论

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

您需要一个 GitHub 帐户才能在下方发布。还没有吗? 改为在我们的 Odyssey 论坛中发帖。