NODES AI:图技术 + AI 在线大会 - 2026年4月15日 | 立即注册

Neo4j logo

Neo4j 与 GraphQL

将强大的 GraphQL 的灵活性与稳健的 Neo4j 图数据库无缝集成,构建以 API 为驱动的智能应用程序。

轻松构建智能、现代化的应用程序

直观地与数据交互。使用 GraphQL 的声明式查询轻松探索模式和关系,无需学习 Cypher。

使用适用于 Neo4j AuraDB 的 GraphQL 构建跨平台和移动应用程序。享受全托管服务带来的灵活性以及开源 Neo4j GraphQL 的高度可定制性。

您有两种部署选项

全托管

借助托管的 GraphQL 服务,您无需担心部署或管理问题,开箱即用,实现无缝、高性能的 API 访问。

开始使用

自托管

自行部署。Neo4j GraphQL 支持快速的 API 开发,并为集成到自定义工作流程中提供了充分的灵活性。

了解更多

Neo4j 与 GraphQL 的优势

低代码

不熟悉 Cypher?没问题。GraphQL 会自动将查询转换为单个优化的 Cypher 查询。您只需专注于构建应用程序,编写最少的后端代码,其余工作由 Neo4j GraphQL 处理。

轻松实现图上下文

构建上下文感知的应用程序,利用与图数据库无缝衔接且丰富的数据图原生 API。Neo4j 结合 GraphQL 可实现更深入的洞察、更智能的推荐以及更动态的用户体验。

对开发者友好

Neo4j GraphQL 可以从 GraphQL 生成 Cypher,从类型定义生成 GraphQL CRUD API,自动生成解析器,并通过 @cypher 模式指令实现自定义逻辑。它还配备了强大的身份验证功能,以保护您的 GraphQL API。

开放且灵活

Neo4j GraphQL 以 AuraDB 服务或库的形式提供。您可以跨开源框架(React、Vue、Angular 等)快速构建 API 驱动的应用程序,并获得卓越的灵活性。支持在本地、云端或无服务器架构中进行部署。

Neo4j 与 GraphQL 功能特性

生成 GraphQL CRUD API

自动根据您的类型定义创建 Query(查询)和 Mutation(变更)类型,以提供即时的 CRUD 功能。

配置并扩展 GraphQL CRUD API,以帮助您使用相同的类型定义来定义数据库模式和 GraphQL 模式。

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

type Person {
  name: String!
}

从 GraphQL 生成 Cypher

生成单个 Cypher 查询以解析任何 GraphQL 请求。

这意味着解析器会自动为您所处的场景实现。无需编写样板式的数据获取代码。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 *

使用 Cypher 扩展 GraphQL

由于 GraphQL 是一种 API 查询语言而非数据库查询语言,它缺乏聚合、投影以及更复杂图遍历等操作的语义。

使用带有 GraphQL 模式指令的 @cypher 来扩展 GraphQL 的强大功能,该指令将 Cypher 查询的结果绑定到 GraphQL 字段。这允许使用 Cypher 表达复杂的逻辑,并允许 Query 和 Mutation 字段定义自定义的数据获取或变更逻辑。

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!
}

内置身份验证的 API 安全

使用开箱即用的 Auth 指令,通过 JSON Web Tokens (JWT) 为 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" } } }]
  )

轻松添加关系属性

在数据模型中添加关系,可为您的数据提供上下文,以便跨图的广泛区域运行复杂查询。

使用 Neo4j 和 GraphQL 定义表示关系属性的接口。您可以通过在现有的关系指令中添加 properties 键,将其与多个关系一起使用。

精简开发工作,以最小的代价实现可扩展、灵活的应用程序。

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 资源

© . This site is unofficial and not affiliated with Neo4j, Inc.