使用 GraphQL 和 Neo4j 构建服务

在当前的 Web 开发领域中,随着前端技术的快速发展,很多厂商都推出了自己的前端框架,例如 React、Vue、Angular 等。但是,这些框架只是实现了前端和用户交互的功能,而后端结构的搭建和管理依旧需要进行开发和管理。本篇文章将介绍如何使用 GraphQL 和 Neo4j 构建服务,为前端提供数据、业务逻辑和多种数据的查询功能。

GraphQL

GraphQL 是一种数据查询和操作语言,它被设计为用于构建客户端和服务器之间的 API。GraphQL 不同于传统的 RESTful API,它采用的是一个强类型的数据查询语言。GraphQL 暴露了一套类型系统,允许客户端明确地表达他们的查询意图,并允许服务器执行和验证这些查询。

GraphQL 的优点:

  • 前端可以按照自己的需求来查询所需数据。
  • 能够获取指定字段,减少了从服务端返回大量无用数据的情况。
  • 通过数据的关系结构能够正确的进行字段嵌套,简化前端和后端交互的程序。

开发使用 GraphQL 需要遵循以下的步骤:

1.定义 GraphQL schema

GraphQL 的 schema 定义了所有可以被查询的字段和类型。入门的 GraphQL schema 如下所示:

---- ----- -
  ------ ------
-

这个 schema 定义了一个 Query 类型,并且该类型支持一种叫做 hello 的字段,该字段返回的类型是 String。

2. 实现 GraphQL resolver

定义 schema 后,还需要定义 resolver,它们是负责获取数据的函数。下面的例子示范了如何实现 resolver:

----- ---- - -
  ------ -- -- ------ --------
--

在这里,我们在根对象上实现了 hello 查询的解析器。它实际上是一个普通的 JavaScript 函数,可以获取任何需要的数据,例如从数据库或者其他 API 获取。

3. 启动 Express 服务器

Express 是 Node.js 的一个框架,用于构建 Web 应用和 API。下面的代码展示如何启动一个 GraphQL 服务器。

----- ------- - -------------------
----- - ----------- - - ---------------------------
----- - ----------- - - -------------------

----- ------ - -------------
  ---- ----- -
    ------ ------
  -
---

----- ---- - -
  ------ -- -- ------ --------
--

----- --- - ----------
------------------- -------------
  ------- -------
  ---------- -----
  --------- -----
----
---------------- -- -- -------------------- ------- ------ --- ------- -- --------------------------

在以上代码中,我们构建了一个 GraphQL schema,并通过 graphqlHTTP 函数生成了一个将 schema 传递到请求中的中间件,然后将其传递给 Express 应用程序。此时,您需要访问 http://localhost:4000/graphql,就可以使用 GraphiQL 工具进行测试了。

Neo4j

Neo4j 是一个开源的、高性能、且符合 ACID 原则的图形数据库,能够处理大规模的、高度互联的数据。使用 Neo4j,可以轻松地存储和查询高度相关的数据,例如社交网络、网络安全、语义网、推荐引擎、内部数据交换以及其他各种用例。

1. 安装 Neo4j 并创建图

可以通过以下命令来下载、安装和启动 Neo4j 数据库。

---- -- ------------------------------------------------------------------------------------------ - --- --- -
-- ----------------------------
-------------- --

通过上述命令,我们可以部署一个 Neo4j 数据库实例并启动服务。此时,您可以访问 http://localhost:7474,然后进入数据库可视化界面。

现在,我们可以通过 Cypher 查询语言,来创建一个新的节点和关系:

------ ----------- ------ ------ ------ ----------------------------------------- ------ ------ ------ -----------------
------ ---- -- ----

以上命令创建了两个新节点,它们代表着两个人(zzq 和 wgj),然后创建了一条 FRIEND 关系,用于表示这两个人是朋友关系。

2. 安装 Neo4j GraphQL-js 和 graphql-tools

为了使用 Neo4j 和 GraphQL 构建一个服务,需要安装以下 npm 包:

--- ------- ---------------- -------------

通过 neo4j-graphql-js,现在可以通过 Cypher 查询语言来访问 GraphQL API。因此,我们可以通过 GraphQL 来查询我们刚刚创建的数据。

GraphQL + Neo4j

1. 定义 schema

下面的例子定义了一个我们可以查询的简单的 schema,用于访问 Neo4j 数据库中的 Person 和 FRIEND 类型。

---- ------ -
  ----- ------
  ------ ------
-
---- ------ -
  ----- ------
  --- ------
-

---- ----- -
  -------- --------
  -------- --------
-

2.通过 Cypher 查询数据

我们现在可以通过使用 graphql-tools 来生成我们的 resolvers,来将 schema 与数据进行关联。

----- - ------------------- - - ----------------------------
----- - ------------ - - -------------------------
----- ----- - ------------------------

----- -------- - -
---- ------ -
  ----- ------
  ------ ------
-

---- ------ -
  ----- ------
  --- ------
-

- --- ----- ---- ------- --- --- --------- ------- ------- ----
- ------- --- ------- --- --- ------- ----
---- ----- -
  -------- --------
  -------- --------
-
--

----- ------ - -------------
  ------------------------
  ------------------------- -----------
--

----- ------ - --------------------- -------- ---
----- ------ - --- --------------
  ------- -------- - ------ -
---

----------------------- --- -- -- -------------------- ------ ----- -- ----------

这里我们使用 Apollo Server 作为 GraphQL 的实现,然后将其和 neo4j-graphql-js 进行整合,实现了对我们已经创建的数据进行查询。

3.查询数据

我们将如何查询我们的 Neo4j 图形数据库,并且在 GraphQL API 中返回它。

----- ---------- -
  ------- -
    ----
    -----
  -
-

----- ---------- -
  ------- -
    ---- -
      ----
      -----
    -
    -- -
      ----
      -----
    -
  -
-

现在,您就可以运行上述查询,验证您的 GraphQL API 是否可以正确返回您期望的数据。

总结

本文通过介绍 GraphQL 和 Neo4j,演示了如何使用它们构建一个 GraphQL API 来查询美食家的数据。通过结合 Neo4j 和 GraphQL 可以更便捷地构建并查询一个高度互联的数据集。同样,您可以使用它们来构建其他类型的 API,例如社交网络、勾当、语义网络等。

现在,您已经成功地创建并测试了一个 GraphQL API,并意识到了它的优势,那么如何应用这些知识呢?首先你可以尝试去构建一个自定义的 GraphQL API,并将它与自己的应用进行整合。其次,如果您想进一步学习 GraphQL 和 Neo4j,可以阅读官方文档,或者参考 社区提供的周边工具包,以便更轻松地完成下一步的学习。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6645b000d3423812e43b5102