✍️ 更新我们的模式
要添加突变,让我们在 server/src
文件夹中的 schema.js
文件中转到我们的模式。
我们将从 type
关键字开始,然后是 Mutation
,后接大括号。
type Mutation {}
我们要增加音轨的浏览量,因此我们将调用此 突变 incrementTrackViews
。此 突变 需要知道要更新哪条音轨,因此我们将打开圆括号,并在里面添加一个 参数,称为 id
。此 参数 的类型是 ID
,并且是必需的,因此我们将添加一个感叹号 (!
) 在最后。
incrementTrackViews(id: ID!)
我们需要此 突变 的返回类型。我们可以返回一个单独的 音轨
,因为这是该 突变 要更新的内容,但就像我们在上一课中看到的那样,有一种更好的方法。
让我们为我们的 突变 响应创建一个新类型。按照惯例,我们将把我们突变的名称 (IncrementTrackViews
) 和 Response
结合起来。
type IncrementTrackViewsResponse {}
此类型将具有我们之前提到的三个 字段:
代码
(不可为Int
)成功
(不可为Boolean
)- 以及
消息
(不可为字符串
)
最后,我们将添加修改过的对象。在我们的例子中,我们只修改了一个对象:track
,类型为 Track
。请注意,track
可以为 null
,因为我们的 mutation 可能会失败。
我们还为每个 字段 添加注释,以便使我们的 GraphQL 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
IncrementTrackViewsResponse
) 中,为什么修改对象的目标语言是可空的 (track: Track
)?最后,我们可以将 mutation 的返回类型设置为这个新的 IncrementTrackViewsResponse
类型,并使它不可空。以下是现在的 incrementTrackViews
mutation 的样子:
type Mutation {incrementTrackViews(id: ID!): IncrementTrackViewsResponse!}
为这个现有架构添加一个 mutation。该 mutation 应该为一个特定的 mission 分配一艘宇宙飞船。它应该被称为 assignSpaceship
。它需要两个必需参数:类型为 ID!
的 spaceshipId
以及类型为 ID!
的 missionId
。它应该返回一个不可空的 AssignSpaceshipResponse
类型。此返回类型应该返回上面讨论的三个信息属性,以及可空的 spaceship
和 mission
字段以及相应的返回类型。
现在我们已经准备好了架构,让我们弄清楚我们将需要使用哪些端点来更新我们的数据。
分享您关于此课程的问题和评论
您的反馈有助于我们改进!如果你遇到障碍或感到困惑,请告诉我们,我们会帮助你。所有评论都是公开的,并且必须遵守 Apollo 行为守则。请注意,已解决或已处理的评论可能会被删除。
您需要一个 GitHub 帐户才能在下方发布。还没有吗? 改为在我们的 Odyssey 论坛中发帖。