轻松构建智能、现代的 API
  • Neo4j GraphQL 库是一个高度灵活、低代码、开源的 JavaScript 库,可通过利用连接数据的力量为跨平台和移动应用程序实现快速 API 开发。
  • 使用 Neo4j 作为图形数据库,GraphQL 库使应用程序可以轻松地将应用程序数据从前端一直到存储都视为原生图形,避免重复的模式工作并确保前端和后端
    开发人员之间的完美集成.
  • 该库的模式优先范式以 TypeScript 编写,让开发人员可以专注于他们需要的应用程序数据,同时负责构建 API 所涉及的繁重工作。
Neo4j GraphQL 库的好处
低代码高性能
强大而快速

还不了解 Cypher?别担心。该库将 GraphQL 查询转换为单个 Cypher 查询。使用这个库的开发人员可以只专注于构建应用程序,而只需编写最少的后端代码——库处理其余的。

现代智能
安全、可靠且数据丰富

该库简化了应用程序的现代化改造,以实现卓越的性能、业务成果和用户参与度。开发人员可以使用更安全(使用 Auth)和可靠的数据丰富的 API 创建预测性、任务关键型和上下文感知应用程序。

开发人员友好
专为开发人员的灵活性而构建

该库支持使用 GraphQL 优先开发的全栈开发人员,从 GraphQL 生成 Cypher,从类型定义生成 GraphQL CRUD API,自动生成解析器,并使用@cypher 模式指令生成自定义逻辑。它还具有强大的授权来保护您的 GraphQL API、嵌套突变和OGM (Object-Graph-Mapper)。

开放灵活
选择您的平台

该库对开发人员来说快速、开放且有趣,学习曲线低,可帮助开发人员跨开源框架(React、Vue、Angular 和其他)快速构建 API 驱动的应用程序,并实现跨本地、云部署的非凡灵活性,或在无服务器设置中。

Neo4j GraphQL 库的工作原理
  • Neo4j GraphQL 库使开发人员能够使用任何 JavaScript GraphQL 实现来构建 GraphQL API 层。此 GraphQL API 层通常部署为 Node.js Web 服务器,
    Neo4j 数据模型由 GraphQL 模式定义。
  • 在自动生成的解析器函数中,通过在 GraphQL 请求的上下文对象中包含 Neo4j 驱动程序实例,将 GraphQL 查询转换为 Cypher 查询并发送到 Neo4j 数据
    库。解析器可以被自定义解析器函数实现覆盖以允许自定义逻辑。
  • 或者,GraphQL 字段可以通过使用 @cypher 模式指令由用户定义的 Cypher 查询解析。
Neo4j GraphQL 库功能

								
type Movie {
  title: String!
  actors: [Person!]!
    @relationship(type: "ACTED_IN", direction: IN)
}

type Person {
  name: String!
}
								
							

生成 GraphQL CRUD API
  • Neo4j GraphQL 库会根据您的类型定义自动创建查询和突变类型,从而提供即时
    CRUD 功能。GraphQL CRUD API 可以配置和扩展,帮助定义数据库模式和具有相
    同类型定义的 GraphQL 模式。
从 GraphQL 生成 Cypher
  • Neo4j GraphQL 库生成单个 Cypher 查询来解析任意 GraphQL 请求。
  • 这意味着为您的方案自动实施解析器。无需编写样板数据获取代码——只需将 Neo4j
    驱动程序实例注入请求上下文,Neo4j GraphQL 库负责生成数据库查询和处理数据
    库调用。此外,由于生成了单个 Cypher 查询,这会带来巨大的性能提升并消除 N
    +1 查询问题。
								
{
  movies(where: { title: "River Runs Through It" }) {
    title
    actors {
      name
    }
  }
}
								
							
								
MATCH (m:Movie)<-[:ACTED_IN]-(a:Actor)
WHERE m.title = "River Runs Through It"
RETURN *
								
							
						
type Movie {
  title: String!
  actors: [Person!]!
    @relationship(type: "ACTED_IN", direction: IN)
  similar(first: Int = 3): [Movie!]!
    @cypher(
      statement: """
      MATCH (this)<-[:ACTED_IN|:DIRECTED]-(o)-[:ACTED_IN|:DIRECTED]->(rec:Movie)
      WITH rec, COUNT(*) AS score
      RETURN rec ORDER BY score DESC LIMIT $first
      """
    )
}

