如何在 Fastify 上实现 GraphQL

阅读时长 8 分钟读完

GraphQL是一种用于 API 的查询语言,它提供了一种基于数据的API设计方法,让前端可以精确地查询自己所需要的数据。在现代Web应用中,GraphQL已经成为了非常热门的技术之一。本文将介绍如何在Fastify上实现GraphQL。

什么是Fastify

Fastify是一个快速和低开销的Web框架,它旨在为web开发人员提供出色的性能和开发体验。Fastify主要特点如下:

  • 十分简洁,代码逻辑简单
  • 非常快速,基于Node.js的事件循环
  • 插件式架构,可提供灵活的扩展
  • 支持Promises/A+规范的API
  • 支持错误处理和日志

使用Fastify实现GraphQL

安装Fastify

在开始使用Fastify来实现GraphQL之前,我们需要先安装Fastify。先在终端中进入项目所在目录,使用npm安装Fastify:

安装GraphQL相关依赖

除了Fastify之外,我们还需要安装GraphQL相关依赖。执行以下命令:

编写GraphQL服务

我们现在可以开始编写GraphQL服务了。首先,我们需要引入Fastify和GraphQL,然后使用Fastify来创建一个HTTP服务器,代码如下:

然后,我们需要定义GraphQL模式,模式定义了数据模型、数据类型、查询和变更。我们这里使用demo模式,模式中包括了查询、类型、数据和枚举。代码如下:

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

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

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

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

在我们的示例中,我们定义了一个查询hello、一个用户类型User,一个变更createUser,以及一个枚举类型Gender。

最后,我们可以使用Fastify公开GraphQL服务并启动Fastify实例:

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

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

这里我们使用了Fastify正式开放的GraphQL插件。我们将我们之前定义的schema传递给该插件,graphiql参数启用了GraphQL的浏览器端应用程序。

使用GraphQL服务

现在我们的GraphQL服务已经启动,在浏览器中访问localhost:3000/graphql,将会看到一个GraphQL互动式的客户端调试工具。尝试向其发送数据查询,下面是我们测试的样例:

我们向GraphQL请求hello查询,GraphQL返回了一个带有hello属性的响应:

实现用户接口

用demo模式很难满足实际应用中的要求,现在我们简单的模拟了一个简单的模式。接下来,我们将使用一个实际的示例来说明如何在Fastify上使用GraphQL来实现用户接口。

首先,我们将定义一个User对象:

然后,我们需要一个数据存储到一个数组中,该数组将被查询和变更所使用:

现在我们已经有了数据,我们可以使用GraphQL来查询和变更该数据。首先,我们来定义查询hello:

这里我们引入了两种新概念:getUser和getUsersByGender。这些查询可以返回一个User对象或一个查询User对象的数组。

现在我们来实现getUser和getUsersByGender这两个查询:

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

我们可以看到,根查询模式的“hello”查询返回了一个字符串。getUser查询使用args获取ID参数,并且在数据中查找相应的对象。getUsersByGender查询接受Gender参数并返回满足条件的所有用户。

现在我们需要定义变更createUser来创建一个新的用户:

和查询类似,我们定义了一个Mutation类型,并定义了一个createUser变更,这个变更接受4个参数。

现在我们来实现createUser变更:

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

此处很简单,我们只需获取args参数,创建User对象,将其添加到数据中并返回。

最后,我们将所有查询、变更和类型组成模式:

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

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

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

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

现在我们的GraphQL示例服务已经可以使用了。启动服务器并访问localhost:3000/graphql,使用我们之前定义的查询和变更模式进行测试。

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

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

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

总结

在本文中,我们介绍了如何在Fastify上实现GraphQL,提供了一种快速开发API的方法。使用Fastify和GraphQL,你可以快速地构建一个API,并使用GraphQL清晰的查询语言来获取所需的数据。我们还提供了一个完整的示例,展示了如何使用GraphQL在Fastify中实现用户接口。

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

纠错
反馈