Fastify 下的 GraphQL 实现及使用教程

阅读时长 9 分钟读完

GraphQL 是一种用于 API 开发的查询语言和运行时系统。它提供了一种让客户端精确地指定其需要的数据的方式,并且只返回这些数据。在现代 Web 应用程序中,GraphQL 已经成为了一个非常流行的 API 开发标准。

Fastify 是一个快速和低开销的 Web 框架,其在 Node.js 上运行。Fastify 由逐步插件化的架构和设计驱动的方法构建,在处理请求和响应时具有出色的性能和扩展性。

在本文中,我们将学习如何在 Fastify 中使用 GraphQL。我们将讲解什么是 GraphQL,为什么要在 Fastify 中使用 GraphQL,如何设置 GraphQL,并演示如何创建一个 GraphQL API。

什么是 GraphQL?

GraphQL 是一种查询语言,用于 API 的创建。GraphQL 由 Facebook 开发,它的目的是替代 RESTful API。GraphQL 的一大优点是能大幅减少不必要的 API 调用,因为客户端只需要指定需要获取的数据,而服务端只会返回客户端所需的数据。

GraphQL 的核心是一个类型系统,该类型系统规定了可用的字段以及它们的返回类型。利用这个类型系统,我们可以定义 API 的输入及输出。

GraphQL 的查询语句由字段和参数组成。查询语句定义了客户端想要获取的数据结构和格式,具体的数据结构和格式由 GraphQL 服务器返回。

为什么要使用 GraphQL?

使用 GraphQL 有许多好处:

  1. 开发人员可以明确地知道 API 中哪些字段可以使用及它们的返回类型,这使得开发 API 更加容易,同时也能保证 API 发生变化时能够及时发现并解决。

  2. GraphQL 允许客户端指定它想要获取的数据,这意味着不再需要在客户端进行不必要的 API 调用。

  3. GraphQL 有更好的类型系统,这使得 API 无误更加容易,同时也能克服多个工程之间的 API 兼容性问题。

如何用 Fastify 实现 GraphQL?

我们可以使用 fastify-graphql 插件来在 Fastify 中实现 GraphQL。

安装 fastify-graphql 插件:

构建一个 Fastify 应用程序:

加入路由:

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

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

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

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

在路由中加入 GraphQL 代码(schema、resolver、context 等):

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

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

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

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

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

使用示例

我们可以在 fastify-graphql 插件中创建以下样例代码:

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

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

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

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

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

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

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

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

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

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

现在,我们可以在浏览器中访问 http://localhost:3000/graphql,并且在 GraphiQL 编辑器中输入以下查询:

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

返回的结果如下:

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

结论

Fastify 是一个快速和低开销的框架,在处理请求和响应时具有出色的性能和扩展性。与之结合使用的 fastify-graphql 插件,可以轻松地创建 GraphQL API。

在本文中,我们介绍了 GraphQL 的概念以及它的优势,然后指导您如何在 Fastify 中使用 GraphQL。我们还提供了一个示例代码,向您演示了如何轻松地创建一个 GraphQL API。

希望这篇文章对您学习 GraphQL 和 Fastify 的使用有所帮助。

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

纠错
反馈