GraphQL - 架构
GraphQL - 架构
Section titled “GraphQL - 架构”GraphQL 本身是一个规范,而非特定的软件实现。它定义了一个 API 通信的标准,侧重于客户端应如何请求数据以及服务器应如何响应。核心架构概念包括:
- Schema Definition Language (SDL): 一种人类可读的方式来定义 API 的能力,包括数据类型、查询(queries)、变体(mutations)和订阅(subscriptions)。
- 查询语言: 客户端用于请求特定数据的语法,其结构与期望的响应形状一致。
- 服务器端执行: GraphQL 服务器解析接收到的查询,根据 Schema 验证它们,从各种来源(数据库、微服务、第三方 API)获取数据,并根据查询构建响应。
- 传输层无关: GraphQL 通常使用 HTTP(特别是 POST 请求),但规范不强制要求特定的网络协议。它可以通过 WebSockets(用于订阅)、TCP 或其他协议工作。
- 数据库无关: GraphQL 服务器可以从任何类型的后端获取数据:SQL 数据库、NoSQL 数据库、REST API、其他 GraphQL API,甚至是静态数据。
GraphQL 服务器可以通过多种方式实现,通常属于以下架构模式之一:
1. 连接数据库的 GraphQL 服务器
Section titled “1. 连接数据库的 GraphQL 服务器”这是一种常见的模式,特别适用于新项目或直接在主要数据源之上构建 GraphQL API 的情况。GraphQL 服务器接收查询,解析它,其解析器(resolver)函数直接与数据库(例如 PostgreSQL、MongoDB)交互以获取或修改数据。
描述: 客户端(Web/移动应用)通过 HTTP 向 GraphQL 服务器发送 GraphQL 查询。服务器的解析器执行数据库操作(例如 SQL 查询、ORM 调用)来满足请求。然后,服务器将从数据库检索的数据整理成客户端查询所请求的 JSON 格式并发送响应。
用例: 新项目(Greenfield projects),GraphQL 作为主要的 API 层直接与数据库交互的应用。
2. GraphQL 服务器作为集成层(API Gateway)
Section titled “2. GraphQL 服务器作为集成层(API Gateway)”对于拥有现有基础设施(如微服务、遗留系统或多个第三方 API)的组织来说,这种方法非常宝贵。GraphQL 服务器充当统一接口或 API 网关,对客户端隐藏底层系统的复杂性。
描述: 客户端向 GraphQL 服务器发送 GraphQL 查询。服务器的解析器不是直接与数据库对话,而是向其他下游服务(例如 REST API、gRPC 服务、其他 GraphQL API)发出请求。它聚合来自这些服务的响应,根据需要转换它们,并为客户端构建最终的 GraphQL 响应。
用例: 统一访问多个微服务的数据,为遗留系统提供现代 API 层,简化前端应用从不同来源获取数据的过程。
3. 混合方法
Section titled “3. 混合方法”通常,会结合使用上述两种模式。GraphQL 服务器可能直接访问主数据库以处理部分数据图,同时集成其他内部或外部服务以处理其他部分。
描述: 当 GraphQL 服务器接收到查询时,它确定每个请求字段的数据源。一些解析器可能直接查询连接的数据库,而另一些可能从外部 API 或微服务获取数据。服务器结合来自所有相关来源的数据来构建最终响应。
用例: 既有专用数据库又需要集成其他服务的复杂应用,在新功能使用直接数据库连接而旧功能依赖现有 API 的演进系统。
GraphQL 提供了一个灵活的抽象层。无论数据在后端如何存储或获取,客户端都与一个单一、定义清晰的 GraphQL 接口和 Schema 进行交互。这种解耦是一个主要的架构优势。