Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >为什么要使用 GraphQL?【Programming】

为什么要使用 GraphQL?【Programming】

作者头像
Potato
修改于 2019-11-25 07:13:44
修改于 2019-11-25 07:13:44
1.2K0
举报

GraphQL在标准REST API技术上获得发展的原因。

正如我之前所写GraphQL是下一代API技术,它正在改变客户端应用程序与后端系统的通信方式以及后端系统的设计方式。

由于从创建它的组织Facebook开始获得支持,并得到其他技术巨头(如Github,Twitter和AirBnB)的支持,因此GraphQL作为应用程序系统的关键技术的地位似乎是可靠的; 无论现在还是将来。

GraphQL的崛起

移动应用程序性能和组织敏捷性重要性的提高为GraphQL登上现代企业体系结构的顶端提供了帮助。

鉴于REST是一种非常流行的体系结构样式,它已经允许进行数据交互的机制,与REST相比,这项新技术具有哪些优势?GraphQL中的“QL”代表查询语言,这是一个很好的起点。

借助GraphQL,组织内的不同客户端应用程序可以轻松地仅查询所需的数据,从而取代了其它REST方法,并提高了实际应用程序的性能。使用传统的RESTAPI端点,客户端应用程序可以查询服务器资源,并接收包含与请求匹配的所有数据的响应。如果来自RESTAPI端点的成功响应返回35个字段,则客户端应用程序将接收35个字段

提取问题

传统上,REST API无法为客户端应用程序提供唯一的方法来仅检索或更新他们关心的数据。通常将其描述为“过度获取”问题。随着移动应用在人们的日常生活中的普遍使用,过度获取问题产生了现实世界的不良影响。移动应用程序需要发出的每个请求,它必须发送和接收的每个字节,对最终用户的性能造成的负面影响越来越大。数据连接速度较慢的用户尤其会受到次优API设计选择的影响。使用移动应用程序时性能较差的客户更有可能不购买产品和使用服务。低效的API设计会让公司损失金钱。

并非只有“过度获取”,相应的,“欠获取”也是存在的。缺省情况下,只返回客户端实际需要的部分数据的端点需要客户端进行额外的调用以满足其数据需求——这需要额外的HTTP请求。由于过度获取和过度获取问题及其对客户机应用程序性能的影响,一种有助于高效获取的API技术有可能在市场上引起轰动——而GraphQL大胆地跳入并填补了这一空白。

REST的响应

REST API设计人员不愿无休止地失败,他们尝试通过以下几种方式来解决移动应用程序性能问题:

  • “include”和“exclude”查询参数,允许客户端应用程序通过潜在的长查询格式指定他们想要的字段。
  • “复合”服务以使客户端应用程序发出的请求数量和接收的数据效率更高的方式组合了多个端点。

虽然这些模式是REST API社区为解决移动客户端所面临的挑战而做出的尝试,但它们在一些关键方面没有实现,即:包含和排除查询键/值对很快变得混乱,特别是对于需要嵌套点表示法语法(或类似语法)以将数据包含和排除为目标的更深的对象图而言。此外,在此模型中调试查询字符串的问题通常需要手动分解URL。

  • 包含和排除查询的服务器实现通常是自定义的,因为基于服务器的应用程序没有标准的方式来处理包含和排除查询的使用,就像没有定义包含和排除查询的标准方式一样。
  • 复合服务的兴起创建了更加紧密耦合的后端和前端系统,需要加强协调以交付项目,并将敏捷项目一旦转为瀑布式。这种协调和耦合具有降低组织敏捷性的副作用。此外,复合服务按照定义来的,而不是RESTful风格的。

GraphQL的起源

对于Facebook来说,GraphQL的诞生是对2011-2012年基于html5版本的旗舰移动应用的痛点和经验的回应。认识到改进性能是最重要的,Facebook的工程师们意识到他们需要一个新的API设计来确保最佳性能。考虑到REST的上述限制,以及需要支持许多API客户端的不同需求,人们可能会开始理解,是什么促使当时的Facebook员工——联合创建者 Lee Byron 和 Dan Schaeffer——创建了后来被称为GraphQL的东西。

通过单一的GraphQL端点和GraphQL查询语言,客户端应用程序能够大大减少需要进行的网络调用的数量,并确保它们只检索需要的数据。在许多方面,这又回到了早期的web编程模式,客户端应用程序代码将直接查询后端系统——例如,有些人可能记得10-15年前在jsp上使用JSTL编写SQL查询!

现在最大的区别在于GraphQL,我们有一个规范可以在各种客户端和服务器语言以及库中实现。 借助GraphQL作为一种API技术,我们通过引入中间的GraphQL应用程序层来分离后端和前端应用程序系统,该层提供了一种以与组织的业务领域相一致的方式访问组织数据的机制。

