GraphQL 最突出的架构优势是什么?

在服务器上使用 GraphQL 代替 REST 是有很多好处的,使用 Apollo Client 取代自己编写的数据获取逻辑也有很多优势。在这篇文章中,我们主要讨论 GraphQL 最突出的架构优势。

 

本文最初发布于 khalilstemmler.com 网站,经原作者授权由 InfoQ 中文站翻译并分享。

 

在过去的几年中,我们已经看到各种规模和形态的公司都开始在整个组织中逐渐采用 GraphQL,例如 Expedia、Nerdwallet 和 Airbnb。在本文中,我们将讨论在未来或现有的项目中使用 GraphQL 都将享受哪些架构优势。

六边形架构

 

Alistair Cockburn 在“六边形架构”中提到,我们架构的最内层是应用程序和域层。在这一层的外面是适配器(或端口)。

 

可以将端口视为“将外部世界连接到内部世界的一种方式”。外部世界有很多技术,我们可以在其之上构建应用程序。在外部,你能找到数据库、外部 API、云服务和种种内容。如果我们采用依赖倒置方法,就可以定义一些端口来将它们安全地包含在我们的应用程序中。端口是抽象、合约。它们通常以 接口 或 抽象类 的形式出现。

我非常赞同这种类型的架构,因为它使我们能够:

 

  • 直到真正有必要做出决策时,才决定到底采用哪种类型的 Web 服务器、数据库、事务电子邮件提供商或缓存技术。在开发工作早期,我们完全可以使用一个端口的内存内实现。

  • 通过依赖注入方法,这种架构还会让开发人员优先编写可以测试的代码。这样我们就可以尽可能地减少可能导致代码不可测试的具体依赖项。

  • 最后,它将我们的关注点转向了应用程序和特定于域的内容。这些内容是不能直接从市场购买或下载的。

基础架构组件

 

GraphQL 服务器和 HTTP 服务器都属于基础架构组件。

 

基础架构组件:构成 Web 应用程序基础的基本组件。根据整洁(或六边形)架构的思想,数据库、Web 服务器和缓存都是外层基础架构组件。

 

我们之所以将基础设施组件称为基础设施,是因为 我们会在它们的基础上构建应用程序。在这一基础(即框架)内,我们编写丰富的、领域特定的应用程序。基础设施只是驱动程序而已。

 

基础架构组件的另一个主要特征是,它们不是我们项目开发工作的重心。

 

基础架构组件是业界信任的一系列工具,我们只需对其配置即可使其正常工作。

 

GraphQL API 的配置工作包括:

 

  • 安装 GraphQL

  • 公开一个服务器端点

  • 设计一个模式(schema)

  • 将解析器连接到数据源

 

这是我们需要做的工作,但不是我们项目的工作重心。

 

如果某项基础架构技术受到业界的信任,我们就可以选择用这种工具来完成任务,而不是开发自己的基础架构组件,这样就可以加快我们的开发速度。

 

考虑数据库。它们也是基础设施。

 

例如,Postgres 数据库是我们可以用于新项目的几个数据库选项之一。想象一下,如果你试图说服你们的团队,你们的项目应该从头开始编写自己的数据库,其他人会有多么大的反对声。

 

如果有人说团队应该从头开始研发一种持久性存储技术,大家肯定会觉得这样的场面看起来很愚蠢;但选择你的 Web 应用程序 API 样式(传输 / 客户端 - 服务器技术)其实也是一样的道理。

 

去年(2019 年),我意识到 API 在技术栈中的深度已经超出了我们的想象。API 的触角伸到了前端框架的数据存储,也伸到了后端服务的合约层面。

 

这听起来可能有点虚幻,但它的确就是那样。在 Apollo GraphQL,我们将这种虚拟层称为数据图。并且 Apollo 构建了很多可提高开发人员生产效率的工具。

 

总结

 

  • 在现代 Web 应用程序架构中,GraphQL 和 RESTfulWeb 服务器都是基础架构组件。

  • 基础架构组件是基本组件,它们构成了我们编写的特定领域 Web 应用程序的基础。

  • 基础架构组件并不是大多数 Web 开发项目的重心,因此我们应该将大部分时间用于应用程序和域层代码。

  • 数据图是一个声明性的、自文档化的、组织层面的 GraphQL API,它使远程状态更接近客户端,可以使用 Apollo Federation 来扩展。

  • 前端开发人员可以使用数据图来创建自己的数据获取用例,而不必依赖后端开发人员。

  • GraphQL 消除了管理 API 版本的需要,Apollo 的 GraphManager 可以简化生产模式验证。

参考链接:

https://khalilstemmler.com/articles/graphql/graphql-architectural-advantages/

https://www.infoq.cn/article/rHHYOOBcgkQUeIvAW9Mm

另外可以看:https://mp.weixin.qq.com/s?__biz=MzUzMTA2NTU2Ng==&mid=2247506844&idx=1&sn=a707818dec0e756273daf3dd2586922c&chksm=fa4aa42dcd3d2d3b83f9f02ea8834f328d8ce861f01b34d0f969bf1f32bc5250a2b835b3e1d7&scene=27#wechat_redirect

原文地址:https://www.cnblogs.com/parkdifferent/p/14618500.html