type Person {
  name: String!
}
						
					
使用 Cypher 扩展 GraphQL
  • 由于 GraphQL 是一种 API 查询语言而不是数据库查询语言,因此它缺乏聚合、投影
    和更复杂的图遍历等操作的语义。
  • 您现在可以通过使用 @cypher GraphQL 模式指令来扩展 GraphQL 的功能,将
    Cypher 查询的结果绑定到 GraphQL 字段。这允许使用 Cypher 表达复杂的逻辑,
    并可用于 Query 和 Mutation 字段来定义自定义数据获取或突变逻辑。
  • Neo4j 本机图形数据库使复杂的多跳图形遍历具有高性能,从而为您的应用程序提供
    极快的查询响应。
使用内置身份验证保护 API
  • Neo4j GraphQL 库带有一个开箱即用的 Auth 指令,用于使用 JSON Web 令牌
    (JWT) 为 GraphQL API 启用授权规则。
  • 有许多不同的方法来保护 GraphQL API 会让一些初学者望而却步。使用 Auth 指
    令,我们降低了构建安全 GraphQL API 所带来的很多复杂性。包括 Auth 为希望快
    速轻松地“启动”安全服务的用户提供了一个可行的解决方案。此外,Cypher 的强大
    功能有效地使库能够将复杂的授权规则转换为单个 Cypher 查询。
						
type Movie {
  title: String!
  actors: [Person!]!
    @relationship(type: "ACTED_IN", direction: IN)
}

type Person {
  name: String!
}

extend type Movie
  @auth(
    rules: [{ operations: [UPDATE], allow: { actors: { name: "$jwt.sub" } } }]
  )
						
					
						
const { OGM } = require("@neo4j/graphql-ogm");
const neo4j = require("neo4j-driver");

const typeDefs = `
  type Movie {
    title: String!
    actors: [Person!]! @relationship(type: "ACTED_IN", direction: IN)
  }
  type Person {
    name: String
  }
`;

const driver = neo4j.driver(
  "bolt://localhost:7687",
  neo4j.auth.basic("admin", "password")
);

const ogm = new OGM({
  typeDefs,
  driver,
});
const Movie = ogm.model("Movie");

ogm.init().then(() => {
  Movie.create({
    input: [
      {
        title: "Forrest Gump",
        actors: {
          create: [{ node: { name: "Tom Hanks" } }],
        },
      },
    ],
  }).then(() => console.log("Movie Created"));
});
						
					
使用 OGM 支持 REST API 和更多功能
  • 如果您不知道 OGM(Object Graph Mapper)是什么,不用担心。它是您的图形数
    据库的 ORM(对象关系映射器),并提供围绕 CRUD API 的类型安全包装器。您可
    以像使用 ORM 一样使用 OGM,为 REST API、自定义脚本、迁移、身份验证以及
    与 Neo4j 交互的任何地方提供支持。
  • 使用 Neo4j GraphQL 库时,有时您可能需要定义自定义查询或突变——您可以在此
    处使用 OGM。这意味着,您无需在应用程序中编写自定义 Cypher。酷,对吧?!
轻松添加关系属性
  • 将关系添加到您的数据模型中可为您的数据提供在图形的各个部分运行复杂查询所需
    的上下文。
  • 使用 GraphQL 库,您可以定义一个表示您的关系属性的接口。只需将属性键添加到
    现有的关系指令中,就可以将其用于多个关系。结果是在增量增长的应用程序时获得
    了出色的开发人员体验。
						
type Movie {
  title: String!
  actors: [Person!]!
    @relationship(type: "ACTED_IN", direction: IN, properties: "ActedIn")
}

type Person {
  name: String!
}

interface ActedIn {
  roles: [String!]!
}
						
					
						
{
  movies(where: { title: "River Runs Through It" }) {
    title
    actorsConnection(first: 10, after: "opaqueCursor") {
      edges {
        roles
        node {
          name
        }
      }
      pageInfo {
        endCursor
        hasNextPage
      }
    }
  }
}
						
					
基于光标的分页
  • 基于光标的分页是在前端提供无限滚动的首选方法。基于游标的分页最大的优势在于
    它能够有效地处理实时数据的变化。这是因为游标不需要数据保持静态——当添加或
    删除记录时,每个新页面仍然正确加载。
  • 使用 GraphQL 库,您可以获得所有关系字段的基于光标的分页,以及您已经熟悉的
    出色过滤和排序。