如何在 Deno 中使用 GraphQL 进行数据交互

阅读时长 7 分钟读完

前言

GraphQL 是一种数据交互语言,由 Facebook 开发并开源,它可以让客户端指定需要的数据结构和具体数据。GraphQL 的优势在于可以按需获取数据,避免了传统接口的二次开发和数据过多传输等问题。本文将介绍如何在 Deno 中使用 GraphQL 进行数据交互。

安装

安装 Deno 和 graphql 客户端

创建服务器

我们使用 Oak 创建一个简单的服务器,同时借助 Oak GraphQL 中间件来处理 GraphQL 的请求。

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

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

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

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

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

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

其中,typeDefsresolvers 分别用于声明 GraphQL 的类型和数据处理方法。

创建 Schema

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

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

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

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

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

这里我们定义了一个 Book 类型,包括图书 id、标题 title 和作者 author。同时,Query 定义了获取图书列表的方法 getBooksMutation 定义了增加图书的方法 addBook,入参为 BookInput

创建 Resolver

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

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

每个 resolver 都对应一个 typeDef 中定义的 GraphQL 方法。在 resolver 中,我们把处理逻辑定义在这个函数中,它会被对应的类型调用。

这里我们使用一个 DataStore 作为数据源,定义了 getBooksaddBook 方法,用于获取图书列表和添加图书。

创建数据源

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

这里我们定义了一个 DataStore 类,它包含了图书数据和操作这些数据的方法,使用类的方式来管理和维护数据,使其更加灵活和易于扩展。

发起GraphQL请求

我们可以使用 gql 客户端发起 GraphQL 请求。

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

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

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

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

这里我们使用 mutation 来调用 addBook 方法,入参是一本新的图书。我们通过 gql 发起请求,并使用 fetch 发出网络请求,最终将返回的结果打印到控制台。

总结

在本文中,我们介绍了如何在 Deno 中使用 GraphQL 进行数据交互,通过创建服务器和定义 SchemaResolver 和数据源等步骤,带您了解了 GraphQL 的基础知识,同时,使用 Deno 中的 GraphQL 客户端,我们发起了构建时 GraphQL 类型检查、客户端查询和变异等请求。GraphQL 能够高效地处理数据,解决了 API 数据传输成本高,无法满足不同客户端需求等问题。希望本文能给您带来帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e6c08ef6b2d6eab3219af9

纠错
反馈