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 有许多好处:
开发人员可以明确地知道 API 中哪些字段可以使用及它们的返回类型,这使得开发 API 更加容易,同时也能保证 API 发生变化时能够及时发现并解决。
GraphQL 允许客户端指定它想要获取的数据,这意味着不再需要在客户端进行不必要的 API 调用。
GraphQL 有更好的类型系统,这使得 API 无误更加容易,同时也能克服多个工程之间的 API 兼容性问题。
如何用 Fastify 实现 GraphQL?
我们可以使用 fastify-graphql
插件来在 Fastify 中实现 GraphQL。
安装 fastify-graphql
插件:
npm install --save fastify-graphql graphql
构建一个 Fastify 应用程序:
const fastify = require('fastify')({ logger: true })
加入路由:
-- -------------------- ---- ------- --------------- ------- ------- ---- ----------- -------- ----- --------- ------ -- - --- - -- -- ------ ---- -- ------- -- ----- -------- - ----- ----------------------------- - -- ---- ------- ----- -- -------------------- - ----- ------- - ----------------- - - -- --------------- ------- ------ ---- ----------- ------- - -- ---- ------- --- ------ -- -------- ----- --------- ------ -- - ----- -------- - ----- ----------------- ------ ------------------- -- -------------------- - --
在路由中加入 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