前言
在现代化的 Web 应用程序中,前端通常需要与后端服务器进行通信,获得所需的数据。传统的 Web 应用中,前端通过服务器渲染从而获得数据,而现代的 Web 应用往往使用了前后端分离的架构,由前端通过 API 从后端服务器获取所需的数据。
为了让开发者更好地管理并向前端暴露数据源,Apollo Server 提供了多种数据源管理方式,本文将详细介绍这些方式,供读者参考。
Apollo 数据源管理
Apollo Server 让数据源管理变得非常简单,开发者只需直接调用其中的 API 即可实现数据源的配置、绑定和发布。
REST 数据源管理
REST API 是现代 Web 应用中最广泛使用的 API 类型之一,Apollo Server 通过 RESTDataSource
类型,使得开发者可以轻松地将 REST API 与 GraphQL API 集成。
例如,假设已有一个 RESTful API https://api.example.com
,可以用以下 Node.js 代码创建一个数据源:
-- -------------------- ---- ------- ----- - -------------- - - ---------------------------------- ----- ---------- ------- -------------- - ------------- - -------- ------------ - --------------------------- - ----- ---------------- - ------ ------------------------- - -
以上代码演示了如何通过 RESTDataSource
类型创建一个数据源,并且定义了一个 getExampleData
方法,该方法通过调用 this.get("example-data")
来访问 REST API 的 https://api.example.com/example-data
路径,并将其结果格式化为 JSON 格式。
接下来,可以将 ExampleAPI
类型与 GraphQL 类型绑定:
-- -------------------- ---- ------- ----- - ------------- --- - - ------------------------- ----- -------- - ---- ---- ----------- - --- --- ----- ------- - ---- ----- - ------------ ------------ - -- ----- --------- - - ------ - ------------ ----- --- --- - ----------- -- -- - ------ ---------------------------------------- -- -- -- ----- ------ - --- -------------- --------- ---------- ------------ -- -- -- ----------- --- ------------- --- --- ----------------------- --- -- -- - --------------- ------ ----- -- --------- ---
在这段代码中,ApolloServer
创建了一个新的服务器实例,并将 exampleAPI
数据源传递给 ApolloServer
。 通过使用 ApolloServer
的 dataSources
API 方法进行数据源配置,可以轻松地将数据源绑定到 GraphQL 类型中。
Memory 数据源管理
另一个常见的数据源管理方式是 Memory,即将 JSON 数据存储在内存中,通过 GraphQL API 对其数据进行访问。在 Apollo Server 中,可以通过创建一个类来定义一个 Memory 数据源。这里使用一个简单的例子来说明如何使用 Memory 数据源管理数据。
如下代码所示,首先我们定义了一个数组,作为 Memory 数据源的模拟数据:
-- -------------------- ---- ------- ----- ---- - - - --- ---- ----- ------- ---- --- -- - --- ---- ----- ------- ---- --- -- - --- ---- ----- --------- ---- ----- -- --
然后,我们创建一个类,使用 dataSource
函数来将 Memory 数据源绑定到 GraphQL API 中:
-- -------------------- ---- ------- ----- ------- - ------------- - --------------- - ----- - ----- ----------- - ------ --------------------------- -- ------- --- ------- - ----- ---------- - ------ ---------------- - - ----- ------ - --- -------------- --------- ---------- ------------ -- -- -- -------- --- ---------- --- ---
在上面的代码中,我们创建了一个名为 UserAPI
的类,该类包含获取单个用户和获取所有用户的方法。 这些方法在类被实例化时将 data
数组附加到 memoryData
属性上。 然后,Apollo Server 可以通过 dataSources
API 方法使用 UserAPI
,将其绑定到 GraphQL 类型中。
数据源组合
最后一个数据源管理方式是组合数据源。 很多情况下,我们需要从多个数据源(例如 Memory 数据源和 REST 数据源)中获取数据, Apollo Server 提供了一个很好的方式来组合这些数据源。
例如,假设我们需要同时访问一个 Memory 数据源(UserAPI
)和一个 REST 数据源(ExampleAPI
),来获取用户和用户例子数据,并将它们混合在一起:
-- -------------------- ---- ------- ----- ---------- ------- -------------- - ------------- - -------- ------------ - --------------------------- - ----- ---------------- - ------ ------------------------- - - ----- ------- - ------------- - --------------- - ----- - ----- ----------- - ----- ---- - --------------------------- -- ------- --- ------- ---------------- - ----- ----------------------------------------------------- ------ ----- - ----- ---------- - ----- ----- - ----- ---------------- ------ --------------- ---- -- - ---------------- - ----- ----------------------------------------------------- ------ ----- --- - - ----- ------ - --- -------------- --------- ---------- ------------ -- -- -- -------- --- ---------- ----------- --- ------------- --- ---
在上面的代码中,我们将 UserAPI
和 ExampleAPI
引入了 GraphQL 程序。通过将 UserAPI
中的 getUser()
方法中添加 exampleAPI
数据源,就可以从两个不同的数据源中检索数据,并将其合并为一个结果。
值得注意的是,虽然 RESTDataSource
和 UserAPI
类型是不同的数据源类型,但它们都实现了 Apollo 数据源的通用接口,因此 Apollo Server 可以无缝地将它们组合在一起。
总结
本文详细介绍了 Apollo Server 中使用不同的数据源管理方式的方法以及如何通过 GraphQL API 向前端暴露数据。通过 REST API,Memory 数据源和组合数据源这三种管理方式,开发人员可以轻松地管理和发布数据源,并构建灵活且富有表现力的 Web API。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a3750148841e9894fcb13b