Learn how to use the Neo4j GraphQL library to build Node.js GraphQL APIs backed by the Neo4j graph database.
1.加入课程
填写基本信息加入课程
https://neo4j.com/graphacademy/training-graphql-apis/enrollment/
2.课程简介
本课程使用Neo4j GraphQL Library构建GraphQL APIs
本课程无需在本机安装任何软件或程序,有浏览器即可,因为本课程使用了:
Code Sandbox:https://codesandbox.io/
Neo4j Sandbox:https://neo4j.com/sandbox/
3.GrapthQL和Neo4j
3.1.Neo4j Graph Database
Neo4j Graph Database是一个原生的图数据库,包括社区版和企业版。
Neo4j平台包括了图数据库、桌面应用、图数据浏览器、云上的图数据库等,更多信息见:
https://neo4j.com/developer/graph-platform/
3.2.GraphQL
GraphQL是一种用于API的查询语言,由Facebook创建于2012年,并且在2015年将其开源。
使用GraphQL的好处是:前端一个请求就能查询到所需要的数据,不多不少。(感觉很神奇,后端如何配合?)
坏处或挑战之一是:n+1嵌套查询会导致在一个查询中多次对数据层进行请求(会考试)
需要理解GraphQL中三个重要的概念:
1)Type:简单理解为数据类型,包括了属性和关系,例如:数据类型-电影,其包括了属性-电影名称、关系-导演(导演本身也是一个数据类型)。提前在客户端和服务器端之间通过Type约定好可以存取哪些数据。
2)Operation:包括了Query(获取数据)、Mutation(修改数据)、Subscription(事件触发后服务器端推送数据到客户端)。以Query为例,其包括了查询条件和操作返回的字段-The Selection Set(会考试)
3)Resolver:可以称之为解析函数,其名称和Operation相同,例如:有一个查询的名称是FindMovie,那么对应的解析函数名称也必须是FindMovie。遇到一个Operation,通过Resolver从数据层获取数据或修改数据。(不理解此处的数据层指什么?)
3.3.Neo4j GraphQL Library
目标:
1)避免使用两套Schema(API、Graph Database),GraphQL Type定义一套即可,也可以驱动图数据库数据模型。
2)基于GraphQL Type自动生成GraphQL Operation,包括查询、修改、排序、分页、复杂过滤、时间和空间过滤。
3)从GraphQL Operation自动产生/转换成Cypher(Neo4j的图数据查询语言),甚至可以直接使用Cypher语句查询所需的图数据。
(非必需)本地安装Neo4j GraphQL Library:
Neo4j GraphQL Library 是一个Node.js Javascript 库,可以通过npm安装。
此处同时安装了相关的依赖:graphql、apollo-server
npm install @neo4j/graphql graphql neo4j-driver apollo-server
(非必需)本地创建index.js:
注意修改代码中的数据库连接配置(主要是帐号/密码)
下面代码中定义了两个Type(Movie、Genre)
const { Neo4jGraphQL } = require("@neo4j/graphql");
const neo4j = require("neo4j-driver");
const { ApolloServer } = require("apollo-server");
const typeDefs = `
type Movie {
title: String
year: Int
imdbRating: Float
genres: [Genre] @relationship(type: "IN_GENRE", direction: OUT)
}
type Genre {
name: String
movies: [Movie] @relationship(type: "IN_GENRE", direction: IN)
}
`;
const driver = neo4j.driver(
"bolt://localhost:7687",
neo4j.auth.basic("neo4j", "letmein")
);
const neoSchema = new Neo4jGraphQL({ typeDefs, driver });
const server = new ApolloServer({
schema: neoSchema.schema,
context: ({ req }) => ({ req }),
});
server.listen(4000).then(() => console.log("Online"));
(非必需)本地启动Neo4j图数据库
C:\Users\bing.yao>neo4j console
(非必需)本地运行index.js:
C:\Users\bing.yao\course01>node index.js
(非必需)本地访问:
http://localhost:4000/ ,界面如下:
(非必需)本地执行查询:
注意:查询的Type需要在上面的index.js中定义了
下面代码使用了GraphQL规范编写
https://spec.graphql.cn/
{
movies(options: { limit: 10 }) {
title
genres {
name
}
}
}
以上非必需的步骤是指本地安装环境,然后执行查询。
也可以使用网络环境,无需安装,直接访问下面链接执行GraphQL Query 或 Mutation
https://movies.neo4j-graphql.com/
执行查询:
{
movies(options: { limit: 10 }) {
title
actors {
name
}
}
}
上面可以执行query or mutation的界面叫做:GraphQL Playground(会考试)
4.测试你是否理解
未完待续