快速搭建一个基于 Fastify 的 GraphQL API

· 约 12 分钟读完

前言

GraphQL 是一种 API 查询语言,通过定义类型和字段的方式来反映应用程序的数据模型。由于其灵活性和强大的查询能力,GraphQL 成为了许多应用程序的首选 API。

在本文中,我们将学习如何使用 Fastify 和 GraphQL 来快速搭建一个实用的 GraphQL API。Fastify 是一款高效且低开销的 Web 框架,可以轻松地处理高并发的请求处理场景,而且在很多情况下,Fastify 的性能也要优于其他 Node.js Web 框架。

准备工作

在开始本文的指导之前,请确保您拥有以下工具:

  • Node.js & npm
  • 一个文本编辑器

创建工程

首先,我们要创建一个新的工程。打开终端,进入您希望项目保存的目录,并执行以下命令:

上述命令创建了一个新的 Node.js 项目,并自动填充了 package.json 文件中的默认值。

接着,我们安装 Fastify 和必要的插件:

这些插件分别是:

  • Fastify:Fastify 框架本身。
  • GraphQL: 实现 GraphQL API 的核心库。
  • Fastify-autoload:用于自动加载在指定目录下的插件。
  • Fastify-cors:用于设置跨域请求的 CORS 响应头。

创建服务

我们将创建一个名为 server.js 的文件,作为我们的 GraphQL API 服务的入口点。将以下内容保存到您的 server.js 文件中:

这段代码引入了 Fastify 框架和我们即将使用的 Fastify-autoload 插件。我们还将创建一个 Fastify 实例并启用了日志记录功能,以便我们可以更方便地查看服务的运行情况。

我们还注册了以 plugins 目录为根目录的自动加载插件的功能,以便我们可以方便地将 API 的功能封装成独立的模块并按需引入。

最后,我们通过调用 Fastify 的 listen() 方法来启动服务器,监听在 3000 端口上。

如果一切顺利,启动服务时您应该会看到类似下面的输出:

请注意,如果端口 3000 已经被其他进程占用,Fastify 将会自动使用其他可用端口,而不是直接退出应用程序。

创建 GraphQL Schema

GraphQL Schema 是一个 JSON 对象,用于描述 API 服务中可以执行的操作和查询。在这个例子中,我们将创建一个简单的 GraphQL Schema,它将会暴露一个 Query 类型,允许我们查询一些假设的文章数据。

创建以下文件: plugins/graphql.js,它将是我们实际处理 GraphQL 查询请求的地方。

这段代码创建了一个 Fastify 插件,并通过 graphqlFastify 插件将 GraphQL API 绑定到 Fastify 实例上。我们还导出了一个带有 graphiql() 的函数,用于在浏览器中显示 GraphQL 的 GraphiQL 用户界面。

该函数使用 Fastify 实例暂时启动了一个 GraphiQL 界面,以显示默认请求。用户可以在此页面上编辑请求和查询,并在“Execute Query”按钮上执行请求。

除了 GraphiQL 单页应用程序之外,此函数还将指定响应的内容类型为 text/html,以确保浏览器正确地渲染该内容。

创建数据模型

在我们能够实现 GraphQL API 之前,我们需要创建一些数据类型,并定义我们将查询的数据属性。创建以下文件: plugins/schema.js。

上述代码定义了 Author, Post 和 Query 三个 GraphQL 类型。Post 类型包含字段 id, title 和 author,它们都是基本数据类型。Author 由字段 id, firstName 和 lastName 组成。

Query 类型定义指定了我们要从 API 服务器中提取的属性列表。在本例中,我们仅指定 posts 属性,将它定义为返回一个 Post 数组。

最后,我们创建了一个 resolvers 对象,它包含了我们的查询函数,实际执行查询操作。

代码结构

运行服务

在前面的步骤中,我们已经创建了必要的文件。

现在,在终端中执行以下命令来启动 API 服务:

当服务运行时,请在浏览器中访问 GraphiQL 用户界面,地址为 http://localhost:3000/graphiql。您应该可以看到类似以下屏幕截图的内容:

现在您可以在此页面上编辑 GraphQL 查询并执行它们。例如,您可以将以下代码复制到查询框中,并点击“Execute Query”来执行查询操作:

如果一切顺利,您应该可以看到与以下响应类似的结果:

结语

本文向您展示了如何快速搭建一个基于 Fastify 的 GraphQL API 服务。我们介绍了 Fastify 和 GraphQL 的基础知识和用法,并通过示例代码和步骤,让您学习到如何搭建一个 GraphQL API 服务。希望这篇文章对您有所帮助。

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