中继兼容性

这是 GraphQL 库版本 6 的文档。有关长期支持 (LTS) 版本 5,请参阅 GraphQL 库版本 5 LTS

Relay GraphQL 服务器规范 指出,为了使服务器与 Relay 兼容,它必须提供

  1. 一种重新获取对象的方法。

  2. 有关如何遍历连接的说明。

Neo4j GraphQL 库提供了开箱即用的有关如何遍历连接的说明。但是,需要进行配置才能提供一种重新获取对象的方法,本页对此进行了详细说明。

对象识别

为了使 Relay 客户端能够重新获取对象,每种类型都必须具有一个唯一的对象标识符,该标识符可用于此目的。然后,服务器通过具有实现以下定义的Node指令的类型来通知 Relay 客户端已满足此要求

interface Node {
  id: ID!
}

例如,类型Book可能具有以下定义

type Book implements Node @node {
  id: ID!
  isbn: String!
}

有了它,Relay 客户端就可以使用node查询字段重新获取Book对象。下一节将深入探讨如何使用 Neo4j GraphQL 库实现此目的。

@relayId指令

Neo4j GraphQL 库提供了对所需id字段的抽象,允许将数据库中任何唯一属性的值用作对象标识符。

这是由@relayId指令提供的,该指令具有以下定义

directive @relayId on FIELD_DEFINITION

考虑相同的Book示例,ISBN 通常是唯一的标识符。您可以这样配置它

type Book @node {
  isbn: String! @relayId
}

当模式被增强时,此类型将输出为

type Book implements Node @node {
  id: ID!
  isbn: String!
}

当使用id字段时,isbn是在数据库中使用的底层属性。此外,Book类型现在可以通过node查询字段重新获取,并已准备好与 Relay 客户端一起使用。

@relayId指令不能保证唯一性。您应该使用@unique指令配置唯一的节点属性约束。