如何在 Deno 中使用 GraphQL 和类型化的数据加载
GraphQL 是一种新型的 API 查询语言,它可以让客户端以一种统一的方式来描述和查询数据,而无需考虑 API 端点的具体实现。GraphQL 还包括一个类型化的系统,可以让我们定义和验证数据模型。在本文中,我们将介绍如何在 Deno 中使用 GraphQL 和类型化的数据加载。
- 安装依赖
我们首先需要安装需要的依赖,包括 graphql 和一个用于与 REST API 交互的 fetch 模块。可以使用 Deno 自带的模块管理器进行安装:
import { graphql } from "https://cdn.skypack.dev/graphql"; import { fetch } from "https://deno.land/x/fetch/mod.ts";
- 构建 GraphQL 查询
使用 GraphQL 构建一次查询非常简单。首先,定义一个查询字符串,它包含要请求的字段:
-- -------------------- ---- ------- ----- ------------ - - ----- - -------- - -- ----- ------ - -- ---- - - - --
在这个例子中,我们要查询所有文章的 ID、标题和作者信息。我们还要查询每个作者的 ID 和姓名。现在我们可以通过构造 GraphQL 对象来执行查询:
const result = await graphql({ schema: mySchema, source: graphqlQuery, });
在这个例子中,mySchema 是你构建的 TypeScript 或 JavaScript 对象类型定义,它描述了 GraphQL 查询结果的格式。
- 加载 REST API 数据
一般来说,我们需要从第三方 REST API 端点中加载数据,并将其转换为 GraphQL 格式。该如何实现呢?这里有一个例子:
-- -------------------- ---- ------- --------- ------ - --- ------- ----- ------- - --------- ---- - --- ------- ------ ------- ------- ------- - ----- -------- ----------- --------------- - ----- --- - ----- ---------------------------------------------------- ----- ---- - ------ ----------- -- - --- ------- ------ ------- ------- ------- ---- ----- ----- - --- ----------- ---------- ----- ------- - ----- ------------ ------- ------------------------ -- --------------------- ---- -- - ----- --- - ----- ---------------------------------------------------------- ----- - --- ---- ---- - - ----- ----------- ----- ------- ------ - - --- ---- ---- -- ------------- -------- ------ ------- -- -- ----- ----- - --------------- -- -- -------- ------- ---------------------- -- ---------------- -- ---- --- ------------- ---- ------ ------ -
在这个例子中,我们使用 Deno fetch 模块从 REST API 端点中加载所有文章的数据。我们构建了一个 map,用于存储每个作者的信息,这样我们就可以将混杂在文章里的作者 ID 转换为具体的作者对象。最后,我们返回一个数组,其中每个元素都是包含文章信息和作者信息的对象。
- 转换数据格式
上一步返回的数据是 REST API 的对象格式,我们需要将其转换为 GraphQL 格式,以便强类型化和验证数据:
-- -------------------- ---- ------- ------ - ----------- - ---- ---------------------------------- ------ - -------- - ---- ---------------- ----- -------- - ----- ----------- --------- ------ - --- ------- ----- ------- - --------- ---- - --- ------- ------ ------- ------- ------- - --------- ----- - --------- ------- - ----- -------- - ------------- ---- ----- - --------- -------- - ---- ------ - --- --- ----- ------- - ---- ---- - --- --- ------ ------- ------- ------- - --- ----- ------ ------ - --------------- --- ------ ------- - --- ---- ---- - -- -- -- --- ------ ------- - --- ---- ---- -- ---- ----- -------------- ----- - - --------- ------ --
在这个例子中,我们定义了 Author 和 Post 接口,这些接口描述了我们提供的数据格式。我们构建了一个简单的 GraphQL 模式,然后将从 REST API 获取的文章和作者数据转换为 GraphQL 格式。最后,我们将 GraphQL 结果对象类型化为 Query 接口,这样我们就可以使用静态类型检查器来验证查询的返回结果了。
- 执行查询
现在我们可以将 GraphQL 查询和数据对象传递给 graphql() 函数,以获得具体的查询结果。这是完整的 Deno 示例代码:
-- -------------------- ---- ------- ------ - ----------- - ---- ---------------------------------- ------ - ------- - ---- ---------------------------------- ------ - ----- - ---- ----------------------------------- --------- ------ - --- ------- ----- ------- - --------- ---- - --- ------- ------ ------- ------- ------- - --------- ----- - --------- ------- - ----- ------------ - - ----- - -------- - -- ----- ------ - -- ---- - - - -- ----- -------- - ------------- ---- ----- - --------- -------- - ---- ------ - --- --- ----- ------- - ---- ---- - --- --- ------ ------- ------- ------- - --- ----- -------- ----------- --------------- - ----- --- - ----- ---------------------------------------------------- ----- ---- - ------ ----------- -- - --- ------- ------ ------- ------- ------- ---- ----- ----- - --- ----------- ---------- ----- ------- - ----- ------------ ------- ------------------------ -- --------------------- ---- -- - ----- --- - ----- ---------------------------------------------------------- ----- - --- ---- ---- - - ----- ----------- ----- ------- ------ - - --- ---- ---- -- ------------- -------- ------ ------- -- -- ----- ----- - --------------- -- -- -------- ------- ---------------------- -- ---------------- -- ---- --- ------------- ---- ------ ------ - ----- -------- ------ - ----- -------- - ----- ----------- ----- ------ ------ - --------------- --- ------ ------- - --- ---- ---- - -- -- -- --- ------ ------- - --- ---- ---- -- ---- ----- -------------- ----- - - --------- ------ -- ----- ------ - ----- --------- ------- --------- ------- ------------- --------------- -------------- --- -------------------- - -------
在这个例子中,我们定义了一个根级的 Query 接口,其中包含一个名为 allPosts 的字段。这个字段会查询所有文章的 ID、标题和作者信息。我们使用 fetch 模块从 REST API 端点中加载所有文章数据,然后将其转换为 GraphQL 格式。最后,我们将转换后的数据对象作为变量传递给了 graphql() 函数。
这个例子仅仅是使用 GraphQL 和 Deno 构建 REST API 的简单示例。使用 GraphQL 和 Deno,你可以构建更复杂的 API 来满足你的需求。不仅如此,使用 GraphQL 还可以帮助你优化和更好地管理你的数据访问行为。
总结
在本文中,我们介绍了如何在 Deno 中使用 GraphQL 和类型化的数据加载。我们从 REST API 中加载了一些数据,将它们转换为 GraphQL 格式,然后使用 graphql() 函数执行了查询。
GraphQL 是一项强大的技术,它可以让我们以一种简洁明了的方式查询数据,并帮助我们确保我们的数据模型是类型安全的。我们希望这篇文章可以让你更好地理解 GraphQL,并给你在 Deno 中使用 GraphQL 的一些技巧和灵感。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6453179a968c7c53b0787f75