如何在 Deno 中使用 GraphQL 和类型化的数据加载

阅读时长 10 分钟读完

如何在 Deno 中使用 GraphQL 和类型化的数据加载

GraphQL 是一种新型的 API 查询语言,它可以让客户端以一种统一的方式来描述和查询数据,而无需考虑 API 端点的具体实现。GraphQL 还包括一个类型化的系统,可以让我们定义和验证数据模型。在本文中,我们将介绍如何在 Deno 中使用 GraphQL 和类型化的数据加载。

  1. 安装依赖

我们首先需要安装需要的依赖,包括 graphql 和一个用于与 REST API 交互的 fetch 模块。可以使用 Deno 自带的模块管理器进行安装:

  1. 构建 GraphQL 查询

使用 GraphQL 构建一次查询非常简单。首先,定义一个查询字符串,它包含要请求的字段:

-- -------------------- ---- -------
----- ------------ - -
  ----- -
    -------- -
      --
      -----
      ------ -
        --
        ----
      -
    -
  -
--

在这个例子中,我们要查询所有文章的 ID、标题和作者信息。我们还要查询每个作者的 ID 和姓名。现在我们可以通过构造 GraphQL 对象来执行查询:

在这个例子中,mySchema 是你构建的 TypeScript 或 JavaScript 对象类型定义,它描述了 GraphQL 查询结果的格式。

  1. 加载 REST API 数据

一般来说,我们需要从第三方 REST API 端点中加载数据,并将其转换为 GraphQL 格式。该如何实现呢?这里有一个例子:

-- -------------------- ---- -------
--------- ------ -
  --- -------
  ----- -------
-

--------- ---- -
  --- -------
  ------ -------
  ------- -------
-

----- -------- ----------- --------------- -
  ----- --- - ----- ----------------------------------------------------
  ----- ---- - ------ ----------- -- -
    --- -------
    ------ -------
    ------- -------
  ----

  ----- ----- - --- ----------- ----------
  ----- ------- - ----- ------------
    ------- ------------------------ -- --------------------- ---- -- -
      ----- --- - ----- ----------------------------------------------------------
      ----- - --- ---- ---- - - ----- -----------
      ----- ------- ------ - - --- ---- ---- --
      ------------- --------
      ------ -------
    --
  --

  ----- ----- - --------------- -- --
    --------
    ------- ---------------------- -- ---------------- -- ---- --- -------------
  ----

  ------ ------
-

在这个例子中,我们使用 Deno fetch 模块从 REST API 端点中加载所有文章的数据。我们构建了一个 map,用于存储每个作者的信息,这样我们就可以将混杂在文章里的作者 ID 转换为具体的作者对象。最后,我们返回一个数组,其中每个元素都是包含文章信息和作者信息的对象。

  1. 转换数据格式

上一步返回的数据是 REST API 的对象格式,我们需要将其转换为 GraphQL 格式,以便强类型化和验证数据:

-- -------------------- ---- -------
------ - ----------- - ---- ----------------------------------
------ - -------- - ---- ----------------

----- -------- - ----- -----------

--------- ------ -
  --- -------
  ----- -------
-

--------- ---- -
  --- -------
  ------ -------
  ------- -------
-

--------- ----- -
  --------- -------
-

----- -------- - -------------
  ---- ----- -
    --------- --------
  -

  ---- ------ -
    --- ---
    ----- -------
  -

  ---- ---- -
    --- ---
    ------ -------
    ------- -------
  -
---

----- ------ ------ - --------------- --- ------ ------- - --- ---- ---- - -- -- --
  ---
  ------
  ------- - --- ---- ---- --
----

----- -------------- ----- - -
  --------- ------
--

在这个例子中,我们定义了 Author 和 Post 接口,这些接口描述了我们提供的数据格式。我们构建了一个简单的 GraphQL 模式,然后将从 REST API 获取的文章和作者数据转换为 GraphQL 格式。最后,我们将 GraphQL 结果对象类型化为 Query 接口,这样我们就可以使用静态类型检查器来验证查询的返回结果了。

  1. 执行查询

现在我们可以将 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

纠错
反馈