GraphQL 学习指南 (24):GraphQL 查询语言 3.3

阅读数:4 2019 年 12 月 18 日 20:44

GraphQL学习指南(24):GraphQL查询语言 3.3

(变更)

内容简介
为什么 GraphQL 是 Ajax 诞生以来具创新性的数据获取技术?GraphQL 通过为 API 提供查询语言和用以完成查询的运行状态,提供了对 REST 和特定页面服务架构的替代方案。借助这《GraphQL 学习指南》,Alex Banks 和 Eve Porcello 为希望开始使用 GraphQL 的前端 Web 开发人员、后端工程师以及项目或产品经理提供了一条清晰的学习路径。你将先后探索图论、图数据结构和 GraphQL 类型,之后在实际项目中学习如何为照片共享应用构建 schema。
《GraphQL 学习指南》还将向你介绍 Apollo Client,可用来将 GraphQL 连接到你的用户界面。

到目前为止,我们已经讨论了很多关于读取数据的内容。查询代表了发生在 GraphQL 中所有数据读取的操作。那么为了写入数据,我们将会使用变更(mutation)关键字。变更和查询相类似,它拥有名称(name)属性,还拥有可以返回对象类型或标量的选择集。不同之处在于,变更对数据的更改会影响后端的数据状态。

例如,下面这种变更就属于“从删库到跑路”类型的:

复制代码
mutation burnItDown {
deleteAllData
}

Mutation 是一个根对象类型。API schema 定义了该类型上可用的字段。前面示例中的 API 就是通过部署 deleteAllData 字段删除客户端的所有数据,并返回一个标量类型:如果返回了布尔值 true,那就说明所有的数据删除成功了。反之,如果返回了 false,则说明可能哪里出了问题。是否实际删除数据还是由 API 来处理,这一点我们将在第 5 章中进一步讨论。

让我们考虑另一个变更的示例,与其搞破坏,不如进行创造:

复制代码
mutation createSong {
addSong(title:"No Scrubs", numberOne: true, performerName:"TLC") {
id
title
numberOne
}
}

这是一个创建新歌的变更。歌曲的 title、numberOne 状态和 performerName 作为参数发送,我们可以假设这次变更将这首新歌添加到了数据库中。如果变更字段返回一个对象,那么需要在变更的末尾添加一个选择集。在这种情况下,当变更执行完成后,将返回一个 Song(歌曲)类型,包括刚刚创建的歌曲详细信息,带有 id、title、numberOne 字段,如下所示:

复制代码
{
"data": {
"addSong": {
"id": "5aca534f4bb1de07cb6d73ae",
"title": "No Scrubs",
"numberOne": true
}
}
}

之前的例子展示了变更操作可能产生的反应。如果出现了什么问题,会返回 JSON 格式的错误,而非我们创建的 Song 对象。

也可以使用变更来改变现有的数据。假设我们想要改变 Snowtooth 缆车的状态,具体代码如下:

复制代码
mutation closeLift {
setLiftStatus(id: "jazz-cat", status: CLOSED) {
name
status
}
}

这样我们便把 jazz-cat 缆车的状态从打开切换为关闭。变更之后,可在选择集中查看最新变更结果,从而得知更改后的缆车名称和状态。

GraphQL学习指南(24):GraphQL查询语言 3.3

购书地址 https://item.jd.com/12639300.html?dist=jd

评论

发布