Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >为什么GraphQL是API的未来[每日前端夜话0x50]

为什么GraphQL是API的未来[每日前端夜话0x50]

作者头像
疯狂的技术宅
发布于 2019-04-23 06:23:13
发布于 2019-04-23 06:23:13
1.6K00
代码可运行
举报
文章被收录于专栏:京程一灯京程一灯
运行总次数:0
代码可运行

自从 Web 开始迅猛发展,对程序员来说开发 API 是一项很艰巨的任务。我们开发 API 的方式必须随着时间的推移而发展,以便我们始终可以开发良好、直观且设计良好的API。

在过去几年中,GraphQL 在越来越受到开发者的欢迎。许多公司已经开始采用这种技术来构建他们的API。 GraphQL 是一种由 Facebook 在 2012 年开发并于 2015 年公开发布的查询语言。它已经收到了广泛的关注,并被许多大公司采用,如 Spotify,Facebook,GitHub,NYTimes,Netflix,沃尔玛等。

在本系列教程中,我们将研究 GraphQL,了解它是什么,并学习使这种查询语言如此直观和易用的原因是什么。

先让我们研究一下 REST 存在的问题,以及 GraphQL 如何解决它们。我们还将了解那些大公司为什么用 GraphQL 去构建API,以及为什么它是 API 的未来。

REST

很久以前,当我们把 API 的设计从 SOAP 转向 REST 时,认为此举将会为工作提供更多的灵活性。我们不能否认 REST 的运作是良好的,在当时是一个很好的举措。但是随着应用和 Web 变得越来越复杂,API 也会随着这些变化而发展。

不过 REST 也确实存在很多问题。让我们看看它们是什么:

太多的端点

REST 中的每个资源都由端点表示。因此,在实际的程序中,我们最终会为这些资源提供大量端点。如果要发出 GET 请求,则需要具有特定参数并特定于该请求的端点。如果要发出 POST 请求,则需要该请求的另一个端点。

REST 有太多的端点

但是这有什么问题呢?假设我们正在开发一个像 Facebook 这样的大型社交媒体应用,最终会得到很多端点,这意味着开发和维护这些 API 将花费更多的时间和精力。

过度获取和欠缺的信息

真正令人烦恼的问题是通过 REST API 会过度获取和欠缺的信息。这是因为 REST API 会始终返回固定的结构。除非我们再去创建一个特定的端点,否则无法准确获取所需的数据。

So, if we need only a tiny piece of data, we have to work with the whole object. For example, if we only need to get the firstName, lastName, and age of a user in a REST API, there's no way we can get exactly this data without fetching the whole object.

因此如果我们只需要一小部分数据,就必须处理整个对象。例如,如果我们只需要在 REST API 中获取用户的 firstNamelastNameage,就无法在不获取整个对象的情况下得到这些数据。

信息欠缺也存在问题。如果我们想从两个不同的资源获取数据,就需要分别对两个不同的端点进行调用。在一个巨大的程序中,扩展性会很差,因为在某些情况下我们只需要获取特定的数据,而不是整个对象。假设我们正在开发一个具有 100 个端点的程序。想象一下工作量和产生的代码量。随着时间的推移,开发会变得越来越困难,代码也难以维护,程序员会感到迷茫。

版本控制

在我看来,REST 中的一个痛点就是版本控制。使用 REST API,通常会看到许多带有 v1 或 v2 的 API。这些在 GraphQL 中并不需要,因为你可以通过添加或删除类型来改进 API。

在GraphQL中,你所需要做的就是写新代码。可以编写新类型、查询和修改,而无需维护其他版本的API。

因此你将看不到如下所示具有端点的 GraphQL API:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1https://example.com/api/v1/users/12312
2https://example.com/api/v2/users/12312

为什么 GraphQL 是未来