除了解决软件工程团队遇到的技术挑战之外,GraphQL还促进了组织敏捷性的提高,特别是在企业中。 引入GraphQL的组织敏捷性增加通常归因于以下因素:

  • GraphQL API设计人员和开发人员无需在客户端需要一个或多个新字段时创建新的端点,而是能够将这些字段包含在现有的图形实现中,从而以较少的开发工作量和跨应用程序系统的较少更改的方式公开新功能。
  • 通过鼓励API设计团队将更多的精力放在定义对象图上,而不是在专注于客户端应用程序所交付的内容上,前端和后端软件团队为客户提供解决方案的速度日益脱节。

注意事项

尽管GraphQL具有引人注目的优势,但GraphQL仍然面临着实施挑战。一些示例包括:

围绕REST API的缓存机制更加成熟。

用于使用REST构建API的模式已经非常完善。

尽管工程师可能更喜欢GraphQL等新技术,但与GraphQL相比,市场上基于REST构建解决方案的人才更广泛。

结论

通过同时提高性能和组织敏捷性,GraphQL在公司中的采用在过去几年中猛增。但是,与RESTful API设计生态系统相比,它确实有一些成熟的工作。

Graphql最大的好处之一是它不是被设计为替代API解决方案的批发替代品。相反,可以实现GraphQL来补充或增强现有的API。因此,我们鼓励企业逐步采用GraphQL,因为它对应用程序性能和组织敏捷性有最大的积极影响。

本文系外文翻译,前往查看

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

