如何使用Neo4j GraphQL Library(一)

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/ ,界面如下:

519-2.png

(非必需)本地执行查询:
注意:查询的Type需要在上面的index.js中定义了
下面代码使用了GraphQL规范编写
https://spec.graphql.cn/

{
  movies(options: { limit: 10 }) {
    title
    genres {
      name
    }
  }
}
519-3.JPG

以上非必需的步骤是指本地安装环境,然后执行查询。
也可以使用网络环境,无需安装,直接访问下面链接执行GraphQL Query 或 Mutation
https://movies.neo4j-graphql.com/
执行查询:

{
  movies(options: { limit: 10 }) {
    title
    actors {
      name
    }
  }
}
519-4.JPG

上面可以执行query or mutation的界面叫做:GraphQL Playground(会考试)

4.测试你是否理解

519-5.png

未完待续

你可能感兴趣的:(如何使用Neo4j GraphQL Library(一))