GraphQL 的联合图(federated graphs)和子图(subgraphs)怎么理解?

GraphQL 的联合图(federated graphs)和子图(subgraphs)是在使用 Apollo Federation 时使用的概念。Apollo Federation 是一个用于构建分布式 GraphQL 实现的框架,可让你将多个独立的 GraphQL 服务合并成一个单一的、统一的 GraphQL API。

用 Apifox,节省研发团队的每一分钟

GraphQL 的联合图(federated graphs)和子图(subgraphs)怎么理解?

免费使用 Apifox

相关推荐

最新文章

API

一体化协作平台

API 设计

API 文档

API 调试

自动化测试

API Mock

API Hub

立即体验 Apifox
目录

GraphQL 的联合图(federated graphs)和子图(subgraphs)是在使用 Apollo Federation 时使用的概念。Apollo Federation 是一个用于构建分布式 GraphQL 实现的框架,可让你将多个独立的 GraphQL 服务合并成一个单一的、统一的 GraphQL API。

GraphQL 的联合图(federated graphs)和子图(subgraphs)怎么理解?


下面进一步解释这些概念:

子图(Subgraphs)

子图是指单独的 GraphQL 服务,每个包含其自身的部分 GraphQL schema。这些独立的子图代表 GraphQL API 的子集,通常会围绕特定的业务领域或服务功能来组织。例如,你可能有一个处理用户数据的“用户”子图,另一个处理产品数据的“产品”子图。

联合图(Federated Graphs)

联合图是指当你使用 Apollo Federation 将多个子图(GraphQL 服务)组合在一起时形成的总体 GraphQL API。联合图允许客户端就像它们在与单一 GraphQL 服务通信一样发送查询(query)和变更(mutation),即使这些操作实际上涉及到多个底层服务。

联合图(Federated Graphs)


在 Apollo Federation 中,有几个关键的部分帮助定义子图间的关系,并允许他们在联合图中协同工作:

  • 服务注册表(Service Registry): 这是一个中心配置系统,用于记录所有的子图及其 schema。
  • 网关(Gateway): 充当代理的角色,它接收来自客户端的 GraphQL 操作,然后根据需要将请求分发到相应的子图服务。
  • 联合指令(Directives): 例如 @key@extends@external, 等,这些指令用于在 schema 中声明实体的主键,扩展不同子图中的类型以及定义跨子图的引用。


例如,如果一个客户端想要获取有关特定产品的订单信息,它可以向网关发送一个查询,该查询会跨越“商品”和“订单”两个子图。网关会解析这个查询,将查询拆分,并将相应的请求发送到负责处理商品数据的子图和负责处理订单数据的子图。然后,这些子图将它们各自的响应返回给网关,网关会整合这些数据,并返回给客户端一个统一的响应。


这种方法使得不同团队可以独立开发和部署他们自己的服务,同时维持一个对客户端透明的统一 GraphQL API 接口。这大大提高了开发效率,降低了系统复杂性,并保持了服务的松耦合。

联合的好处是什么?

微服务架构

Apollo Federation 允许 API 团队在一个微服务架构中进行操作,同时向客户端公开一个统一的 GraphQL API。了解这些概念可以帮助你充分利用联合体(federation)。

保持客户端的简单性和性能

在与多个非联合的 GraphQL API 进行交互时,客户端可能需要执行多个请求。当采用 GraphQL 的组织有多个团队独立地开发 API 时,可能会发生这种情况。每个团队都设置一个 GraphQL API 来提供该团队使用的数据。例如,一个旅游应用程序可能为用户、航班和酒店提供单独的 GraphQL API:


通过一个联合图,你可以保持 GraphQL 相对于传统 REST API 的一个强大优势:能够在单个请求中获取所需的所有数据。


路由器智能地调用完成请求所需的所有 API,而不只是简单地转发请求。出于性能和安全的原因,客户端只能查询路由器,只有路由器才能查询组成 API,无需客户端配置。

大规模设计模式

一些将 GraphQL API 相结合的备选方法对你的架构施加了限制,比如添加命名空间或使用 ID 而不是类型来表示关系。使用这些方法,你的各个 GraphQL API 模式可能看起来没有变化,但客户端与之交互的联合架构会更加复杂。


随后,它要求你进行前端和后端更改。


使用 Apollo Federation,客户端可以与联合模式进行交互,就好像它是一个整体一样,你的 API 的使用者不应该知道或关心它是作为微服务实现的。

维护一个单独的 API

使用联合(federation),每个团队都直接为整体联合 GraphQL 模式做出贡献,每个团队可以独立工作,无需维护多个 API 层。这使你的平台团队能够专注于 API 的质量,而不是对其进行更新。

总结

Apollo Federation 使用子图和联合图来实现分布式 GraphQL 服务。子图是独立的 GraphQL 服务,而联合图是将多个子图组合在一起形成的总体 GraphQL API。联合图允许客户端查询多个子图就像它们是单一服务一样。这种方法提高了开发效率,降低了系统复杂性,并保持了服务的松耦合。

关于Apifox

  • 集成了 API 文档、API 调试、API Mock、API 自动化测试的 API 一体化协作平台
  • 拥有更先进的 API 设计/开发/测试工具
  • Apifox = Postman + Swagger + Mock + JMeter

点击这里,在线使用 Apifox

Apifox
Apifox

知识扩展: