在 GraphQL 类型定义中创建条件属性

Creating conditional properties in GraphQL type definition

我正在使用 Apollo 框架设置 GraphQL 服务器。

它将有一个名为 Shelf 的实体。 ShelfshelfIdpackages.

我需要能够使用 shelfIdpackageCode 查询 Shelves

我的数据源可以处理这两种情况,但我想为此使用 1 个名为 shelf 的解析器。

例子

query getShelf(shelfId: "1") {
  shelfId
}

或:

query getShelf(packageCode: "123") {
  shelfId
}

如果设置了 packageCodeshelfId,我如何定义检查类型?

我认为我唯一的选择是:

我将如何进行?

目前没有支持将两个参数之一设置为非空的语法。您必须使两个参数都可以为空,然后将验证逻辑添加到您的解析器。

或者,如果两个参数的类型相同,您可以这样做:

type Query {
  getShelf(id: ID! idType: ShelfIdType!)
}

enum ShelfIdType {
  SHELF_ID
  PACKAGE_CODE
}

我认为这不一定更好,但如果您想完全依赖 GraphQL 的类型系统进行验证,这是一个选择。

您可以使用一个解析器来处理它。上面提到的大牛的回答也是其中一种方式。

您也可以将两者作为单独的参数。

type Query {
  getShelf(SHELF_ID: ID, PACKAGE_CODE:ID)
}

在解析器中,您可以检查存在的参数并编写相应的逻辑来获取数据。