使用 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


猜你喜欢

  • RxJS 中的 interval 操作符使用实例

    RxJS 是一个非常流行的 JavaScript Reactive Extensions 库,它提供了一套函数式的 API,能够处理异步数据流,让观察者(Subscriber)能更简单、高效地处理无限...

    5 个月前
  • ES11:解析全局错误捕获意义

    在前端开发中,难免会遇到一些异常错误,例如未定义的变量、函数调用错误等等。若出现这些错误,一般情况下浏览器会在控制台中打印错误信息,但在一些特殊情况下,例如在生产环境中,我们并不希望将这些错误信息暴露...

    5 个月前
  • 使用 mongorestore 恢复 MongoDB 备份的方法详解

    随着数据量的不断增加,数据备份和恢复变得越来越重要。MongoDB 是一种流行的 NoSQL 数据库,为了保证数据的安全性,我们需要定期对 MongoDB 进行备份。

    5 个月前
  • Babel 编译时产生的 use strict

    前言 Babel 是一个非常受欢迎的 JavaScript 编译器,它可以将最新的 JavaScript 代码转换成向后兼容的版本,以便在旧版本的浏览器或环境中运行。

    5 个月前
  • AngularJS 中的 ng-if 和 ng-switch

    AngularJS 是一款流行的前端框架。在 AngularJS 中,ng-if 和 ng-switch 是两种用于条件渲染的指令。本文将深入探讨这两个指令的用法和关键点。

    5 个月前
  • Koa2 使用 async/await 处理中间件

    Koa2 是一款基于 Node.js 平台的 web 开发框架,它具有简洁、易学、灵活等特点,因此在前端开发中被广泛采用。其中配置与处理中间件是 Koa2 开发的重要环节。

    5 个月前
  • Node.js 中使用 Sequelize ORM 操作 MySQL 数据库 —— 快速入门指南

    介绍 Sequelize 是一个 Node.js ORM(Object-Relational Mapping)工具,它可以帮助我们用面向对象的方式来操作数据库。Sequelize 支持多种数据库,包括...

    5 个月前
  • Sequelize 查询一个对象有很多列的表数据

    在前端开发中,Sequelize 是一个常用的 Node.js ORM(Object Relational Mapping) 框架,它可以让我们进行数据库操作时更加方便和快捷。

    5 个月前
  • RxJS 中的 fromEvent 操作符使用实例

    RxJS 是一个流行的用于前端开发的响应式编程框架,它的目标是简化开发人员处理异步和事件驱动应用程序的工作,从而提高应用程序的性能和可维护性。其中,fromEvent 操作符是 RxJS 中非常重要的...

    5 个月前
  • Redis 性能优化:如何提高 Redis 的响应速度?

    Redis 是一款流行的开源 NoSQL 数据库,广泛用于互联网应用程序中的缓存、消息队列、计数器等业务场景。在使用 Redis 时,我们经常需要重点考虑其性能优化问题,以提高其响应速度,更好地支持应...

    5 个月前
  • Atomic Design 响应式设计实践指南

    在现代 Web 开发中,Atomic Design 成为了一种流行的设计方法。它将用户界面划分为不同的层次,从而更好地组织设计元素。本文将介绍 Atomic Design 的概念和实践,以及如何使用它...

    5 个月前
  • ES10 的新特性:trimStart() 与 trimEnd()

    在 ES10 中,JavaScript 新增了两个字符串方法,分别是 trimStart() 和 trimEnd()。这两个方法可以将字符串开头和结尾的空格去除,功能类似于 trim() 方法,但是针...

    5 个月前
  • 使用 Jest 集成 Enzyme 进行测试

    前言 在前端开发中,测试是重要的开发环节之一。使用 Jest 集成 Enzyme,可以在 React 项目中进行UI组件的测试。Jest是Facebook推出的一款JS测试框架,而Enzyme是Rea...

    5 个月前
  • 理解 Koa 中的上下文 ctx 对象

    前言 Koa 是一个轻量级的 Node.js web 框架,它采用了 ES6 的语法,基于中间件实现,让开发者专注于业务逻辑而不是请求响应的特定细节。其中,ctx (context)对象是 Koa 中...

    5 个月前
  • SPA 应用中如何实现用户权限管理

    在单页面应用(SPA)开发中,权限管理是一个极其重要的话题。在应用中,不同的用户应该拥有不同的权限,才能在其能力范围内进行操作。用户权限管理可以通过前端实现,下面我们将具体介绍如何在 SPA 应用中实...

    5 个月前
  • Sequelize Query 踩坑指南

    在开发 Node.js 的时候,我们常常会用到 Sequelize 这个 ORM(对象关系映射)框架来操作数据库,它提供了很多便利的 API,但是也会有一些不想见的坑。

    5 个月前
  • 在 TypeScript 中使用 ES6 模块

    ES6 模块是 JavaScript 中用于组织代码的一种模块化系统,它可以方便地分离代码并将其组织成独立的模块。而 TypeScript 中提供了更强大的静态类型检查功能,使得开发者能够更加安全地管...

    5 个月前
  • 如何使用 ECMAScript 2021 的 WeakRef API 做内存管理?

    随着前端技术的发展,JavaScript语言的内存管理也愈加复杂。为了优化性能,防止内存泄漏等问题, ECMAScript 2021引入了WeakRef API,用于更有可控性地管理内存。

    5 个月前
  • 如何使用 Fastify 生成 PDF 文档

    在网页开发中,生成 PDF 文档是一项很重要的任务,因为 PDF 文档可以帮助用户将网页内容保存为称手的格式,便于阅读和传播。本文将介绍一种利用 Fastify 框架生成 PDF 文档的方法。

    5 个月前
  • Deno 中如何读写 CSV 文件

    在前端开发中,我们经常会需要处理数据表格,而CSV是其中很常见的一种格式。与此同时,Deno作为一个新兴的运行时环境,也很有前途。那么,在Deno中如何读写CSV文件呢?本文将详细介绍这个问题,并提供...

    5 个月前

相关推荐

    暂无文章