GraphQL 是一种用于 API 的查询语言,它允许客户端精确地指定它们需要的数据,避免了传统 REST API 中的过度获取数据的问题。Hapi 是一个 Node.js 框架,它提供了强大的路由和插件系统,使得构建 Web 应用程序变得更加容易。本文将介绍如何在 Hapi 应用程序中构建和运行 GraphQL API。
安装依赖
在开始构建 GraphQL API 前,需要安装以下依赖:
hapi
:Hapi 框架graphql
:GraphQL 的核心库graphql-hapi
:将 GraphQL 集成到 Hapi 中的插件graphql-tools
:用于构建 GraphQL schema 的工具库apollo-server
:GraphQL 服务器实现
可以使用以下命令安装这些依赖:
npm install hapi graphql graphql-hapi graphql-tools apollo-server
创建 GraphQL Schema
GraphQL 的核心是 schema,它定义了 API 中的所有类型、查询和变异。可以使用 graphql-tools
中的 makeExecutableSchema
函数来创建 schema。以下是一个简单的例子:
-- -------------------- ---- ------- ----- - -------------------- - - ------------------------- ----- -------- - - ---- ----- - ------ ------ - -- ----- --------- - - ------ - ------ -- -- ------ ------- - -- ----- ------ - ---------------------- --------- --------- --- -------------- - -------展开代码
这个 schema 定义了一个 Query
类型,其中包含一个 hello
字段,它返回字符串 "Hello world!"
。resolvers
对象定义了如何解析查询字段。
集成 GraphQL 到 Hapi
使用 graphql-hapi
插件可以将 GraphQL 集成到 Hapi 中。以下是一个简单的例子:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- - ----------- - - ------------------------ ----- ------ - -------------------- ----- ------ - --- ------------- ----- ----- ----- ----------- --- ----- -------- ------- - ----- ----------------- ------- ------------ -------- - ----- ----------- --------------- - ------ -- ------ - ----- ---- - - --- ----- --------------- ------------------- ------- --- --------------------- - --------展开代码
这个代码片段创建了一个 Hapi 服务器,并将 graphqlHapi
插件注册到了服务器中。graphqlOptions
对象包含了 schema 对象,path
属性指定了 GraphQL API 的路径,route
对象启用了跨域资源共享(CORS)。
运行 GraphQL API
现在,GraphQL API 已经可以在 Hapi 应用程序中运行了。可以使用以下命令启动服务器:
node index.js
然后,可以使用 GraphQL Playground 或其他 GraphQL 客户端工具来测试 API。以下是一个简单的查询示例:
query { hello }
该查询应该返回 "Hello world!"
字符串。
结论
本文介绍了如何在 Hapi 应用程序中构建和运行 GraphQL API。首先,需要创建一个 GraphQL schema,然后使用 graphql-hapi
插件将其集成到 Hapi 中。最后,可以使用 GraphQL Playground 或其他 GraphQL 客户端工具来测试 API。这种方法可以使得构建和维护 Web 应用程序变得更加容易和高效。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/673ee5ce90e7ed93bee54364