本文将介绍如何使用 Fastify 框架来构建 GraphQL API。Fastify 是一个快速、低开销、可扩展的 Node.js Web 框架,它拥有优秀的性能和可读性,并且易于使用。GraphQL 是一种用于 API 的查询语言,它使客户端能够准确地指定它们需要的数据,并且只返回所需的数据。GraphQL 还具有良好的类型系统和强大的工具生态系统。将 Fastify 和 GraphQL 结合使用,可以创建高性能、灵活和易于维护的 API。
准备工作
在开始之前,需要安装 Node.js 和 npm。可以在 Node.js 官网 上下载并安装最新版本的 Node.js。安装完成后,可以在命令行中运行以下命令来检查 Node.js 和 npm 是否成功安装:
node --version npm --version
接下来,需要创建一个新的 Node.js 项目,并在其中安装 Fastify 和 graphql-js:
mkdir fastify-graphql-api cd fastify-graphql-api npm init -y npm install fastify graphql graphql-tools
创建 GraphQL Schema
首先,需要创建一个 GraphQL Schema,它定义了 API 的数据结构和操作。GraphQL Schema 由类型、字段、查询和变异组成。在本例中,将创建一个简单的 Todo 类型,它具有 id、title 和 completed 字段,以及查询所有 Todo 和根查询类型。可以在 schema.js
文件中定义 Schema,如下所示:
// javascriptcn.com 代码示例 const { gql } = require('graphql'); const typeDefs = gql` type Todo { id: ID! title: String! completed: Boolean! } type Query { todos: [Todo!]! } `; module.exports = typeDefs;
在这个 Schema 中,定义了一个 Todo 类型,它具有三个字段:id、title 和 completed。id 是一个 ID 类型,它是一个全局唯一的字符串。title 是一个 String 类型,它表示 Todo 的标题。completed 是一个 Boolean 类型,它表示 Todo 是否已完成。还定义了一个 Query 类型,它具有一个名为 todos 的字段,它返回一个 Todo 数组。
创建 Resolver
接下来,需要创建 Resolver,它实现了 GraphQL Schema 中定义的操作。Resolver 是一个函数,它接受输入参数并返回输出结果。在本例中,将创建一个简单的 Resolver,它返回一个硬编码的 Todo 数组。可以在 resolver.js
文件中定义 Resolver,如下所示:
// javascriptcn.com 代码示例 const todos = [ { id: '1', title: 'Learn GraphQL', completed: false, }, { id: '2', title: 'Build a GraphQL API', completed: false, }, ]; const resolvers = { Query: { todos: () => todos, }, }; module.exports = resolvers;
在这个 Resolver 中,定义了一个硬编码的 Todo 数组,它包含两个 Todo 对象。还定义了一个 todos Resolver,它返回这个 Todo 数组。
创建 Fastify 应用程序
现在,可以使用 Fastify 来创建一个 HTTP 服务器,并将 GraphQL API 添加到它上面。Fastify 提供了一个 fastify-gql
插件,它可以将 GraphQL API 添加到 Fastify 应用程序中。可以在 app.js
文件中创建 Fastify 应用程序,并将 fastify-gql
插件添加到它上面,如下所示:
// javascriptcn.com 代码示例 const fastify = require('fastify')(); const { graphqlFastify } = require('fastify-gql'); const typeDefs = require('./schema'); const resolvers = require('./resolver'); fastify.register(graphqlFastify, { schema: typeDefs, resolvers, graphiql: true, }); fastify.listen(3000, (err) => { if (err) { console.error(err); process.exit(1); } console.log('Server listening on port 3000'); });
在这个应用程序中,使用 fastify()
函数创建一个 Fastify 实例。然后,使用 fastify.register
函数将 fastify-gql
插件添加到 Fastify 应用程序中。在 register
函数中,指定了 GraphQL Schema 和 Resolver,以及启用了 GraphiQL IDE。最后,使用 fastify.listen
函数启动 HTTP 服务器,并监听 3000 端口。
测试 GraphQL API
现在,可以使用 GraphiQL IDE 来测试 GraphQL API。可以在浏览器中打开 http://localhost:3000/graphql
,进入 GraphiQL IDE。在 GraphiQL IDE 中,可以使用以下查询检索所有 Todo:
query { todos { id title completed } }
执行查询后,应该会得到一个包含两个 Todo 对象的结果。可以尝试修改查询,以过滤和排序 Todo。
总结
本文介绍了如何使用 Fastify 框架来构建 GraphQL API。首先,创建了一个简单的 GraphQL Schema,它定义了 Todo 类型和查询所有 Todo 的操作。然后,创建了一个简单的 Resolver,它返回一个硬编码的 Todo 数组。最后,使用 Fastify 应用程序将 GraphQL API 添加到 HTTP 服务器中,并使用 GraphiQL IDE 进行测试。使用 Fastify 和 GraphQL 结合使用,可以创建高性能、灵活和易于维护的 API。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65560cccd2f5e1655d083eba