生成 GraphQL CRUD API
Neo4j GraphQL 库会根据您的类型定义自动创建 Query 和 Mutation 类型,以提供即时的 CRUD 功能。GraphQL CRUD API 可以配置和扩展,并有助于使用相同的类型定义来定义数据库模式和 GraphQL 模式。
一个可扩展的、低代码的、开源库,专为使用 Neo4j 图数据库更快地构建 API 驱动的智能应用程序而设计。
Neo4j GraphQL 库是一个高度灵活的、低代码的、开源 JavaScript 库,通过利用连接数据的强大功能,使跨平台和移动应用程序的快速 API 开发成为可能。
使用 Neo4j 作为图数据库,GraphQL 库使应用程序能够将应用程序数据从前端一直到存储都作为图本机处理,避免重复的模式工作并确保前端和后端开发人员之间的无缝集成。
该库用 TypeScript 编写,其模式优先范式让开发人员能够专注于他们需要的应用程序数据,同时处理构建 API 所涉及的繁重工作。
还不了解 Cypher?别担心。该库将 GraphQL 查询转换为单个 Cypher 查询。使用该库的开发人员可以专注于构建应用程序,而只需编写最少的后端代码 - 该库会处理其余部分。
该库简化了现代化应用程序,以实现卓越的性能、业务成果和用户参与度。开发人员可以使用数据丰富的 API 创建预测性、关键任务和上下文感知的应用程序,这些应用程序更安全(使用身份验证)且更可靠。
通过 GraphQL 优先开发为全栈开发人员提供支持,该库从 GraphQL 生成 Cypher、从类型定义生成 GraphQL CRUD API、自动生成的解析器以及使用 @cypher 模式指令 的自定义逻辑。它还附带强大的 授权 来保护您的 GraphQL API、嵌套变异以及 OGM(对象-图-映射器)。
对开发人员来说快速、开放且有趣,该库的学习曲线很低,帮助开发人员快速构建跨开源框架(React、Vue、Angular 等)的 API 驱动的应用程序,并实现卓越的灵活性,可在本地、云或无服务器设置中部署。
Neo4j GraphQL 库使开发人员能够使用任何 JavaScript GraphQL 实现构建 GraphQL API 层。此 GraphQL API 层通常作为 Node.js Web 服务器部署,Neo4j 数据模型由 GraphQL 模式定义。
在自动生成的解析器函数内部,GraphQL 查询被转换为 Cypher 查询并发送到 Neo4j 数据库,方法是在 GraphQL 请求的上下文对象中包含 Neo4j 驱动程序实例。解析器可以通过自定义解析器函数实现来覆盖,以允许自定义逻辑。
可选地,GraphQL 字段可以通过使用 @cypher 模式指令由用户定义的 Cypher 查询解析。
Neo4j GraphQL 库会根据您的类型定义自动创建 Query 和 Mutation 类型,以提供即时的 CRUD 功能。GraphQL CRUD API 可以配置和扩展,并有助于使用相同的类型定义来定义数据库模式和 GraphQL 模式。
type Movie {
title: String!
actors: [Person!]!
@relationship(type: "ACTED_IN", direction: IN)
}
type Person {
name: String!
}
{
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 *
Neo4j GraphQL 库生成单个 Cypher 查询来解析任何任意的 GraphQL 请求。
这意味着解析器会根据您的场景自动实现。无需编写样板数据获取代码 - 只需将 Neo4j 驱动程序实例注入请求上下文,Neo4j GraphQL 库就会负责生成数据库查询并处理数据库调用。此外,由于只生成单个 Cypher 查询,这将带来巨大的性能提升,并消除 N+1 查询问题。
由于 GraphQL 是一种 API 查询语言,而不是数据库查询语言,它缺乏聚合、投影和更复杂图遍历等操作的语义。
您现在可以通过使用 @cypher GraphQL 模式指令将 Cypher 查询的结果绑定到 GraphQL 字段来扩展 GraphQL 的功能。这允许使用 Cypher 表达复杂逻辑,并且可以在查询和变异字段上使用,以定义自定义数据获取或变异逻辑。
Neo4j 原生图数据库使复杂和多级图遍历具有很高的性能,为您的应用程序提供闪电般的快速查询响应。
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!
}
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" } } }]
)
Neo4j GraphQL 库开箱即用地提供了一个 Auth 指令,用于使用 JSON Web 令牌 (JWT) 为 GraphQL API 启用授权规则。
拥有许多不同的方法来保护 GraphQL API 使一些初学者望而却步。使用 Auth 指令,我们减少了构建安全 GraphQL API 所带来的许多复杂性。包含身份验证为想要快速轻松地“启动”安全服务的用户提供了可行的解决方案。此外,Cypher 的强大功能使库能够将复杂的授权规则有效地转换为单个 Cypher 查询。
如果您不知道什么是 OGM (对象图映射器),不用担心。它是一种针对您的图数据库的 ORM (对象关系映射器),为 CRUD API 提供了一个类型安全的包装器。您可以像使用 ORM 一样使用 OGM 来增强 REST API、自定义脚本、迁移、身份验证以及您与 Neo4j 交互的任何地方。
在使用 Neo4j GraphQL 库时,您可能需要定义自定义查询或变异 - 您可以在这里使用 OGM。这意味着您不需要在应用程序中编写自定义 Cypher。很酷,对吧?!
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"));
});
type Movie {
title: String!
actors: [Person!]!
@relationship(type: "ACTED_IN", direction: IN, properties: "ActedIn")
}
type Person {
name: String!
}
interface ActedIn {
roles: [String!]!
}
将关系添加到您的数据模型中,可以让您的数据获得运行跨越图中广泛部分的复杂查询所需的上下文。
使用 GraphQL 库,您可以定义一个接口来表示您的关系属性。这可以通过简单地在现有关系指令中添加 properties 键来与多个关系一起使用。结果是,在增量增长应用程序时,开发人员体验非常好。
基于游标的分页是为前端提供无限滚动的首选方法。基于游标的分页的最大优势在于它能够有效地处理实时数据更改。这是因为游标不需要数据保持静态 - 当添加或删除记录时,每个新页面仍会正确加载。
使用 GraphQL 库,您可以获得所有关系字段的基于游标的分页,以及您已经熟悉的出色过滤和排序功能。
{
movies(where: { title: "River Runs Through It" }) {
title
actorsConnection(first: 10, after: "opaqueCursor") {
edges {
roles
node {
name
}
}
pageInfo {
endCursor
hasNextPage
}
}
}
}
注册我们的 GraphAcademy 课程“使用 Neo4j GraphQL 库构建 GraphQL API”,深入了解 Graph QL 库。