如何在 Deno 中使用 GraphQL 进行数据查询和操作

阅读时长 7 分钟读完

前言

Deno 是一个由 Node.js 的创始人 Ryan Dahl 开发的新型运行时环境,它在很多方面都比 Node.js 更加优秀,例如有更好的安全性、更好的模块化支持、更好的性能等等。而 GraphQL 是一种用于 API 的查询语言,它可以让客户端精确地获取它需要的数据,从而减少了不必要的数据传输,提高了性能。本文将介绍如何在 Deno 中使用 GraphQL 进行数据查询和操作。

安装依赖

在使用 GraphQL 之前,我们需要安装一些依赖:

  • oak 是 Deno 中非常流行的 Web 框架,它提供了一些方便的 API 用于处理 HTTP 请求和响应。
  • oak_graphql 是 oak 框架中的 GraphQL 中间件,它可以将 GraphQL 请求转发到 GraphQL 服务器上。
  • mongo 是 Deno 中连接 MongoDB 数据库的模块,我们将使用它来操作数据库。

编写 GraphQL Schema

在使用 GraphQL 之前,我们需要定义一个 GraphQL Schema,它描述了我们的数据模型以及可用的查询和操作。下面是一个简单的例子:

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

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

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

在这个例子中,我们定义了一个 User 类型,它有三个字段:idnameemail。我们还定义了三个查询:getUsergetUsersMutation,它们用于获取、创建、更新和删除用户。

实现 GraphQL Resolver

在定义好 GraphQL Schema 之后,我们需要实现一些 Resolver 函数来处理查询和操作。下面是一个简单的例子:

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

在这个例子中,我们实现了四个 Resolver 函数,它们对应了我们在 GraphQL Schema 中定义的四个查询和操作。这些函数都接受四个参数:___context___。其中 ___ 分别代表查询和操作的参数,context 代表上下文对象,___ 代表查询和操作的元数据。

创建 GraphQL 应用

在实现好 Resolver 之后,我们需要创建一个 GraphQL 应用,并将我们的 Resolver 注入到应用中。下面是一个简单的例子:

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

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

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

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

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

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

在这个例子中,我们创建了一个 MongoClient 实例来连接 MongoDB 数据库,并将它存储在上下文对象中。然后我们使用 applyGraphQL 函数创建了一个 GraphQL 服务,并将它绑定到 oak 框架中的路由上。最后我们启动了 oak 应用,开始监听 8000 端口。

测试 GraphQL 应用

在启动好 oak 应用之后,我们可以使用任何支持 GraphQL 的客户端来测试我们的应用。下面是一个简单的例子:

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

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

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

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

在这个例子中,我们使用了三个不同的查询和操作来测试我们的 GraphQL 应用。第一个是创建用户,它接受两个参数:nameemail,并返回创建的用户对象。第二个是获取所有用户,它不接受任何参数,并返回一个包含所有用户的数组。第三个是更新用户,它接受三个参数:idnameemail,并返回更新后的用户对象。最后一个是删除用户,它接受一个参数:id,并返回被删除的用户对象。

总结

在本文中,我们介绍了如何在 Deno 中使用 GraphQL 进行数据查询和操作。我们首先安装了需要的依赖,然后定义了一个 GraphQL Schema,实现了一些 Resolver 函数,创建了一个 GraphQL 应用,并测试了它的功能。这些内容对于想要学习和使用 Deno 和 GraphQL 的开发人员来说都非常有价值。

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

纠错
反馈