首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在GraphQL服务器中连接两个REST数据源?

在GraphQL服务器中连接两个REST数据源通常涉及到数据获取、转换和合并的过程。以下是实现这一目标的基本步骤和相关概念:

基础概念

  1. GraphQL: 一种用于API的查询语言,允许客户端请求所需的数据结构。
  2. REST API: 一种基于HTTP协议的网络应用程序接口设计风格,用于构建分布式系统。
  3. 数据连接器: 用于从不同的数据源获取数据并将其整合到GraphQL服务器中的工具或库。

相关优势

  • 灵活性: GraphQL允许客户端精确地请求所需的数据,减少不必要的数据传输。
  • 效率: 通过一次请求获取多个数据源的数据,减少网络延迟。
  • 维护性: 数据源的变更不会直接影响GraphQL接口,只需调整数据连接器即可。

类型

  • 数据获取器(Data Fetchers): 负责从REST API获取数据的函数。
  • 数据转换器(Data Transformers): 将获取的数据转换为GraphQL所需的格式。
  • 数据合并器(Data Merger): 将来自不同数据源的数据合并为一个统一的响应。

应用场景

  • 当你需要从多个外部服务获取数据并整合到一个GraphQL接口中时。
  • 当你需要提供一个统一的API接口,但数据分布在多个REST服务中时。

实现步骤

  1. 定义GraphQL Schema: 定义GraphQL的类型和查询,描述客户端可以请求的数据结构。
  2. 创建数据获取器: 编写函数从REST API获取数据。
  3. 创建数据转换器: 将获取的REST数据转换为GraphQL所需的格式。
  4. 创建数据合并器: 将转换后的数据合并为一个响应。
  5. 集成到GraphQL服务器: 将数据获取器、转换器和合并器集成到GraphQL的解析器中。

示例代码

以下是一个简单的示例,展示如何在Node.js中使用apollo-serveraxios来实现这一过程。

代码语言:txt
复制
const { ApolloServer, gql } = require('apollo-server');
const axios = require('axios');

// 定义GraphQL Schema
const typeDefs = gql`
  type Query {
    combinedData: CombinedDataType
  }

  type CombinedDataType {
    data1: Data1Type
    data2: Data2Type
  }

  type Data1Type {
    id: ID
    name: String
  }

  type Data2Type {
    id: ID
    value: Int
  }
`;

// 创建数据获取器
async function fetchData1() {
  const response = await axios.get('https://api.example.com/data1');
  return response.data;
}

async function fetchData2() {
  const response = await axios.get('https://api.example.com/data2');
  return response.data;
}

// 创建数据合并器
async function getCombinedData() {
  const data1 = await fetchData1();
  const data2 = await fetchData2();
  return { data1, data2 };
}

// 创建解析器
const resolvers = {
  Query: {
    combinedData: async () => {
      return getCombinedData();
    },
  },
};

// 创建Apollo Server实例
const server = new ApolloServer({ typeDefs, resolvers });

// 启动服务器
server.listen().then(({ url }) => {
  console.log(`🚀 Server ready at ${url}`);
});

参考链接

通过上述步骤和示例代码,你可以在GraphQL服务器中连接两个REST数据源,并提供一个统一的查询接口。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用 GraphQL 和 Ballerina 操作多个数据源

GraphQL 是一种抽象了底层数据源的规范,借助 GraphQL,开发人员能够灵活地使用他们喜欢的编程语言处理数据源,如数据库或 REST API。...GraphQL 是什么 GraphQL 是一种应用层服务器端技术,由 Facebook 于 2012 年开始开发,并于 2015 年公开发布,用于优化 REST API 调用。...GraphQL 是更好的 REST 在过去的十年REST 已经成为一种流行的 API 设计架构。...在下一节,我们将探讨这些特性如何帮助你开发 GraphQL 应用程序。 一个书店示例 GraphQL 服务器数据源可以是任何东西,如数据库、另一个 API 或提供数据的服务等。...在我们的示例,我们实现了一个书店的 GraphQL 应用场景,结合了多个后端数据源,包括 MySQL 数据库和 Google Books API。

