GraphQL在标准REST API技术上获得发展的原因。
正如我之前所写, GraphQL是下一代API技术,它正在改变客户端应用程序与后端系统的通信方式以及后端系统的设计方式。
由于从创建它的组织Facebook开始获得支持,并得到其他技术巨头(如Github,Twitter和AirBnB)的支持,因此GraphQL作为应用程序系统的关键技术的地位似乎是可靠的; 无论现在还是将来。
移动应用程序性能和组织敏捷性重要性的提高为GraphQL登上现代企业体系结构的顶端提供了帮助。
鉴于REST是一种非常流行的体系结构样式,它已经允许进行数据交互的机制,与REST相比,这项新技术具有哪些优势?GraphQL中的“QL”代表查询语言,这是一个很好的起点。
借助GraphQL,组织内的不同客户端应用程序可以轻松地仅查询所需的数据,从而取代了其它REST方法,并提高了实际应用程序的性能。使用传统的RESTAPI端点,客户端应用程序可以查询服务器资源,并接收包含与请求匹配的所有数据的响应。如果来自RESTAPI端点的成功响应返回35个字段,则客户端应用程序将接收35个字段
传统上,REST API无法为客户端应用程序提供唯一的方法来仅检索或更新他们关心的数据。通常将其描述为“过度获取”问题。随着移动应用在人们的日常生活中的普遍使用,过度获取问题产生了现实世界的不良影响。移动应用程序需要发出的每个请求,它必须发送和接收的每个字节,对最终用户的性能造成的负面影响越来越大。数据连接速度较慢的用户尤其会受到次优API设计选择的影响。使用移动应用程序时性能较差的客户更有可能不购买产品和使用服务。低效的API设计会让公司损失金钱。
并非只有“过度获取”,相应的,“欠获取”也是存在的。缺省情况下,只返回客户端实际需要的部分数据的端点需要客户端进行额外的调用以满足其数据需求——这需要额外的HTTP请求。由于过度获取和过度获取问题及其对客户机应用程序性能的影响,一种有助于高效获取的API技术有可能在市场上引起轰动——而GraphQL大胆地跳入并填补了这一空白。
REST API设计人员不愿无休止地失败,他们尝试通过以下几种方式来解决移动应用程序性能问题:
虽然这些模式是REST API社区为解决移动客户端所面临的挑战而做出的尝试,但它们在一些关键方面没有实现,即:包含和排除查询键/值对很快变得混乱,特别是对于需要嵌套点表示法语法(或类似语法)以将数据包含和排除为目标的更深的对象图而言。此外,在此模型中调试查询字符串的问题通常需要手动分解URL。
对于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具有引人注目的优势,但GraphQL仍然面临着实施挑战。一些示例包括:
围绕REST API的缓存机制更加成熟。
用于使用REST构建API的模式已经非常完善。
尽管工程师可能更喜欢GraphQL等新技术,但与GraphQL相比,市场上基于REST构建解决方案的人才更广泛。
通过同时提高性能和组织敏捷性,GraphQL在公司中的采用在过去几年中猛增。但是,与RESTful API设计生态系统相比,它确实有一些成熟的工作。
Graphql最大的好处之一是它不是被设计为替代API解决方案的批发替代品。相反,可以实现GraphQL来补充或增强现有的API。因此,我们鼓励企业逐步采用GraphQL,因为它对应用程序性能和组织敏捷性有最大的积极影响。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。