本文系外文翻译,前往查看

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
REST API 和 GraphQL的比较
REST(Representational State Transfer)和GraphQL是两种常见的API设计风格,各自有其独特的特点和适用场景。在API设计方面,REST和GraphQL各有其优势和劣势。
coderidea
2024/02/01
3360
REST API 和 GraphQL的比较
GraphQL与传统API对比介绍教程
在现代应用程序开发中,API(应用程序接口)扮演着至关重要的角色。随着技术的发展,API的实现方式也在不断进化。本文将介绍两种常见的API实现方式:传统API(主要是REST)和GraphQL,并对它们进行对比分析。
IT蜗壳-Tango
2024/06/22
3100
理解 GraphQL:现代 API 查询语言的详解与实践
GraphQL 是一种用于 API 的查询语言,以及一个用于执行查询的服务器端运行时。它允许客户端精确地请求所需的数据,避免冗余和不足。GraphQL 由 Facebook 于 2012 年开发,并在 2015 年开源。
编程小妖女
2024/12/28
2150
理解 GraphQL:现代 API 查询语言的详解与实践
GraphQL是API的未来,但它并非银弹
我认为,GraphQL 将改变世界。将来,你可以使用 GraphQL 查询世界上的任何系统。我在创造这样的未来。那么我为什么要对使用 GraphQL 进行辩驳呢?我个人最讨厌的是,社区一直在宣传 GraphQL 的好处,而这些好处却非常普通,并且与 GraphQL 实际上没有任何关系。如果我们想推广采用,那么我们应该诚实,应该摘掉有色眼镜。这篇文章是对 Kyle Schrade 的文章“为什么使用 GraphQL”的回应。这并不是批评。这篇文章是一个很好的讨论基础,因为它代表了我在社区中经常听到的观点。如果你读了整篇文章,当然这会花一些时间,你就会完全理解,为什么我认为 Kyle 的文章应该改名为“为什么使用 Apollo”。
深度学习与Python
2020/12/18
2.1K0
什么是GraphQL?【Programming】
Graphql 是一种查询语言、一个执行引擎和一个规范,它引导开发人员重新思考如何构建客户端和 API 应用程序
Potato
2019/11/24
9380
什么是GraphQL?【Programming】
为什么我使用 GraphQL 而放弃 REST API?
本文最初发布于 Max Desiatov 的个人博客,经原作者授权由 InfoQ 中文站翻译并分享。
winty
2021/05/19
2.5K0
API架构风格的深度解析与选择策略:SOAP、REST、GraphQL与RPC
API作为系统间通信的桥梁,其设计风格也在持续发展和完善。SOAP、REST、GraphQL和RPC作为四种主流的API架构风格,各自具有鲜明的特点和适用场景。
公众号:码到三十五
2024/12/09
2340
API架构风格的深度解析与选择策略:SOAP、REST、GraphQL与RPC
GraphQL:现代API设计的革新
GraphQL是由Facebook在2012年开发并于2015年开源的一种查询语言,用于构建API。与传统的REST API相比,GraphQL提供了一种更高效、更灵活的数据查询方式。本文将从GraphQL的基本概念、核心特性、实际使用以及优缺点等方面进行详细介绍。
IT蜗壳-Tango
2024/06/23
2380
Spring Boot - Rest VS GraphQL
REST(Representational State Transfer)和GraphQL都是用于构建Web服务的API设计和交互方式,它们有不同的特点和优劣势。
小小工匠
2023/09/20
3320
Spring Boot - Rest VS GraphQL
API接口架构REST vs GraphQL
无论是创建网站,还是移动应用程序,我们都需要通过 API 来传递数据,通过 API 我们可以获取到数据库中的数据,可以操作数据库,可以处理一些业务逻辑。现在最流行的 API 架构是 REST。但是,GraphQL 正在逐渐追赶着它。
程序那些事儿
2023/03/07
1.7K0
API接口架构REST vs GraphQL
API架构风格对比:SOAP vs REST vs GraphQL vs RPC
最近一段时间关于GraphQL的讨论很多,一些项目中也相继用到了这种风格,但使用是否合理,是否存在杀鸡用牛刀这样的问题,还有待商榷。
charlieroro
2021/07/08
3.2K0
GraphQL最突出的架构优势是什么?
作者 | Khalil Stemmler 策划 | 田晓旭 在服务器上使用 GraphQL 代替 REST 是有很多好处的,使用 Apollo Client 取代自己编写的数据获取逻辑也有很多优势。在这篇文章中,我们主要讨论 GraphQL 最突出的架构优势。 本文最初发布于 khalilstemmler.com 网站,经原作者授权由 InfoQ 中文站翻译并分享。 在过去的几年中,我们已经看到各种规模和形态的公司都开始在整个组织中逐渐采用 GraphQL,例如 Expedia、Nerdwallet 和 A
深度学习与Python
2023/04/01
2.3K0
GraphQL最突出的架构优势是什么?
GraphQL
Fielding博士在2000年他的博士论文中提出来到现在已经有了20年的历史。它的简单易用性,可扩展性,伸缩性受到广大Web开发者的喜爱。
ruochen
2021/11/25
2.7K0
GraphQL与OpenAPI:数据治理的优缺点
一位财富 50 强公司的 CTO 评估了 OpenAPI 和 GraphQL API 标准的优缺点,以及它们与数据治理的相关性。
云云众生s
2024/08/13
2260
.NET与GraphQL的碰撞:新一代的数据交互与演示
GraphQL是一种为API设计的查询语言,与REST相比,它提供了更高效、强大和灵活的方法来与数据交互。GraphQL由Facebook于2012年开发,并于2015年开源。其主要的优势在于能够允许客户端精确地指定他们需要的数据,从而避免了过度获取或数据不足的问题。
Wesky
2024/10/21
1330
.NET与GraphQL的碰撞:新一代的数据交互与演示
安息吧 REST API,GraphQL 长存
即使与 REST API 打交道这么多年,当我第一次了解到 GraphQL 和它试图解决的问题时,我还是禁不住把本文的标题发在了 Twitter 上。
疯狂的技术宅
2019/03/27
2.9K0
安息吧 REST API,GraphQL 长存
GraphQL(一):GraphQL介绍
GraphQL是facebook开源的一套数据交互方案,它并非某种具体的语言或者框架,它只是提供了一套解决方案,这套解决方案通过GraphQL规范进行定义,不同语言可以有自己的GraphQL实现,目前已经有很多语言完成了GraphQL的实现,可以在这里查看。
辉哥
2021/11/24
1.4K0
GraphQL(一):GraphQL介绍
REST API和GraphQL API的比较
REST(表述性状态传输)API 是一种应用程序接口 (API) 的架构风格,它使用 HTTP 请求来访问和使用数据。该数据可用于GET、PUT、POST和DELETE数据类型,指的是对资源的读取、更新、创建和删除操作。 RESTful API 使用 HTTP 方法在处理数据时执行 CRUD(创建、读取、更新和删除)过程。 为了促进缓存、AB 测试、身份验证和其他过程,标头向客户端和服务器提供信息。 主体包含客户端想要传输到服务器的数据,例如请求的有效负载。
用户4235284
2023/10/14
7750
REST API和GraphQL API的比较
使用 GraphQL 的 6 个月
GraphQL 这个名词已经火了一段时间,但是一直没有体验过,无意中发现了一篇使用体验的文章,就想着翻译下分享给大家,如果翻译有问题的,还望批评指正。译文出自:掘金翻译计划[1]
出其东门
2020/05/14
1K0
Java一分钟之-GraphQL:查询语言与API设计
在现代Web开发中,GraphQL作为一种革命性的查询语言和API设计规范,正逐步改变我们构建和消费API的方式。它允许客户端精确请求所需的数据,从而减少了过载和冗余,提高了应用的性能和灵活性。本文将快速概述GraphQL的核心概念、Java开发者在实践中可能遇到的常见问题与易错点,并提供解决方案,辅以简洁的代码示例,助你在一分钟内掌握GraphQL的精髓。
Jimaks
2024/06/12
3080
相关推荐
REST API 和 GraphQL的比较
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档