GraphQL 整体架构与应用程序组件
GraphQL 是描述 GraphQL 服务器行为的规范。它是一组关于如何处理请求和响应的标准,如支持的协议、服务器可以接受的数据格式、服务器返回的响应格式等。 客户端向 GraphQL 发出的请求服务器称为查询。GraphQL 的另一个重要概念是其传输层不可知性。它可以与任何可用的网络协议一起使用,如 TCP、websocket 或任何其他传输层协议。它对数据库也是中立的,因此您可以将它与关系数据库或 NoSQL
数据库一起使用。
GraphQL Server 架构
可以使用下面列出的三种方法中的任何一种来部署 GraphQL Server
- 带有连接数据库的 GraphQL 服务器
- 集成现有系统的 GraphQL 服务器
- 混合方法
具有连接数据库的 GraphQL 服务器
这种架构有一个带有集成数据库的 GraphQL 服务器,通常可以用于新项目。收到查询后,服务器读取请求有效负载并从数据库中获取数据。这称为解析查询。返回给客户端的响应遵循官方 GraphQL 规范中指定的格式。
在上图中,GraphQL 服务器和数据库集成在一个节点上。客户端通过 HTTP 与 GraphQL 服务器通信。服务器处理请求,从数据库中获取数据并将其返回给客户端。
GraphQL Server 集成现有系统
这种方法对于拥有遗留基础设施和不同 API 的公司很有帮助。GraphQL 可用于统一现有系统中的微服务、遗留基础设施和第三方 API。
在上图中,GraphQL API 充当客户端和现有系统之间的接口。客户端应用程序与 GraphQL 服务器通信,后者反过来解析查询。
二者混合
最后,我们可以将以上两种方式结合起来,搭建一个 GraphQL 服务器。在这种架构中,GraphQL 服务器将解析收到的任何请求。它将从连接的数据库或集成的 API 中检索数据。这如下图所示
GraphQL 组件
上面我们大概介绍了GraphQL基本的架构模式,接下来我们看 GraphQL 组件以及它们相互通信的方式。整个应用程序组件可以区分如下
- 服务器端组件
- 客户端组件
服务器端组件
GraphQL 服务器构成了服务器端的核心组件,并允许解析来自 GraphQL 客户端应用程序的查询。Apollo Server 是最常用的 GraphQL 规范实现。其他服务器编程组件包括以下内容
序号 | 组件 | 描述 |
---|---|---|
1 | Schema | GraphQL Schema 是任何 GraphQL 服务器实现的中心,它描述了连接到它的客户端可用的功能。 |
2 | Query | GraphQL Query 是从数据库或遗留 API 检索数据的客户端应用程序请求。 |
3 | Resolver | Resolver 提供了将 GraphQL 操作转换为数据的指令。他们通过定义解析器函数将查询解析为数据。 |
客户端组件
下面给出的是客户端组件
序号 | 组件 | 描述 |
---|---|---|
1 | GraphiQL | 基于浏览器的界面,用于编辑和测试 GraphQL 查询。 |
2 | ApolloClient | 构建 GraphQL 客户端应用程序的最佳工具。与所有 javascript 前端集成良好。 |
下图显示了客户端-服务器架构。Web 服务器建立在 NodeJs 和 Express 框架之上。ReactJS 应用程序(使用 Apollo 客户端库构建)或 GraphiQL 浏览器应用程序向 Apollo GraphQL 服务器发出请求。查询将根据服务器中定义的模式进行解析和验证。如果请求模式通过验证,则将执行关联的解析器函数。解析器将包含从 API 或数据库获取数据的代码。