Skip to content

GraphQL - 应用组成部分

典型的 GraphQL 应用在服务器端和客户端都包含几个协同工作的关键组成部分。理解这些组成部分对于构建和维护基于 GraphQL 的系统至关重要。

服务器端负责定义 API 的能力并满足客户端请求。

组成部分描述
GraphQL Server Library提供用于解析查询、根据 Schema (模式) 进行验证以及协调 Resolver (解析器) 执行的核心引擎。流行的选择包括 Apollo Server (JavaScript/Node.js)、Hot Chocolate (.NET)、Ariadne/Graphene (Python)、graphql-java (Java)。
Schema Definition你的 API 的蓝图,通常使用 GraphQL Schema Definition Language (SDL,模式定义语言) 编写(例如,在 .graphql 文件中或代码中的字符串)。它定义了客户端可用的 Types (类型)、Fields (字段)、Queries (查询)、Mutations (变更) 和 Subscriptions (订阅)。这是客户端和服务器之间的契约。
Resolvers函数的集合,每个函数负责为 Schema 中的特定 Field (字段) 获取数据。Resolvers (解析器) 是 GraphQL Schema 和实际 Data Sources (数据源)(数据库、API 等)之间的桥梁。它们包含用于检索或修改数据的业务逻辑。
Data Sources数据实际所在的后端。这可以是 SQL 数据库、NoSQL 数据库、REST API、其他 GraphQL 服务、gRPC 服务、平面文件,或它们的任意组合。Resolvers (解析器) 与这些数据源交互。
Web Server Framework (Optional but common)GraphQL 服务器库通常集成到标准的 Web 服务器框架中,例如 Express、Koa、Hapi (Node.js)、ASP.NET Core (.NET)、Django/Flask (Python),用于处理 HTTP 请求、路由、Middleware (中间件,如身份验证、日志记录) 等。
Context为每个传入请求创建并传递给该请求的所有 Resolvers (解析器) 的对象。它用于共享请求特定的信息,如身份验证详情(例如,已登录用户)、用于 Batching (批量处理)/Caching (缓存) 的 Data Loaders (数据加载器),或数据库连接。

客户端负责向服务器发送请求,并在用户界面中管理接收到的数据。

组成部分描述
GraphQL Client Library简化与 GraphQL API 的交互。处理构建请求、发送请求(通常通过 HTTP)、缓存响应以及将数据与 UI 框架集成。Apollo Client (JavaScript - React, Angular, Vue 等) 是最流行的。其他包括 Relay (React, 来自 Meta)、urql (JavaScript) 以及用于原生平台 (iOS/Android) 的库。
GraphQL Queries/Mutations字符串(通常使用模板字面量如 gql 定义),指定客户端需要的确切数据或想要执行的修改。这些通常在 HTTP POST 请求的主体中发送。
UI Framework/Library用于构建 User Interface (UI,用户界面) 的前端技术(例如,React、Vue、Angular、Svelte、原生 iOS/Android SDK)。GraphQL 客户端库与此框架集成以显示数据并触发更新。
Caching Mechanism大多数 GraphQL 客户端库(如 Apollo Client 的 InMemoryCache)的关键部分。它在本地存储先前获取的数据,通常以规范化结构存储,允许客户端从 Cache (缓存) 提供数据,而不是发出冗余的网络请求。
Developer Tools用于检查 GraphQL 请求/响应、探索 Schema (模式)、测试 Queries (查询)/Mutations (变更) 以及调试 Cache (缓存) 的浏览器扩展(如 Apollo Client DevTools)或独立工具(如 Apollo Sandbox、GraphiQL、Insomnia、Postman)。

典型的交互流程如下:

  1. 客户端应用(使用 UI 框架和 GraphQL 客户端库)需要数据来渲染组件。
  2. 它定义一个 GraphQL Query (查询),指定所需的 Fields (字段)。
  3. GraphQL 客户端库 将此查询(通常通过 HTTP POST)发送到 GraphQL Server Endpoint (服务器端点)。
  4. Web Server Framework (Web 服务器框架) 接收请求并将其传递给 GraphQL Server Library (GraphQL 服务器库)。
  5. GraphQL Server Library 解析查询并根据 Schema Definition (Schema 定义) 进行验证。
  6. 对于查询中的每个 Field (字段),服务器执行相应的 Resolver (解析器) 函数,并传递 Context (上下文) 对象。
  7. Resolvers (解析器) 与 Data Sources (数据源)(数据库、API)交互以获取或修改数据。
  8. 服务器将来自 Resolvers (解析器) 的结果组装成与查询结构匹配的 JSON 响应。
  9. 客户端库 接收响应。
  10. 它用新数据更新其 Cache (缓存)。
  11. 它将数据提供给 UI Component (UI 组件),后者重新渲染以显示信息。