前言
Fastify 是一个性能卓越的 Node.js Web框架,它是目前市面上最快的框架之一。GraphQL则是一种用于API开发的查询语言和运行时环境。由于其优美的数据查询和类型系统,它现在已经成为了前端领域的一种新型选择。
今天我们将会探讨如何将 Fastify 和 GraphQL 整合到一起,以及这种整合能够带来的各种优点。
前置知识
在深入理解本文之前,需要先掌握一些基础知识:
- Node.js以及 related concepts (npm, package.json, etc.)
- Fastify 和 GraphQL 的基本概念和使用
- 了解 RESTful API 和 GraphQL API 之间的区别
整合流程
要将 Fastify 和 GraphQL 整合起来,我们需要为 Fastify 安装 graphQL 插件。
npm i -S fastify-gql graphql
这个命令将会在你的项目中安装 Fastify 插件以及 GraphQL 依赖。
我们需要像下面这样引用它们。
const fastify = require('fastify')({ logger: true }); const { graphqlFastify, graphiqlFastify } = require('fastify-gql'); // some initialization logic fastify.register(graphqlFastify, { schema, graphiql: true }); fastify.register(graphiqlFastify, { endpointURL: '/graphql', graphiqlOptions: { endpointURL: '/graphql', }, }); // some routes logic, etc. fastify.listen(8080, '0.0.0.0');
上述代码片段中,我们引入了 Fastify 依赖以及 GraphQL 快速集成插件。
我们向 fastify.register
注册 GraphQL 插件,并传递 schema
参数。如果我们使用的是微型 GraphQL,schema
可以是数据定义语言(DDL)或 JavaScript 对象。当于传递 graphiql: true
参数时,我们可以浏览 GraphQL 可编辑 IDE。
接着,我们像安装 GraphQL 插件一样,注册了 GraphiQL 插件。
所以,Fastify 和 GraphQL 是什么?
Fastify(Fast + Node.js)是目前市面上最快的 node.js Web 框架之一。
GraphQL 是一种查询语言和运行时环境,用于API开发。它有优美的数据查询和强类型系统,因此现在成为了前端领域的新宠。
GraphQL 和 RESTful API 都是客户端与后端服务进行通信的协议。GraphQL API 可以通过查询制定结果映射,而 RESTful API 则需要在不同的端点上使用 API 动词调用不同的资源。
需要解决的问题
RESTful API在广泛使用的同时,也存在着以下问题:
- 查询最终提供了太多或太少的数据。
- 前端开发人员需要与多个 API 端点进行频繁的交互。对于复杂对象,需要多个 REST API 查询才能够得到完整的信息。
- 版本控制通常是基于 URI 风格的 API,这使得版本迭代和升级变得困难。
尽管 GraphQL 不是万能的,但是它确实提供了一种不同的方法来构建 API。其中,GraphQL 查询语言通常包含在它的运行时环境中。
为什么选择 Fastify?
Fastify 有以下特征或优势:
- 最高的性能(响应速度超过 Koa 和 Express)。
- 真正的无侵入性(不管你的应用是用什么编写的,你都可以使用 Fastify)。
- 基于插件的生态系统,可以轻松添加功能。
- 针对 Node.js 的优化:快速的请求、响应和路由器。
为什么选择GraphQL?
GraphQL 也有以下优点:
- 客户端可以精确地指定所需的数据,而不是像 RESTful API 那样全部请求。这可以避免任何冗余和无用的数据。同时,GraphQL 的运行时系统可以只返回客户端需要的内容,以便满足其表示所需的渲染。
- 没有版本控制问题。GraphQL 的 API 是一致的,因此每个客户端都可以按照其指定的方式访问 API。
- 强类型系统。GraphQL 的 API 响应始终包含指定的模式。这样,客户端开发人员可以根据数据模式更加清楚地了解 API 的工作原理,并更加明确了前后端之间的数据协商方式。
我们可以看到,GraphQL 和 RESTful API 有很大不同,尤其是由于 GraphQL 的查询语言,因此它是构建 API 的不错选择。
和 RESTful API 相比,GraphQL 的优势在哪里?
- 客户端可以精确指定数据
- 没有版本控制
- 强类型系统
运用
它扩展了我们能够构建的API类型,并提供了一种完全不同的方式来访问数据。现在,我们所需要做的就是为我们的Fastify应用程序添加GraphQL模式。
schema :
const typeDefs = ` type User { id: Int! firstName: String! lastName: String! bio: String } type Query { users: [User] } `;
resolvers :
const resolvers = { Query: { users: () => users } };
创建服务器并向Fastify注册GraphQL插件:
const fastify = require('fastify')({ logger: true }); const { graphqlFastify, graphiqlFastify } = require('fastify-gql'); const schema = require('./schema'); const resolvers = require('./resolvers'); fastify.register(graphqlFastify, { schema, rootValue: resolvers, graphiql: true }); fastify.register(graphiqlFastify, { endpointURL: '/graphql', graphiqlOptions: { endpointURL: '/graphql', }, }); fastify.listen(8080, '0.0.0.0');
大功告成! 现在,我们具有了一个可用的GraphQL API和客户端,可满足许多最重要的应用程序需求:精确指定所请求的数据,避免版本控制问题,并提供强类型系统。
总结
如上所述,Fastify 和 GraphQL 的整合能够为我们提供很多优点。我们可以使用 GraphQL 的查询语言准确地获取我们需要的数据,同时避免 RESTful API 的版本控制问题。而使用 Fastify 则可以确保我们有一个高性能的应用程序,在大数据量的情况下也顺畅运行。希望这篇网络日志为您提供了足够的启发和指导。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a8ccbfadd4f0e0ff202de3