Neo4j 的 GraphQL 计画:GRANDstack

上一篇文章开启了 GraphQL 的话题,介绍 Neo4j GraphQL plugin 的使用,让我们可以很方便用 GraphQL 存取 Neo4j 资料库。
不过官方已不再维护这个 plugin,认为将 GraphQL 的支援从资料库核心服务抽离出来,才是好的设计。

那麽取得代之的是什麽呢?neo4j-graphql-js 或是 neo4j-graphql-java,这两个专案的作用都是将 GraphQL 语法转换成 Cypher 来操作资料库,只是语言不同。

在继续说下去之前,我们先来看一个更大的东西 GRANDstack

安装与操作 GRANDstack

GRANDstack 是 Neo4j 目前还在开发中的一个实验计画,其命名来自於:

  • GraphQL
  • React
  • Apollo
  • Neo4j Database

很显然的,这是一个从前端到後端的完整开发环境,是一个示范 GraphQL 操作 Neo4j 资料库的完整解决方案,我们先把它安装起来吧!
安装步骤相当简单,官方也出了 GRANDstack Starter ,大致上的步骤如下:

  1. 准备一个空白的 Neo4j 资料库,可以使用 Sandbox 的 Blank 方案;如果是本机的资料库,记得要安装 APOC library。
    Sandbox 的部分,须要复制帐密、以及 Bolt URL 等连线资讯
    Neo4j GRANDstack for sandbox
  2. 使用 create-grandstack-app 指令建立 GRANDstack 专案
npx create-grandstack-app mygrand
  1. 选择开发 Web 的语言
    Neo4j GRANDstack step1
  2. 接下来就是一连串的各种选项和问答,透过这些问答来最简化设定 config
    Neo4j GRANDstack step2
  3. 安装成功後,直接执行 npm script
npm run start
  1. 上述指令会启动 Apollo Server,并自动开启 Dashboard 网页,但因为是空的资料库,这时候还不会有什麽意义的资讯 http://localhost:3000/
  2. 塞入范例资料如下,再回来看 Dashboard 就会有一些资讯了
npm run seedDb

Neo4j GRANDstack dashboard

接下来就可以另外打开 http://localhost:4001/graphql 来下达 GraphQL 的查询语法。

Neo4j GRANDstack GraphQL

GRANDstack 的其他细节设定与操作,可以参考官方教学,接下来我们回过头来看看 neo4j-graphql.js

neo4j-graphql.js

我们试着用最少的程序码来实作 GraphQL 查询电影资料库,首先开启一个新的 nodejs 专案,并安装 neo4j-graphql.js 和 Apollo server

npm init
npm install --save neo4j-graphql-js apollo-server

先简单定义我们预期的 GraphQL Schema,然後在交由 graphql js 自动产生完整的 Schema

const GraphqlJS = require('neo4j-graphql-js');

const typeDefs = `
type Movie  {
    title: String!
    released: Int
    actors: [Person] @relation(name:"ACTED_IN",direction:IN)
}
type Person {
    name: String!
    born: Int
    movies: [Movie] @relation(name:"ACTED_IN",direction:OUT)
}
`;

const schema = GraphqlJS.makeAugmentedSchema({ typeDefs });
// console.log(schema);

初始化一个 Neo4j Driver 物件

const neo4j = require('neo4j-driver');

const driver = neo4j.driver(
  'bolt://localhost:7687',
  neo4j.auth.basic('neo4j', 'mypassword')
);

初始化 Apollo server 物件并监听 3003 port

const Apollo = require('apollo-server');

const server = new Apollo.ApolloServer({ schema, context: { driver } });

server.listen(3003, '0.0.0.0').then(({ url }) => {
  console.log(`GraphQL API ready at ${url}`);
});

接着开启网页 http://0.0.0.0:3003/ 就可以用 GraphQL 查询电影资料库了,范例如下

Neo4j GraphQL js demo

以上就是 GRANDstack 的初步介绍,更细节的教学请看参考资源喔~

这是铁人赛最後一篇文章了,感谢过程中所有追踪或浏览我文章的朋友们,谢谢你们知的支持 ^^
有很多文章是在很赶的时候送出的,没有充分检查,之後我会再拨些时间回来慢慢修饰与更正,如果图形资料库有勾起你的兴趣,请还是持续订阅追踪,谢谢大家~

参考资源

https://neo4j.com/labs/grandstack-graphql/
https://grandstack.io/docs/neo4j-graphql-js/
https://github.com/neo4j-graphql/neo4j-graphql-js


<<:  Day 30. 结语

>>:  【Day 27】关於 Deno 以及基础安装

[Day01] 学了 React 後的下一步?准备好两把刷子!

学了 React 之後的下一步,还能学什麽呢? 在今年的铁人赛中,想要来分享这一两年来开始使用的 T...

Day10-Go结构Struct

前言 今天要介绍 Go 语言的另一种资料型态,在先前,我们介绍的变数都是储存单一的值或是多个相同型态...

学习使用 Node 和 React 进行全栈开发

网站涵盖了商业网点提供的一系列有益健康的设施和功能。无论是教育、新闻、博客还是电子商务商品,在线门...

{CMoney战斗营} 的第十五周 # NoSql

目前最常被开发者使用的资料库系统为关联式资料 NoSQL: 全名为「Not only SQL」,也就...

Linux 建立目录的捷径

如果要在 Linux 里面建立捷径,可使用已下语法: ln -s /usr/local/openlo...