在现代 Web 开发中,实现一个可扩展、高效的 RESTful API 是一个非常重要的任务。然而,RESTful API 在某些情况下并不总是最适合的解决方案,尤其是在涉及多方面数据查询的情况下。这时,GraphQL 就显得更加适合了。GraphQL 是 Facebook 开发的一种查询语言和运行时环境,旨在提高 API 查询效率和灵活性。在本文中,我们将介绍如何使用 Hapi 和 GraphQL 实现一个可扩展的 API。
Hapi 是什么?
Hapi 是一个 Node.js Web 框架,它提供了一套简单明了的 API 来构建 Web 应用程序和服务。它的灵活性和可扩展性使它成为开发高效、快速 Web 服务的有力选择。
GraphQL 是什么?
GraphQL 是 Facebook 开发的一种查询语言和运行时环境,旨在提高 API 查询效率和灵活性。使用 GraphQL,客户端可以请求自己所需要的数据,避免了出现不必要的数据下载和处理。
GraphQL 特有的一个重要概念是 “类型定义”,它描述了所有可用数据类型以及它们之间的关系。这样,客户端可以在运行时使用这些类型,并对它们进行 CRUD 操作(增删改查)。
Hapi 和 GraphQL 协同工作
使用 Hapi 和 GraphQL 来实现一个 Web 服务 API,我们可以使用以下模块:
hapi: 我们将使用 Hapi 框架构建我们的 Web 服务 API。
graphql: 该模块将用于处理 GraphQL 查询。
hapi-graphql: 它是将 GraphQL 运行时集成到 Hapi 框架中的插件。
开始构建 Web API
安装依赖
在构建之前,我们需要将以下依赖项安装到项目中:
npm install --save hapi graphql hapi-graphql
引入模块
让我们开始创建 index.js
文件,并引入 Hapi、graphql 和 hapi-graphql 模块:
const Hapi = require('hapi'); const { graphql } = require('graphql'); const { graphqlHapi, graphiqlHapi } = require('hapi-graphql');
定义 GraphQL schema
让我们定义一个 GraphQL schema 来描述我们的数据 Person
和 Company
。
-- -------------------- ---- ------- ----- - ------------------ -------------- -------------- ---------- ----------- - - ------------------- ----- ---------- - --- ------------------- ----- --------- ------- -- -- -- --- - ----- --------- -- ----- - ----- ------------- -- ---- - ----- ------------- -- -------- - ----- ------------ --------------- - -- --------- ----- - - -- --- ----- ----------- - --- ------------------- ----- ---------- ------- -- -- -- --- - ----- --------- -- ----- - ----- ------------- -- --------- - ----- ------------- -- ---------- - ----- --- ------------------------ ---------------- - -- --------- ----- - - -- --- ----- --------- - --- ------------------- ----- -------- ------- -- -- -- ------- - ----- ----------- ----- - --- - ----- --------- - -- ------------- ----- - -- --------- ----- - -- -------- - ----- ------------ ----- - --- - ----- --------- - -- ------------- ----- - -- --------- ----- - - -- --- -------------- - --- --------------- ------ --------- ---
配置 Hapi 服务器
让我们创建一个 Hapi 服务器并在配置中添加 hapi-graphql 插件:
-- -------------------- ---- ------- ----- ------ - --- ------------- ----- ---- --- -------------- ------- ------ ----- ---- -------- ----- ---- -- - ------ ------ -------- - --- ----------------- ------- ------------ -------- - ----- ----------- --------------- -- -- -- ------ --- ------ - ----- ---- -- - --- ----------------- ------- ------------- -------- - ----- ------------ ---------------- - ------------ ---------- - - --- --------------- ------------------- ------- --- ---------------------
在上述代码中,首先我们创建一个 Hapi 服务器并添加了一个
/
路由来测试服务器是否运行。接下来,我们通过调用
server.register()
函数来添加 hapi-graphql 插件。该插件需要以下配置:
path
: 可选的,GraphQL 请求的端点。默认是/graphql
。graphqlOptions
: 必需的,它是一个函数,需要返回一个对象options
,包含 GraphQL schema,以及其他任何相关的配置选项。在此例中,我们将 schema 传递给options
对象。route
: 可选的,包含路由配置的对象。在此例中,我们将cors
设置为true
。接下来,我们定义了另一个插件 graphiqlHapi。它用于提供图形用户界面(GUI)来测试 GraphQL 查询。
处理 GraphQL 查询
访问 http://localhost:4000/graphql
我们现在可以使用 GraphQL 查询来获取数据。例如:
-- -------------------- ---- ------- -- ----- - -- ---------- ---- - -- -- -- ---- -- --- -- ------- - -- -- -- ---- --- -------- --- - --- - --- -
在这个查询中,我们请求一个 person
的数据,并将该 id
传递给查询。在这个查询中,我们还请求了关联公司的数据。该查询将返回 JSON 格式的数据。
结论
使用 Hapi 和 GraphQL 实现 Web API 的好处是数据查询灵活,客户端可以查询所需要的数据,并避免不必要的数据下载和处理。在这篇文章中,我们使用 Hapi 和 GraphQL 进行了 API 实现,并提供了示例代码。如果你想构建高度定制化、灵活、可扩展的 API,那么使用 Hapi 和 GraphQL 是一个很好的选择。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f4b300c5c563ced563b67e