使用 Apollo-Server-Express 为应用程序提供可扩展的 GraphQL API

阅读时长 7 分钟读完

GraphQL 是一种用于 API 的查询语言,由 Facebook 在 2015 年开源发布。它提供了一种更加高效、强大和灵活的方式来设计和查询 API。而 Apollo-Server-Express 是一个基于 Express 的 GraphQL 服务器,它提供了一种快速、易用且可扩展的方式来构建 GraphQL API。

本文将介绍如何使用 Apollo-Server-Express 为应用程序提供可扩展的 GraphQL API。我们将从安装和配置开始,然后介绍如何定义 GraphQL 的 Schema 和 Resolver,最后演示如何使用 GraphQL API 进行查询和变更。

安装和配置

首先,我们需要安装 Apollo-Server-Express 和相关依赖:

然后,我们需要创建一个新的 Express 应用程序,并在其中添加 Apollo-Server-Express 中间件:

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

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

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

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

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

在上面的代码中,我们创建了一个新的 Express 应用程序,并添加了 Apollo-Server-Express 中间件。我们还定义了一个简单的 GraphQL Schema,其中包含一个名为 hello 的查询字段和一个对应的 Resolver。

最后,我们启动 Express 应用程序并监听端口 4000。如果一切顺利,我们应该可以在浏览器中访问 http://localhost:4000/graphql 并执行以下查询:

查询结果应该是:

定义 Schema 和 Resolver

现在,我们来介绍如何定义 GraphQL 的 Schema 和 Resolver。

GraphQL 的 Schema 是一个类型定义,它描述了所有可查询和可变更的数据类型和操作。在 Apollo-Server-Express 中,我们可以使用 gql 函数来定义 Schema:

在上面的代码中,我们定义了一个名为 Query 的类型,其中包含一个名为 hello 的字段,它返回一个字符串类型。

Resolver 是一个函数,它接收一个输入参数和上下文对象,并返回一个输出结果。在 Apollo-Server-Express 中,我们可以使用 resolvers 对象来定义 Resolver:

在上面的代码中,我们定义了一个名为 hello 的 Resolver,它返回一个字符串类型的值。

查询和变更

现在,我们已经定义了 GraphQL 的 Schema 和 Resolver,我们可以使用 GraphQL API 来进行查询和变更。

查询

查询是一种只读操作,它用于获取数据。在 GraphQL 中,查询使用 Query 类型来定义。

例如,我们可以定义一个名为 getUser 的查询,它接收一个 ID 参数,并返回一个名为 User 的类型:

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

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

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

在上面的代码中,我们定义了一个名为 getUser 的查询,它接收一个 ID 参数,并返回一个名为 User 的类型。在 Resolver 中,我们可以获取 ID 参数,并查询用户数据,最后返回一个包含用户信息的对象。

我们可以在 GraphQL Playground 中执行以下查询来获取用户信息:

查询结果应该是:

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

变更

变更是一种写操作,它用于更新或删除数据。在 GraphQL 中,变更使用 Mutation 类型来定义。

例如,我们可以定义一个名为 createUser 的变更,它接收一个包含用户信息的输入参数,并返回一个名为 User 的类型:

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

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

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

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

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

在上面的代码中,我们定义了一个名为 createUser 的变更,它接收一个名为 input 的输入参数,并返回一个名为 User 的类型。在 Resolver 中,我们可以获取输入参数,并创建用户数据,最后返回一个包含用户信息的对象。

我们可以在 GraphQL Playground 中执行以下变更来创建用户信息:

变更结果应该是:

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

结论

在本文中,我们介绍了如何使用 Apollo-Server-Express 为应用程序提供可扩展的 GraphQL API。我们从安装和配置开始,然后介绍了如何定义 GraphQL 的 Schema 和 Resolver,并演示了如何使用 GraphQL API 进行查询和变更。

GraphQL 提供了一种更加高效、强大和灵活的方式来设计和查询 API。使用 Apollo-Server-Express 可以使我们更加轻松地构建可扩展的 GraphQL API,并且可以与现有的 Express 应用程序集成。如果你正在寻找一种更加灵活和强大的 API 设计方式,那么 GraphQL 和 Apollo-Server-Express 绝对值得一试。

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

纠错
反馈