早在2012年,Facebook 在开发移动应用时面临一个问题,这导致他们开发了 GraphQL。这些问题非常普遍,特别是当我们谈论 RESTful API 设计时。如上所述,这些问题是:

  • 表现不佳
  • 端点过多
  • 过度获取或欠缺数据
  • 每当我们要增加或删除某些内容时,需要开发另一个版本
  • API 难以理解

考虑到许多概念,Facebook 的开发人员开使用了一种更好的方法来设计 API,后来将其命名为 GraphQL。基本上它是 REST 的替代品,做了很多改进。

使用 GraphQL,我们可以获得许多新功能,在构建 API 时为你提供强大的功能。下面让我们一个一个地审视它们:

单端点

根本没有必要构建很多端点!GraphQL 只需要一个端点,通过它我们可以在单个请求中获得尽可能多的数据。基本上 GraphQL 会将你的所有查询、修改和订阅封装在一个端点中,并供你调用。它改善了你的开发周期,因为你不必向两个不同的资源发出请求来获取数据。此外,当我们开发一个大型的应用时,不必再像 REST 一样获得大量端点和代码。我们只需要获得一个端点,并根据需要开发尽可能多的请求即可。

GraphQL仅需要一个端点

正如我上面所说,“单端点”方法使你的 API 能够自我描述,你不再需要再去构建文档,因为你的程序员已经知道应该如何使用。他们只需查看代码即可了解API。我们稍后会详细了解它(本系列的下一篇教程)。看起来很神奇,但这就是 GraphQL!

使用 GraphQL,你只能获取所需的数据

没有过度获取或未被充分利用的信息,你只获取自己需的数据。还记得我们最初讨论的性能问题吗?不会再像那样了,因为 GraphQL 提高了 API 的性能,特别是在网络连接速度较慢的情况下。

GraphQL 使得开发 API 变得容易并保持一致

很多人认为 GraphQL 非常复杂,因为它涉及模式和单个端点。但是你一旦开始用它开发 API,会发现它比你想象的要容易得多。当你开发网站或应用时,“单端点” API 会给你很大帮助。它使你的 API 更加能够自我描述,并且无需为它编写大量的文档。

如果你并不是把 JavaScript 作为主要语言,那也不是问题。 GraphQL 是一种查询语言,这意味着你可以使用任何自己熟悉的语言。在编写本教程时,GraphQL 支持的语言已经超过了 12 种。

GraphQL 是未来

GraphQL 是一种开源查询语言,这意味着社区可以为其做出贡献并对加以改进。当 Facebook 将其发布到社区时,得到了大量的认同。现在随着越来越多的程序员用它构建 API,GraphQL 一直在快速增长。但是也有些人一直在问它是否真的要取代 REST,或者成为构建 API 的新方法。

起初,我认为 GraphQL 是一个炒作,仅仅是创建 API 的另一种方式。但是当我开始研究它时,发现 GraphQL 具有为现代应用程序创建 API 所需的基本功能,因为它非常适合现今的技术栈。

所以如果我要对你说些什么,我会说:是的,GraphQL的确是API的未来。这就是大公司在它身上押注的原因。

在2018年11月,GraphQL 与 Linux Foundation 合作创建了一个 GraphQL Foundation。这种查询语言鼓励其开发人员创建更多的文档、工具和语言支持。这将确保 GraphQL 的稳定、中立和可持续发展的未来。因此这也是将 GraphQL 视为 API 的未来的另一个原因。

当然 GraphQL 不会立即取代 REST,因为许多应用仍然在使用它,也不可能在一夜之间重写它们。随着越来越多的公司采用 GraphQL,UX 和 DX 都将得到改进。

结论

GraphQL 的确是API的未来,我们需要了解更多信息。这就是我决定撰写这一系列教程的原因,这些教程将为我们展示如何用好 GraphQL,先从查询和修改开始,然后是订阅和身份验证

在本系列的下一篇教程中,我将深入研究 GraphQL,展示 GraphQL 如何与类型一起工作,并创建我们的第一个查询和修改。

