在 Deno 中使用 GraphQL 进行数据修改的方法

阅读时长 9 分钟读完

前言

GraphQL 是一种用于 API 的查询语言,由 Facebook 开发。GraphQL 旨在提高 API 的效率、强制前后端协作、减少不必要的网络传输等。而 Deno 是最近出现的一种全新的运行时环境,拥有更高的安全性、更先进的 JavaScript/TypeScript 支持、更快的启动速度和更简洁的体系结构等众多优点。在本文中,我们将探讨如何在 Deno 中使用 GraphQL 进行数据修改。

准备工作

在本文中,我们将使用一个简单的例子进行讲解,因此我们需要安装一些必要的工具来运行和测试这个例子。我们需要安装 Deno 和两个 Deno 模块,分别是 deno-graphqloak,我们可以用以下命令来安装这些模块:

在安装完成后,我们创建一个 server.ts 文件,这个文件是我们的 GraphQL 服务器文件。

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

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

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

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

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

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

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

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

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

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

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

在这个文件中,我们定义了一个包含 User 类型和 QueryMutation 两个操作的 GraphQL Schema。在 resolvers 中,我们实现了 getUsercreateUserupdateUserdeleteUser 四个操作的具体逻辑。在 GraphQLService 中,我们利用 deno-graphql 模块将 typesresolvers 聚合成一个完整的 GraphQL 服务。

最后,我们使用 oak 模块创建了一个 HTTP 服务器来监听端口 8000 上的请求。

编写前端代码

在本例中,我们将使用 axios 来向 GraphQL 服务器发送请求,因此我们需要先安装 axios,命令如下:

在安装完成后,我们编写一个 client.ts 文件,先定义一些必要的类型和常量:

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

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

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

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

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

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

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

在这里,我们定义了 UserUserInputCreateUserInputUpdateUserInputDeleteUserInput 等类型,它们与 GraphQL Schema 中定义的类型是一致的。我们还定义了一个常量 GRAPHQL_URL,这是我们的 GraphQL 服务器地址。

接下来,我们可以写出用于向 GraphQL 服务器发送请求的代码:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

在这里,我们定义了一个 queryGraphQL 函数和 createUserupdateUserdeleteUsergetUser 四个函数,分别对应 GraphQL Schema 中定义的四个操作。在 queryGraphQL 函数中,我们使用 axios 向 GraphQL 服务器发送请求,并将返回的数据进行解析。

createUserupdateUserdeleteUsergetUser 四个函数中,我们利用 queryGraphQL 函数发送 GraphQL 请求,并解析返回的数据,得到我们需要的 User 类型数据。

测试

我们可以执行以下命令在本地启动服务器:

在另一个命令行窗口中,我们执行以下命令在测试客户端:

注意,我们在 client.ts 文件中使用了 axios,这意味着我们需要通过 allow-netallow-read 授权来使用网络和文件 I/O。当命令执行成功时,我们应该可以看到如下输出:

这些输出表明我们的 GraphQL 示例运行成功,并且已经可以实现基本的数据查询、创建、更新、删除操作。

结论

在本文中,我们通过一个简单的示例演示了如何在 Deno 中使用 GraphQL 进行数据修改。我们利用 deno-graphqloak 库来实现了一个 GraphQL 服务器,并利用 axios 向这个服务器发送 GraphQL 请求。通过这个例子,我们了解了 GraphQL 的基本用法,也学会了如何在 Deno 中使用这个技术。希望这篇文章可以对查询 GraphQL 的读者有所帮助!

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

纠错
反馈