1.GraphQL的兴起当今构建API的最佳方式是什么?您可能会想到REST,但如果您打算投资构建新软件,则可能值得考虑几个不同的选项,并从中选择最好的。GraphQL作为RESTAPI架构的替代品脱颖而出,主要(但不完全)是因为它通过设计提供了一个可发现的API。它还带有自己的查询语言和运行时,用于通过称为“解析器”的函数执行查询。GraphQL最初由Facebook于2012年开发,作为针对动力不足的移动设备的更好的数据检索解决方案,并于2015年开源。2018年,它被转移到Linux基金会的管理中,该基金会维护着其他重要项目,例如Node.js、Kubernetes,当然还有Linux本身。通常鼓励那些希望采用GraphQL的人。例如,从StackOverflowTrends可以看出,它的受欢迎程度在最近几年迅速上升。在PayPal、Netflix和Coursera等知名公司也有一些成功案例,GraphQL在大型复杂架构中构建灵活、高性能的API方面发挥了重要作用。然而,考虑到我们今天生活的动态技术环境,您的怀疑是可以原谅的。GraphQL会成为另一种时尚吗?如果它适用于这些公司,它是否也适用于您?让我们讨论一下GraphQL的好处和挑战,以便您做出明智的决定。2.使用GraphQL的原因作为一种为灵活性而设计的API技术,GraphQL是API的开发者和消费者以及他们背后的组织的强大推动者。在本节中,我们将探索GraphQL的一些关键领域。(1)OneDataGraphforAll对于拥有多个团队和系统并希望通过统一的API轻松获取数据的组织来说,GraphQL是一个绝佳的选择。无论您使用多少数据库、服务、遗留系统和第三方API,GraphQL通过提供客户端可以与之通信的单一端点来隐藏这种复杂性。GraphQL服务器负责从正确的位置获取数据,客户端永远不需要知道不同数据来自何处的详细信息。因此,GraphQL生态系统在轻松为客户和内部用户提供数据方面提供了最大的灵活性。(2)不会过度获取或获取不足GraphQLAPI客户端的另一个巨大好处是他们可以准确地请求他们需要的数据,即使是跨相关实体。这一点尤其重要,因为不同的客户有不同的数据需求,或者因为不同的业务逻辑,或者因为他们只是呈现不同的数据视图(例如,Web与移动设备),并且还可能有不同的硬件限制。相比之下,从RESTAPI中有效地检索重要数据要困难得多。从单个端点请求数据往往会返回比实际需要更多的数据(过度获取),而为多个相关实体请求数据通常需要多次API调用(获取不足)或特定客户端请求的专用端点(重复工作)。GraphQL通过准确地提供每个客户端请求的数据来解决这个问题,仅此而已。(3)更好的开发者体验GraphQL生态系统附带了许多工具,使使用GraphQL变得轻而易举。GraphiQL和GraphQLPlayground等工具提供了丰富的体验,允许开发人员以最小的努力检查和试用API,这要归功于我们将在下一节中讨论的自我记录功能。此外,可以使用GraphQLCodeGenerator等代码生成工具进一步加快开发速度,同时可以使用其他工具和最佳实践来解决特定问题,包括:在多个客户端库使用中开箱即用地提供了客户端缓存。基于游标的分页提供了一种跨数据列表分页的方法。DataLoader通过批处理数据获取请求提高性能,还提供基本级别的服务器端缓存。(4)更高质量的系统GraphQLAPI是围绕类型系统构建的,它列出了每个字段的名称和类型,以及不同实体之间的关系。这种类型的系统或架构用于验证客户端发送的查询。可以通过称为内省的功能查询模式。Introspection通常用于生成文档和代码,这些文档和代码将在客户端集成API时使用。因此,在使用GraphQL时,您可以轻松获得文档完善的API。这为首次使用API的开发人员提供了极大的透明度,使开发更加顺畅和高效。(5)为变革而建。RESTAPI提供同一API的多个版本是很常见的,这样就可以在不破坏现有功能的情况下进行更改。GraphQL鼓励另一种API修改方法:进化。当需要进行重大更改时(例如,重命名字段或更改其类型时),您可以引入一个新字段并丢弃旧字段,可能在以后确定不再使用它时将其删除。这意味着您仍然可以更改API,同时保持向后兼容性和单一API。3.采用GraphQL前的考虑GraphQL是构建可扩展和灵活的API的优秀工具,但它不是万能的,当然也不是适合所有人。(1)学习曲线REST是构建API的一种简单而熟悉的方法,而GraphQL则完全不同。开发人员和基础设施工程师都需要学习如何有效地开发和部署GraphQLAPI,这是一项需要适应的任务。因此,时间紧迫的团队可能更适合使用他们已经熟悉的技术。(2)基础设施和工具部署GraphQL,尤其是大规模部署,可能需要对基础设施和工具进行大量投资。使用它并不能使您免于在大型环境中部署虚拟机或容器、设置网络基础设施以及部署和维护GraphQL服务器软件。(3)性能和安全性您还必须格外小心,以确保GraphQL提供的额外灵活性不会导致查询减慢速度或恶意或意外关闭您的系统。这可以通过限制或限制查询复杂性和深度来解决。最后,保护不应公开的数据始终很重要。其他网络技术中流行的身份验证和授权机制也可以使用GraphQL。另外,要小心内省,因为如果保护不当,它可能会泄漏内部类型。总结毫无疑问,REST可以完成这项工作,但如果您正处于需要更好的方式来构建API并服务于不同客户端的阶段,那么您或许应该尝试一下GraphQL。GraphQL允许您构建可演化和可查询的API,隐藏用于检索各种数据的内部系统的复杂性,并利用类型系统,从而生成自动和最新的API文档。这些特性及其工具和生态系统使GraphQL成为API和客户端开发人员的高效工具。虽然GraphQL确实需要一些投资,但当数据和服务量很大时,它的优势远远超过现有和未来API客户端的访问。
