问题:一个客户需要从多个服务中获取数据以实施它所期望的场景。
更简单的解决方法: 客户端分别调用每个服务,并处理每个服务的响应。
你可以在这里找到 Apollo GraphQL 联邦的文档: https://www.apollographql.com/docs/federation/
更好的解决办法: 使用API组合模式(API Composition Pattern)。问题:
客户端需要了解不同的后端服务及其调用方式(导致客户端与后端服务耦合在一起)。
因为多次网络调用导致获取数据时的延迟较高。
之后客户端需要聚合数据并渲染出来。如果API失败响应,客户端还需要处理异常情况。
API组合指的是将多个API结合起来,创建一个单体API。这可以实现以下目标:
- 所有数据和服务都可以通过一个查询访问
- 一个集中管理所有可用数据的目录,所有最终用户都可以查看
- 中央管理API(例如,统一的访问控制策略变得可行)
API 组合模式来聚合来自不同服务的数据
好处- 可发现性:将所有功能放在一个API中,使得很容易查看已开发的功能及其所有者。
- 一致性:单一且受管理的API将确保对象的一致性,能够无缝地在功能之间共享。
- 对客户端的灵活性:使用API解耦了数据生产者和消费者;这种设计允许在不破坏客户端的情况下进行更新。联合和一致的治理使得生产者可以专注于自己的数据而无需担心其他数据生产者。
- 高效且集中的协调:这种方法中,中心组件协调多个API之间的交互。它作为中间件,接收客户端请求,向相关API发出请求,并在将响应返回给客户端之前进行聚合或转换。
- 快速开发:开发者可以快速构建新应用程序,通过利用现有的API,而不是从零开始编写代码。
- 促进重用:通过将功能抽象为API,组织可以在多个应用程序中重用这些功能,减少冗余并促进一致性。
- 统一接口:这使得为客户端提供一个统一的接口成为可能。无论底层使用的是哪些API,客户端都可以以一致的方式与组合的API进行交互。
- 充当中间件层:在联邦架构中,通常会有一个中间件层。这一层处理身份验证、请求路由、数据转换、错误处理等横向关注点。
- 动态联邦:在某些情况下,API的组合可能是动态的,这意味着联邦逻辑会根据运行时条件或客户端请求需要进行调整。这可能涉及根据可用性、性能或用户偏好选择不同的API。
说到 GraphQL 的组成结构,它提供了一些独特的好处:
单一端点: 通过 GraphQL,客户端即可通过一个端点与多个数据源互动。这简化了集成流程,减少了从不同 API 获取数据所需的网络请求,从而提高效率。
https://www.apollographql.com/docs/federation/
模式拼接:GraphQL 允许合并多个 GraphQL 模式为单一的、统一的模式的方法。
- 为了构建超级图模式,Apollo 使用一个名为 管理型 federation 的功能。使用管理型 federation 时,每个子图都会将其模式发布到 Apollo。每当子图模式发生变化时,Apollo 会尝试生成一个新的超级图模式。
https://www.apollographql.com/docs/federation/quickstart/studio-composition
- 这允许开发人员无缝地整合来自不同API或服务的schema,使客户端能像查询单一API那样从多个来源获取数据,仿佛它们属于同一个API。
https://www.apollographql.com/docs/federation/federated-types/composition/(Apollo GraphQL 的联邦类型组合文档)
自定义解析器: 解析器是一个负责为模式中单个字段填充数据的函数。
— 在构建 GraphQL API 的过程中,开发人员可以实现自定义解析器从各种数据源(如数据库、微服务或第三方 API)获取数据。这种灵活性使得可以从不同来源聚合数据,并将其整合到单一的 GraphQL 响应中。
模式委派: 模式委派的核心思想是将特定解析器的调用委派给另一个解析器。
— 在这种情况下,查询的某些部分会被转发给其他 GraphQL API。这使开发人员能够将数据获取的责任分配给多个服务,每个服务负责处理整体数据需求中的特定部分。
https://www.apollographql.com/docs/federation/
设想一下一个社交媒体应用,它从一个 GraphQL API 获取用户资料,获取帖子和评论,并通过第三方服务进行用户登录验证。
- 通过构建这些GraphQL API,应用程序可以为用户提供一个统一的体验,使他们能够查看个人档案、浏览帖子和留下评论,并通过单个GraphQL端点进行认证。
- 在这种情况下,应用程序使用模式拼合将用户个人档案API、帖子和评论API以及认证API的模式合并为一个单一的模式。
- 然后实现自定义解析程序以根据需要从每个来源获取数据,确保应用程序可以根据用户的GraphQL查询检索并显示相关信息。
共同学习,写下你的评论
评论加载中...
作者其他优质文章