GraphQL 是一种由 Facebook 开发的数据查询语言和运行时环境,它可以让客户端精确地指定数据需要从服务器端请求,减少网络通信次数和数据传输量,提升应用性能和用户体验。Hapi 是一种 Node.js 的开源 Web 应用框架,它提供了强大的路由、插件、中间件等功能,可以方便地构建 RESTful API 和 Web 应用,因此与 GraphQL 配合使用可以更加方便快捷地实现后端 API 的开发。
准备工作
在使用 Hapi 和 GraphQL 进行开发前,我们需要安装相关的包。打开终端,进入项目所在的目录,执行以下命令:
npm install hapi graphql apollo-server-hapi
其中,apollo-server-hapi
是一个 GraphQL 实现框架,它可以与 Hapi 集成使用。
编写代码
在安装好相关包后,我们可以开始编写 Hapi 与 GraphQL 集成的代码了。首先,需要在项目中新建一个 graphql.js
文件,代码如下:
-- -------------------- ---- ------- ----- - ------------ - - ------------------------------ ----- - --------- --------- - - -------------------- ----- ------ - --- -------------- --------- ---------- --- ----- -------- - ----- -------- -------- -- - ----- --------------- ------------------------ ---- ----------- ----- ----------- --- -------------------- ------ ------- -- ------------------------ -- -------------- - - ------- -------- --
在这个文件中,我们引入了 ApolloServer
模块,并从 schema.js
文件中引入了 typeDefs
和 resolvers
,这个文件将在下面详细讲解。然后,我们创建了一个 ApolloServer
的实例,并在构造函数中传入了 typeDefs
和 resolvers
,创建了一个 register
函数,它会在 Hapi 启动时被调用,用于启动 GraphQL 服务器并将其挂载到 Hapi 上。
接下来,我们需要在 index.js
文件中启动 Hapi 服务器,并注册上面创建的 GraphQL 插件。代码如下:
-- -------------------- ---- ------- ----- ---- - ---------------------- ----- - ------- -------------- --------- --------------- - - --------------------- -- -- ---- -- ----- ---- - ----- -- -- - ----- ------ - ------------- ----- ----- ----- ------------ --- -- -- ------- -- ----- ----------------- ------- ---------------- -------- - ------- ------------- -- --- -- -- ---- --- ----- --------------- ------------------- ------- -- --------------------- -- -- -- ---- --- -------
在这个文件中,我们首先引入了 @hapi/hapi
模块,创建了一个 Hapi 实例。然后,我们引入了上面创建的 graphql.js
文件中导出的 server
和 register
,并在 server.register
方法中传入了 graphqlRegister
作为插件注册函数。最后,我们启动了 Hapi 服务器。
为了让 GraphQL 服务器工作正常,我们需要在 schema.js
文件中编写 GraphQL 的 typeDefs
和 resolvers
。我们例子中定义了一个 Query
类型和一个 hello
字段,用于返回字符串 Hello, GraphQL!
,示例代码如下:
-- -------------------- ---- ------- ----- - --- - - ------------------------------ ----- -------- - ---- ---- ----- - ------ ------ - -- ----- --------- - - ------ - ------ -- -- ------- ---------- -- -- -------------- - - --------- --------- --
在这个文件中,我们引入了 gql
方法,用于创建 GraphQL 的类型定义。然后,定义了一个 Query
类型,其中包含一个 hello
字段,它的类型是 String
。在 resolvers
中,我们为 hello
字段定义了一个返回函数,用于返回字符串 Hello, GraphQL!
。
测试 GraphQL API
在代码编写完毕后,我们可以启动 Hapi 服务器来测试 GraphQL API 是否正常工作。执行以下命令:
node index.js
在浏览器中输入 http://localhost:3000/graphql
,即可看到 GraphiQL 开发工具,它提供了一个交互式的开发环境,可以方便地对 GraphQL API 进行测试和调试。
在 Schema
标签页中,可以看到我们定义的 hello
字段,点击运行按钮,即可在右侧的结果面板中看到返回结果。
query { hello }
{ "data": { "hello": "Hello, GraphQL!" } }
可以看到,我们成功地创建了一个 Hapi 和 GraphQL 集成的 API,可以在开发中使用 GraphQL 解决复杂的后端数据交互问题。
总结
本文介绍了如何在 Hapi 框架中使用 GraphQL 实现 API,通过安装相关的包、编写代码和测试 API 的方法,详细讲解了如何使用 Hapi 和 GraphQL 集成进行后端 API 的开发。此外,本文还提出了使用 GraphQL 的优点和适用场景,为读者深入学习和实践 GraphQL 提供了有益的指导。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649aa28948841e989478fd3c