如何在 Deno 中使用 GraphQL 实现 API 查询?

阅读时长 9 分钟读完

前言

GraphQL 是一种用于 API 查询的语言,它由 Facebook 创建并开源。与传统的 REST API 相比,GraphQL 具有更高的灵活性和可扩展性,它可以让客户端发起更精准的请求,只获取需要的数据。

在本文中,我们将介绍如何在 Deno 中使用 GraphQL 实现 API 查询。我们将使用 Oak 作为 HTTP 服务器,并使用 graphql-deno 库来实现 GraphQL API。

环境准备

在开始之前,您需要在本地安装 Deno。您可以从以下链接中下载并安装 Deno:

另外,您需要安装以下依赖库:

  • Oak:用于创建 HTTP 服务器。
  • graphql-deno:用于实现 GraphQL API。

您可以使用以下命令来安装这些依赖库:

创建 GraphQL API

让我们首先创建一个 GraphQL API。我们将创建一个用于查询 GitHub 用户的 API。API 将使用 GitHub GraphQL API 来获取用户信息。

在项目根目录中创建一个名为 schema.graphql 的文件。在该文件中定义以下 GraphQL Schema:

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

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

接下来,在项目根目录中创建一个名为 resolvers.ts 的文件。在该文件中定义以下 Resolvers:

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

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

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

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

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

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

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

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

在以上代码中,我们使用了 fetch 函数来发起向 GitHub GraphQL API 的查询请求。我们还使用了环境变量 GITHUB_TOKEN 来进行身份验证。您需要在环境变量中设置一个名为 GITHUB_TOKEN 的变量,变量值为您的 GitHub 个人访问令牌。

定义 HTTP 服务器

现在,我们需要定义一个 HTTP 服务器,用于处理对 GraphQL API 的查询请求。我们将使用 Oak 库来创建 HTTP 服务器。

在项目根目录中创建一个名为 server.ts 的文件。在该文件中定义以下代码:

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

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

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

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

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

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

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

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

在以上代码中,我们首先创建了一个 Application 和一个 Router 对象。接下来,我们定义了一个 GraphQL Schema,并使用 applyGraphQL 函数将其与 HTTP 服务器绑定在一起。我们还将路由设置为 /graphql

最后,我们使用 Oak 的 router.routes() 函数来将 GraphQL API 与 HTTP 服务器绑定在一起,以便客户端可以通过 HTTP 请求访问 GraphQL API。

运行应用程序

我们已经完成了 GraphQL API 和 HTTP 服务器的实现。现在,我们可以启动应用程序:

启动应用程序后,您可以在浏览器中访问 http://localhost:8080/graphql 来测试您的 API。

使用 GraphQL Playground

GraphQL Playground 是一个交互式的 GraphQL 查询工具。它可以让您轻松地测试您的 GraphQL API。在 Deno 中,您可以使用 oak-graphql 库来启用 GraphQL Playground。

在项目根目录中创建一个名为 playground.ts 的文件。在该文件中定义以下内容:

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

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

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

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

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

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

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

以上代码中,我们定义了一个 Application 对象,并使用 applyGraphQL 函数将 GraphQL API 与 HTTP 服务器绑定在一起。接下来,我们创建了一个新的路由,与 HTTP 服务器绑定,在该路由上向客户端提供 GraphQL Playground。最后,我们启动 HTTP 服务器,让客户端可以通过浏览器访问 GraphQL Playground。

使用以下命令来启动应用程序:

现在,您可以在浏览器中访问 http://localhost:8081 来测试您的 GraphQL API,您将看到一个交互式的 GraphQL Playground 工具。在左侧的面板中编辑 GraphQL 查询,并在右侧的面板中查看结果。

结论

在本文中,我们介绍了如何在 Deno 中使用 GraphQL 实现 API 查询。我们首先创建了一个用于查询 GitHub 用户的 GraphQL API,然后使用 Oak 库创建了一个 HTTP 服务器,将 GraphQL API 与 HTTP 服务器绑定在一起。最后,我们使用 oak-graphql 库为我们的 GraphQL API 启用了 GraphQL Playground。如果您对本文中的示例有任何疑问,请随时在评论区留言。

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

纠错
反馈