在现代的互联网开发领域中,JavaScript 已经成为了其中一种不可或缺的语言。而前端开发作为其中的一部分,也是 JavaScript 的天下。在前端开发中,如果要实现数据的获取和传输,一般都是通过 AJAX 或者 Websocket 等技术来实现的。但是,随着 GraphQL 技术的出现,有一种新的方式可以让前端应用更加方便地获取和处理数据——GraphQL API 服务。
其中,Apollo 是一个知名的 GraphQL 解决方案,它提供了一套完整的 GraphQL 开发工具链,包括了服务器端和客户端的发展框架,以及一些相关模块和工具。而 apollo-server-hapi,就是 Apollo 中的一个重要子模块,它可以让你在 Hapi.js Web 框架上快速和无缝地搭建 GraphQL API 服务。下面,我们就来详细讲解一下 apollo-server-hapi 的使用方法和注意事项。
环境要求
- Node.js 版本>=8.0
- NPM 包管理器
安装
你可以直接通过 NPM 包管理器来安装 apollo-server-hapi:
npm install apollo-server-hapi
快速上手
如果你已经了解了 GraphQL 和 Hapi.js 的基本用法,那么使用 apollo-server-hapi 构建 GraphQL API 服务就非常简单了。你只需要创建一个 Hapi.js 的服务器实例,然后将其作为 apollo-server-hapi 的参数。代码示例如下:
-- -------------------- ---- ------- ----- ---- - ---------------------- ----- - ------------- --- - - ------------------------------ -- -- ------- ------ ----- -------- - ---- ---- ----- - ------ ------- - -- -- -- --------- ----- --------- - - ------ - ------ -- -- ------ -------- -- -- ----- ---- - ----- -- -- - ----- ------ - ------------- ----- ----- ----- ------------ --- ----- ------------ - --- -------------- --------- ---------- --- -- - ------ ------ --- ------- ---- ----- ------------------------------ ---- ------- --- -- -- ------- --- ----- --------------- ------------------- ------- -- --------------------- -- ---------------- -- - ----------------- ---------------- ---
上面的代码中,我们定义了一个简单的 "hello world" GraphQL 查询,然后通过 Hapi.js 服务器将其暴露出去。其中,ApolloServer 实例是 apollo-server-hapi 的核心对象,它负责解析 GraphQL 请求并将其转换成符合定义的 Schema 的返回结果。在使用时,我们只需要将其 applyMiddleware 到 Hapi.js 服务器上即可。
配置和扩展
有时候,我们需要对 ApolloServer 的一些配置项进行调整或者扩展,来满足我们特定的业务需求。
缓存
默认情况下,ApolloServer 不会对 GraphQL 查询结果进行缓存。但是,对于某些查询数据量较大或者查询较为频繁的情况下,启用缓存会显著提高查询响应速度。可以通过在 ApolloServer 对象上定义 cache 参数来开启缓存,如下所示:
const apolloServer = new ApolloServer({ typeDefs, resolvers, cache: new InMemoryCache(), });
上面的代码中,我们启用了 InMemoryCache 缓存,并将其传递到了 ApolloServer 实例中。对于特定的场景,你也可以通过定义自己的缓存来替换 apollo-server 中的默认实现。
自定义请求头
有时候,我们需要在请求头中携带一些自定义信息,以便在后续的处理中使用。可以通过在 ApolloServer 对象上定义 context 参数来传递这些变量,如下所示:
-- -------------------- ---- ------- ----- ------------ - --- -------------- --------- ---------- -------- -- ------- -- -- - ------ - --------- ------------------------------ -- -- ---
上面的代码中,我们在 context 函数中获取了 request 对象,并从中提取了 authorization 这个自定义请求头。在后续的 Resolver 处理中,就可以通过 context 对象获取到这个变量值。
自定义路由
如果你需要对 ApolloServer 的请求路由进行自定义,比如修改 GraphQL API 的接口地址路径或者添加过滤器、内置鉴权等功能,就可以通过定义一个 Hapi.js 的路由来实现。
-- -------------------- ---- ------- -------------- ------- ------- ----- ----------- -------- - -------- --------- -- -- - ------ ---------------------- --- -- -- ---
上面的代码中,我们通过 Hapi.js 的 route 方法定义了一个新路由。其中,handler 函数将请求和响应对象传递到 apollo-server-hapi 实例中进行处理。
结尾
到这里,我们就完成了对于 apollo-server-hapi 的入门学习。如果你已经熟悉了 GraphQL 和 Hapi.js 的基本用法,那么这些知识点应该是很容易理解和掌握的。在未来的前端开发中,如果需要构建 GraphQL API 服务,就可以选择 apollo-server-hapi 作为解决方案,并依据实际情况进行配置和扩展。感谢你的阅读!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/197181