所以请继续关注并希望在下一个教程中见到你!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端先锋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Github 为什么开放了一套 GraphQL 版本的 API?
背景 GitHub 宣布开放了一套使用 GraphQL 开发的公共 API GitHub 的 REST API 已经非常完善,设计得很优秀,很多公司开发自己的 REST API 时都会参考 GitHub,也有很多爱好者写了非常丰富的教程 GraphQL 的核心是一套数据查询语言的规范,是 Facebook 在2012年开发的,2015年开源,Facebook 内部已经广泛应用,用于替代 REST GitHub 为什么选择 GraphQL?这是很多用户关心的问题,Github 对此做了解释 REST API
dys
2018/04/04
1.2K0
用Node.js创建安全的 GraphQL API[每日前端夜话0x61]
本文的目标是提供关于如何创建安全的 Node.js GraphQL API 的快速指南。
疯狂的技术宅
2019/05/15
1.7K0
GraphQL是API的未来,但它并非银弹
我认为,GraphQL 将改变世界。将来,你可以使用 GraphQL 查询世界上的任何系统。我在创造这样的未来。那么我为什么要对使用 GraphQL 进行辩驳呢?我个人最讨厌的是,社区一直在宣传 GraphQL 的好处,而这些好处却非常普通,并且与 GraphQL 实际上没有任何关系。如果我们想推广采用,那么我们应该诚实,应该摘掉有色眼镜。这篇文章是对 Kyle Schrade 的文章“为什么使用 GraphQL”的回应。这并不是批评。这篇文章是一个很好的讨论基础,因为它代表了我在社区中经常听到的观点。如果你读了整篇文章,当然这会花一些时间,你就会完全理解,为什么我认为 Kyle 的文章应该改名为“为什么使用 Apollo”。
深度学习与Python
2020/12/18
2K0
为什么要使用 GraphQL?【Programming】
正如我之前所写, GraphQL是下一代API技术,它正在改变客户端应用程序与后端系统的通信方式以及后端系统的设计方式。
Potato
2019/11/24
1.2K0
为什么要使用 GraphQL?【Programming】
GraphQL学习第一篇 -GraphQL简介
GraphQL 是一种新的 API 的查询语言,它提供了一种更高效、强大和灵活 API 查询。它 是由 Facebook 开发和开源,目前由来自世界各地的大公司和个人维护。GraphQL 对API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余。它弥补了 RESTful API(字段冗余,扩展性差、无法聚合 API、无法定义数据 类型、网络请求次数多)等不足。
越陌度阡
2020/11/26
5510
开发实践|API新宠GraphQL浅谈
这里推荐一篇实用的文章:《案例分享 | 大数据传输中的二进制加密方案》,作者:【叫我阿柒啊】。
六月暴雪飞梨花
2024/11/15
1572
开发实践|API新宠GraphQL浅谈
REST API 和 GraphQL的比较
REST(Representational State Transfer)和GraphQL是两种常见的API设计风格,各自有其独特的特点和适用场景。在API设计方面,REST和GraphQL各有其优势和劣势。
coderidea
2024/02/01
2330
REST API 和 GraphQL的比较
GraphQL:现代API设计的革新
GraphQL是由Facebook在2012年开发并于2015年开源的一种查询语言,用于构建API。与传统的REST API相比,GraphQL提供了一种更高效、更灵活的数据查询方式。本文将从GraphQL的基本概念、核心特性、实际使用以及优缺点等方面进行详细介绍。
IT蜗壳-Tango
2024/06/23
2140
这才是GraphQL最详细的解释[每日前端夜话0x80]
GraphQL是一种查询语言、一种执行引擎和一种规范,它引领开发人员重新思考应该怎样去构建客户端和API。
疯狂的技术宅
2019/06/18
9660
这才是GraphQL最详细的解释[每日前端夜话0x80]
REST API和GraphQL API的比较
REST(表述性状态传输)API 是一种应用程序接口 (API) 的架构风格,它使用 HTTP 请求来访问和使用数据。该数据可用于GET、PUT、POST和DELETE数据类型,指的是对资源的读取、更新、创建和删除操作。 RESTful API 使用 HTTP 方法在处理数据时执行 CRUD(创建、读取、更新和删除)过程。 为了促进缓存、AB 测试、身份验证和其他过程,标头向客户端和服务器提供信息。 主体包含客户端想要传输到服务器的数据,例如请求的有效负载。
用户4235284
2023/10/14
5850
REST API和GraphQL API的比较
使用ASP.NET Core开发GraphQL服务器 -- 预备知识(上)
为了介绍使用ASP.NET Core构建GraphQL服务器,本文需要介绍一下GraphQL,其实看官网的文档就行。
solenovex
2018/10/10
1.8K0
GraphQL
本文第一部分翻译自REST 2.0 Is Here and Its Name Is GraphQL,标题很有视觉冲击力,不小心上钩了
ayqy贾杰
2019/06/12
1.5K0
GraphQL
GraphQL与传统API对比介绍教程
在现代应用程序开发中,API(应用程序接口)扮演着至关重要的角色。随着技术的发展,API的实现方式也在不断进化。本文将介绍两种常见的API实现方式:传统API(主要是REST)和GraphQL,并对它们进行对比分析。
IT蜗壳-Tango
2024/06/22
2550
理解 GraphQL:现代 API 查询语言的详解与实践
GraphQL 是一种用于 API 的查询语言,以及一个用于执行查询的服务器端运行时。它允许客户端精确地请求所需的数据,避免冗余和不足。GraphQL 由 Facebook 于 2012 年开发,并在 2015 年开源。
编程小妖女
2024/12/28
1260
理解 GraphQL:现代 API 查询语言的详解与实践
解读GraphQL|洞见
今天我们解读一下2016年11月期技术雷达中的GraphQL,它位于语言象限,处于评估阶段,编号整100,非常方便查找……这项技术比较有意思。对我来说,技术雷达中通常有两种典型技术: 第一种,像Apache Kafka这样的,一看就感觉很牛,然后哇地赞叹一下,但因为离项目场景太远,大概看看热闹就过去了。 第二种,典型就是ECMAScript 2017这种,早晚要用并且应用广泛,但说真的,好像也没啥可介绍的…… GraphQL和这两种都不太一样——它用来构建我们Web前端/移动客户端的API,这个覆盖面就
ThoughtWorks
2018/04/17
1.1K0
解读GraphQL|洞见
为什么我使用 GraphQL 而放弃 REST API?
本文最初发布于 Max Desiatov 的个人博客,经原作者授权由 InfoQ 中文站翻译并分享。
winty
2021/05/19
2.4K0
GraphQL 初体验,Node.js 构建 GraphQL API 指南
过去几年中,GraphQL 已经成为一种非常流行的 API 规范,该规范专注于使客户端(无论是客户端、前端还是第三方)的数据获取更加容易。
coder_koala
2021/01/08
8.3K1
GraphQL与OpenAPI:数据治理的优缺点
一位财富 50 强公司的 CTO 评估了 OpenAPI 和 GraphQL API 标准的优缺点,以及它们与数据治理的相关性。
云云众生s
2024/08/13
1410
API接口架构REST vs GraphQL
无论是创建网站,还是移动应用程序,我们都需要通过 API 来传递数据,通过 API 我们可以获取到数据库中的数据,可以操作数据库,可以处理一些业务逻辑。现在最流行的 API 架构是 REST。但是,GraphQL 正在逐渐追赶着它。
程序那些事儿
2023/03/07
1.6K0
API接口架构REST vs GraphQL
【API架构】REST API 行业辩论:OData vs GraphQL vs ORDS
本文比较了标准 API 和服务,以通过 Internet 查询数据以进行分析、集成和数据管理。
架构师研究会
2022/05/25
2.2K0
【API架构】REST API 行业辩论:OData vs GraphQL vs ORDS
相关推荐
Github 为什么开放了一套 GraphQL 版本的 API?
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文