如何在 Deno 中使用 GraphQL 构建 API

阅读时长 7 分钟读完

在今天的前端开发中,GraphQL 已经成为了前端和后端通信的一种重要的方式。而 Deno,则成为了越来越多前端开发者探索的全新的 JavaScript/TypeScript 运行时环境。那么,在 Deno 中,如何使用 GraphQL 来构建 API 呢?本篇文章将详细介绍。

安装 Deno

首先需要在你的机器上安装 Deno,可以访问官网 deno.land,根据自己的操作系统下载安装即可。安装完成后,可以使用以下命令验证是否安装成功:

如果正确安装,会输出 Deno 的版本号。

安装 oak 和 graphql

接下来,我们需要使用两个库:oakgraphqloak 是一个基于中间件的 Web 框架,可用于创建 API、中间件等等。而 graphql 则是关于 GraphQL 的 JavaScript 库。

运行以下命令安装两个库:

这里需要注意的是,我们需要在安装时加入 --allow-net--allow-read 参数来开启网络和读取文件的权限。

创建 GraphQL Schema

在使用 GraphQL 构建 API 时,我们需要先定义一个 GraphQL Schema。Schema 通常包括两个部分,一部分是定义数据类型的 typeDefs,另一部分是定义查询语句的 resolvers

创建一个名为 schema.ts 的文件,用于存放 Schema 的定义:

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

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

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

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

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

其中,我们定义了两个对象类型(NameTypeUserType),以及一个 Schema。Schema 中定义了一个查询语句,查询一个用户,根据用户 ID 返回用户的信息。

创建服务

有了 Schema,我们接下来需要创建一个服务器,可用于处理 HTTP 请求。这里,我们使用 oak 中间件来搭建 HTTP 服务器:

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

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

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

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

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

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

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

这里,我们创建了一个 Applicaion(也可以使用 Router,更加灵活),并分别使用了三个中间件:

  • 日志记录,记录请求路径和响应时间;
  • 计算响应时间,并设置响应头的 X-Response-Time
  • 处理 GraphQL 查询,使用 applyGraphQL 函数。

其中,applyGraphQL 函数使用了 schematypeDefs,并传入了 parsedOptions 参数,用于禁止 Null 值的查询。这样,我们即可在 http://localhost:8000 上启动服务。

测试

最后,我们来测试一下服务。在浏览器或任意 GraphQL 工具中,访问 http://localhost:8000/graphql,使用以下查询语句:

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

如果一切正常,你应该能够得到以下的响应:

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

总结

本篇文章介绍了在 Deno 中使用 GraphQL 来构建 API,并且详细展示了如何创建 Schema 和 HTTP 服务器,以及进行测试。期望这篇文章对你理解如何使用 Deno 和 GraphQL 的场景有所帮助。

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

纠错
反馈