GraphQL 学习指南 (8):欢迎来到 GraphQL 的世界 1.4&1.4.1

阅读数:7 2019 年 12 月 15 日 19:25

GraphQL学习指南(8):欢迎来到GraphQL的世界 1.4&1.4.1

(REST 的缺点)

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

GraphQL 最初发布的时候,一些人将其吹捧为 REST 的替代品。“REST 已经凉了啊!”早期的 GraphQL 使用者一边四处宣扬,一边怂恿别人把他们的 RESTful API 全部停用。如果在博客或者论坛上说这种话倒没什么,但是如此简单粗暴地将 GraphQL 描述为 REST 杀手未免有失偏颇。更为真实的原因是,随着网络的发展,REST 在某些条件下已经显示出其局限性。GraphQL 想要做的就是改善这一切。


(过量获取)

假设我们正在构建一个应用,使用的数据来自星球大战接口的 RESTful API。首先,我们需要加载一些与角色编号 1 号和卢克·天行者(Luke Skywalker)相关的数据。1 使用 GET 请求访问 https://swapi.co/api/people/1/ ,得到的 JSON 数据如下:

1 SWAPI 数据不包括最近的星球大战电影。

复制代码
{
"name": "Luke Skywalker",
"height": "172",
"mass": "77",
"hair_color": "blond",
"skin_color": "fair",
"eye_color": "blue",
"birth_year": "19BBY",
"gender": "male",
"homeworld": "https://swapi.co/api/planets/1/",
"films": [
"https://swapi.co/api/films/2/",
"https://swapi.co/api/films/6/",
"https://swapi.co/api/films/3/",
"https://swapi.co/api/films/1/",
"https://swapi.co/api/films/7/"
],
"species": [
"https://swapi.co/api/species/1/"
],
"vehicles": [
"https://swapi.co/api/vehicles/14/",
"https://swapi.co/api/vehicles/30/"
],
"starships": [
"https://swapi.co/api/starships/12/",
"https://swapi.co/api/starships/22/"
],
"created": "2014-12-09T13:50:51.644000Z",
"edited": "2014-12-20T21:17:56.891000Z",
"url": "https://swapi.co/api/people/1/"
}

返回的数据太多了,远远超过了我们的需求。实际上我们只需要姓名、身高和体重的信息:

复制代码
{
"name": "Luke Skywalker",
"height": "172",
"mass": "77"
}

这个例子充分展示了何为获取过量—我们获得了大量不需要的数据。客户端仅需要三个字段,而我们却返回了一个拥有 16 个键的对象,这样一来完全用不到的信息也通过网络进行发送,无形之中造成了浪费。

在 GraphQL 中,该请求该如何显示呢?我们仍旧期望取回 Luke Skywalker 的名字、身高和体重,如图 1-3 所示。

GraphQL学习指南(8):欢迎来到GraphQL的世界 1.4&1.4.1

图 1-3:Luke Skywalker 查询字符串

左侧是我们发出的 GraphQL 查询字段。我们只请求所需的字段。右侧是我们收到的一个 JSON 响应,这次只有我们所请求的数据,没有额外的 13 个字段,无形中节省了从基站到手机的流量。只返回我们需要的数据,不多不少,响应更快也是理所当然的。

GraphQL学习指南(8):欢迎来到GraphQL的世界 1.4&1.4.1

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

评论

发布