2.4K20
  • Coursera 的 GraphQL 之旅

    在生产环境应用 GraphQL 封装 REST API 的过程很简单——我们构建了一些实用程序来执行下游的 REST 请求,从而在解析器获取数据,并制定了一些关于如何将现有模型转换为 GraphQL...首先,我们构建了少量的 GraphQL 解析器,然后在生产环境启动一个 GraphQL 服务器,以调用下游 REST 接口请求我们的资源。...自动化处理 所以我们从头开始,试图找到一个更精确的方案来实现单一数据源——我们将 REST API 视为数据源是有依据的,因为我们的 GraphQL 的 schema 是基于它们构建的。...接下来,我们利用之前解析器的大部分逻辑,简单地定义了 GraphQL 查询和 REST 请求之间的转换,并且能够生成一个功能完善的 GraphQL 服务器,时间不超过五分钟。...关联资源 我们采用 GraphQL 的主要原因之一就是希望能在单次服务器往返获取我们的页面需要的所有数据。

    1.2K40

    怎样使用 apollo-link-state 管理本地数据

    此外,GraphQL 有能力将对多个数据源的请求集成在单次查询,在此我们将充分利用这个特性。 . 以上是 Apollo Client 的数据流架构图。...GraphQL 并不在乎请求是要发送给一个 gRPC 服务器,或是 REST 端点,又或是客户端缓存。GraphQL 是一门针对数据的通用语言,与数据的来源毫无关联。...GraphQL 最大的一个优势在于,当给 GraphQL 语句中的字段加上合适的 GraphQL 指令后,单条 query 就可以从多个数据源获取数据,无论本地还是远端。让我们来看看具体的方法。...GraphQL 的一个很让人激动的功能是在单个 query 向多个数据源请求数据。...在下面的例子,我们在同一条 query 内查询了 GraphQL 服务器存储的 user 数据以及 Apollo cache 的 visibilityFilter 数据。 .

    2.4K100

    【API架构】REST API 行业辩论:OData vs GraphQL vs ORDS

    对比标准 API 图 1 对比图 1 的标准 API 的标准是基于实现与多个数据源的互操作性。关于这种比较需要注意的一点是规范的成熟度。...这是 GraphQL 的优势之一,我稍后会介绍。 图 2 在图 2 ,我们完成了对要考虑的其他标准的初步分析,并将在以后的文章扩展这些领域。...例子 为了直观地说明使用这些 API 的差异,以下两个代码示例展示了如何在 GraphQL 和 OData 执行“排序依据”。...您执行 POST,准确定义要包含在响应的字段和函数。 因此,尽管 GraphQL 使您能够从元数据确定哪些字段和函数可用,但您仍然不知道它们在语义上的含义。...如果您想了解如何嵌入我们的混合技术以使用 OData 通过 REST 公开数据,请立即与我们的一位数据连接专家交谈。

    2.1K30

    使用ASP.NET Core开发GraphQL服务器 -- 预备知识(上)

    为了介绍使用ASP.NET Core构建GraphQL服务器,本文需要介绍一下GraphQL,其实看官网的文档就行。 什么是GraphQL?...客户端定制查询:GraphQL服务器提供了可以让客户端进行定制查询的能力。 内省(introspective):客户端可以查询GraphQL服务器的类型系(schema)。...这个单端点就像API网关一样组织了多个数据源,这样就会更简单。...综上,使用GraphQL的好处是: 避免多重REST请求 向下兼容,无需考虑版本 可以对现有的数据源(例如REST API)进行包装 与开发语言无关 GraphQL查询 我通过Github的GraphQL...如果我还想在查询包含浏览者的姓名,那就加一个字段即可: ? GraphQL的查询也可以有注释: ? GraphiQL的智能提示 GraphiQL是具有智能提示的功能的。

    1.7K40

    GraphQL 初体验,Node.js 构建 GraphQL API 指南

    在传统的基于 REST 的 API 方法,客户端发出请求,而服务端决定响应。 但是在 GraphQL ,客户端可以精确地确定其从服务器获取的数据。...让我们看一下如何在 Node.js 实现解析器。我们的目的是围绕着解析器如何与模式一起操作来巩固概念,所以我们不会围绕着如何设置数据存储来做太详细的介绍。...在“现实世界“,我们可能会用诸如 knex 之类的东西建立数据库连接,现在让我们设置一些虚拟数据。...但这个缺点也是积极的:通过仔细设计你的 Graphql Schema,你可以避免在更容易实现(也更容易破坏)的 REST 端点中明显的陷阱,命名的不一致和混乱的关系。...在解析器执行验证检查是很有诱惑力的,但随着模式的增长,这将成为一种难以维持的策略。 GraphQL 什么时候不合适? GraphQL 不能像 REST 一样精确地满足 HTTP 通信的需求。

    8.3K40

    GraphQL最突出的架构优势是什么?

    作者 | Khalil Stemmler 策划 | 田晓旭 在服务器上使用 GraphQL 代替 REST 是有很多好处的,使用 Apollo Client 取代自己编写的数据获取逻辑也有很多优势。...GraphQL API 的配置工作包括: 安装 GraphQL 公开一个服务器端点 设计一个模式(schema) 将解析器连接数据源 这是我们需要做的工作,但不是我们项目的工作重心。...简化的数据获取架构,其中视图可以是任意前端框架——nerdwallet 数据图在连接的两端均有 Apollo 服务器和客户端,它可以简化获取逻辑、错误逻辑、重试逻辑、分页、缓存、optimistic UI...将用例作为应用程序的重心后,从 REST 切换到 GraphQL(或同时支持两者)变得轻而易举。...在架构层面,由于 GraphQL 仅向客户端公开单个端点,因此它满足了这一原则。 客户端隐藏了字段解析机制的所有复杂性,它只需关注如何在 GraphQL 服务器之上构建即可。

    2.2K20

    GraphQL与OpenAPI:数据治理的优缺点

    但在 API 标准领域,GraphQL 和 OpenAPI 作为企业两个重要的框架脱颖而出。 API 在数据消费中发挥着至关重要的作用,并且通过代理,在确保健全的数据治理方面至关重要。...GraphQL 的查询语言没有包含其他标准, HTTP 或 REST。它对客户端和服务器如何通信请求和结果是不可知的。...GraphQL GraphQL 的查询语言允许请求者定义所需的数据元素并遍历定义的数据关系。服务器处理遍历关系并将请求作为单个结果返回。...借助元数据,与底层数据源保持一致更加直接,并且工具使其更容易支持数据治理需求。 由于其专业化重点,GraphQL 可以提供以多种语言实现的参考库。...这些库解析 GraphQL 模式和查询并将它们连接到代码,从而促进数据库和业务逻辑集成到响应。 此请求处理模型提供了支持数据治理目标的挂钩。

    10810

    与我一起学习微服务架构设计模式8—外部API模式

    实现API Gateway 实现支持多种客户端的REST API的API Gateway非常耗时,你可能需要考虑使用基于图形的API框架,GraphQL。...基于GraphQL(一种标准)的API Gateway可使用Node.js Express Web 框架和Apollo GraphQL服务器,用js编写。...执行GraphQL 使用GraphQL的主要好处是它的查询语言为客户端提供了对返回数据的令人难以置信的控制。客户端通过向服务器发出包含查询文档的请求来执行查询。...把模式连接数据源GraphQL服务器执行查询时,必须从一个或多个数据存储检索所请求的数据。通过将解析函数附加到模式定义的对象类型字段,可以将GraphQL模式与数据源相关联。...为了让客户端调用GraphQL,你需要将它与Web框架集成,Express Web

    1.4K30

    最强开源低代码平台 - Appsmith 功能介绍与使用体验

    Appsmith 主要用于构建管理面板、内部工具和仪表板等,允许拖放 UI 组件来构建页面,通过连接到任何 API、数据库或 GraphQL 源,并使用 JavaScript 语言编写逻辑,可以在短时间内创建内部应用程序...Unknown-2.gif数据源Appsmith 可以使用 15+ 种 DB、REST API 或 GraphQL 作为数据源,同时支持 OAuth 2.0 等多种鉴权协议。...关于如何在 Docker 上部署自己的 Appsmith 服务器,可以参考 Docker Setup应用发布与分享您可以进行多次编辑和保存,并在编辑器查看结果,应用程序更改后会自动保存,并实时反映在编辑器...Appsmith 凭借低代码 UI 开发器、大量数据源连接器、自定义 JavaScript、开源许可证和蓬勃发展的社区,在低代码开发市场领域占据独特的地位。...Appsmith 使用预构建的 UI 组件创建页面,再连接数据源与 Appsmith 集成,包括 REST API、MySQL、Postgres、MongoDB 和其他数据库,然后创建和执行查询,在

    5.1K71

    安息吧 REST API,GraphQL 长存

    截图来源于我的 Pluralsight 课程 - 使用 GraphQL 构建可扩展的 API。 我们可以让客户端与 GraphQL 层通信,而不是直接连接两个不同的数据服务(如上面的幻灯片中那样)。...然后 GraphQL 层将与两个不同的数据服务进行通信。GraphQL 首先将客户端从需要与多种语言进行通信中隔离,并将单个请求转换为使用不同语言的多个服务的多个请求。...因此,当客户端需要获取多个资源的数据时,需要对 REST API 进行多次往返,以将其所需的数据放在一起。 在 REST API ,没有客户端请求语言。客户端无法控制服务器返回的数据。...这些类型可以是原语的或者自定义的,并且模式的所有其他类型都需要类型。这种丰富的类型系统带来丰富的功能,拥有内省 API,并能够为客户端和服务器构建强大的工具。...如果我们有一个 GraphQL 查询,我们明确知道如何在 UI 中使用它的响应,因为查询与响应具有相同的“结构”。我们不需要检查响应才知道如何使用它,我们也不需要有关 API 的任何文档。

    2.7K30

    30分钟理解GraphQL核心概念

    写在前面 在上一篇文章RPC vs REST vs GraphQL,对于这三者的优缺点进行了比较宏观的对比,而且我们也会发现,一般比较简单的项目其实并不需要GraphQL,但是我们仍然需要对新的技术有一定的了解和掌握...我们在使用REST接口时,接口返回的数据格式、数据类型都是后端预先定义好的,如果返回的数据格式并不是调用者所期望的,作为前端的我们可以通过以下两种方式来解决问题: 和后端沟通,改接口(更改数据源) 自己做一些适配工作...值得注意的是,GraphQL可以通过Scalar声明一个新的标量,比如: prisma(一个使用GraphQL来抽象数据库操作的库),还有DateTime和ID这两个标量分别代表日期格式和主键 在使用...例子我们仅仅声明了Query类型和Mutation类型,如果我们的应用对于评论列表有real-time的需求的话,在REST,我们可能会直接通过长连接或者通过提供一些带验证的获取长连接url的接口...当然,在实际运行,其内部实现仍然是建立于长连接之上的,但是我们能够以更加声明式的方式来进行声明它。

    2K40

    用ServBay快速构建下一代GraphQL应用

    GraphQL是由Facebook开发的一种数据查询和操作语言,用于API,并作为运行时用于执行这些查询的服务器端软件的一种方式。它提供了一种更高效、强大和灵活的替代REST的方法。...主要功能包括声明式数据获取:使用 GraphQL,客户端可以在查询精确指定所需的数据,包括字段和关系。这消除了传统 REST API 经常出现的数据过度获取和获取不足的问题。...高效的类型系统: GraphQL 拥有强大的类型系统,可以在 API 定义数据的结构和关系。高效的数据加载功能: GraphQL 使客户端能够在单个请求检索多个资源。...Node.js安装部署指南第2步:初始化Apollo服务器Apollo Server是一个开源的、与GraphQL规范兼容的服务器,它简化了GraphQL API的构建。...具体来说,API 服务依赖于数据库服务——这确保服务器在开始允许 API 无缝连接到 PostgreSQL 数据库之前等待数据库完全初始化。

    17900

    30分钟理解GraphQL核心概念

    写在前面 在上一篇文章RPC vs REST vs GraphQL,对于这三者的优缺点进行了比较宏观的对比,而且我们也会发现,一般比较简单的项目其实并不需要GraphQL,但是我们仍然需要对新的技术有一定的了解和掌握...我们在使用REST接口时,接口返回的数据格式、数据类型都是后端预先定义好的,如果返回的数据格式并不是调用者所期望的,作为前端的我们可以通过以下两种方式来解决问题: 和后端沟通,改接口(更改数据源) 自己做一些适配工作...值得注意的是,GraphQL可以通过Scalar声明一个新的标量,比如: prisma(一个使用GraphQL来抽象数据库操作的库),还有DateTime和ID这两个标量分别代表日期格式和主键 在使用...例子我们仅仅声明了Query类型和Mutation类型,如果我们的应用对于评论列表有real-time的需求的话,在REST,我们可能会直接通过长连接或者通过提供一些带验证的获取长连接url的接口...当然,在实际运行,其内部实现仍然是建立于长连接之上的,但是我们能够以更加声明式的方式来进行声明它。

    98620

    1.1 REST

    REST API有一些规则和约束,这里我就简单的写一下(之前的文章有详细描述): 资源都是URL的一部分,例如/persons 针对每个资源通常都会有两个URL被实现:“/persons”表示资源的集合...GraphQL允许客户端定义需要得到的数据结构,服务器精确的返回所需的数据结构,例如: 与REST和RPC不同,GraphQL API只需要一个端点;它也不需要使用不同的HTTP动词,它只使用POST...对于安全的调用REST API,现在的方案都比较成熟;而对于WebHook来说,这方面依然在探索前进。 防火墙。防火墙后运行的应用可以通过HTTP访问API,但是它们可能无法接收入站的流量。...如果连接挂掉了,客户端会尝试重新初始化连接。但是WebSocket有一些扩展性的问题,因为如果在线的客户端太多,那么服务器端就需要维持这些客户端打开的连接。...为了让数据通过一个可长时间存在的连接上进行传输,有两个方案: 首先可以让服务器把Transfer-Encoding这个Header设为chunked。

    1.3K21

    常见形式 Web API 的简单分类总结

    REST API有一些规则和约束,这里我就简单的写一下(之前的文章有详细描述): 资源都是URL的一部分,例如/persons 针对每个资源通常都会有两个URL被实现:“/persons”表示资源的集合...对于安全的调用REST API,现在的方案都比较成熟;而对于WebHook来说,这方面依然在探索前进。 防火墙。防火墙后运行的应用可以通过HTTP访问API,但是它们可能无法接收入站的流量。...如果连接挂掉了,客户端会尝试重新初始化连接。但是WebSocket有一些扩展性的问题,因为如果在线的客户端太多,那么服务器端就需要维持这些客户端打开的连接。 ?...而使用HTTP Streaming,服务器端可以在一个由客户端打开的长生存的连接里持续的推送新数据。 ?...为了让数据通过一个可长时间存在的连接上进行传输,有两个方案: 首先可以让服务器把Transfer-Encoding这个Header设为chunked。

    3.1K50

    我为什么要放弃RESTful,选择拥抱GraphQL

    GraphQL本质上是一种基于api的查询语言,现在大多数应用程序都需要从服务器获取数据,这些数据存储可能存储在数据库,API的职责是提供与应用程序需求相匹配的存储数据的接口。...总结它的好处: 在它的设计思想GraphQL 以图的形式将整个 Web 服务的资源展示出来,客户端可以按照其需求自行调用,类似添加字段的需求其实就不再需要后端多次修改了。...GraphQL应用的基本架构 下图是一个 GraphQL 应用的基本架构,其中客户端只和 GraphQL 层进行 API 交互,而 GraphQL 层再往后接入各种数据源。...这样一来,只要是数据源有的数据, GraphQL 层都可以让客户端按需获取,不必专门再去定接口了。...服务端实现 在服务端, GraphQL 服务器可用任何可构建 Web 服务器的语言实现。

    2.4K40
    领券