在 GraphQL 类型定义中创建条件属性
Creating conditional properties in GraphQL type definition
我正在使用 Apollo 框架设置 GraphQL 服务器。
它将有一个名为 Shelf
的实体。 Shelf
有 shelfId
和 packages
.
我需要能够使用 shelfId
或 packageCode
查询 Shelves
。
我的数据源可以处理这两种情况,但我想为此使用 1 个名为 shelf
的解析器。
例子
query getShelf(shelfId: "1") {
shelfId
}
或:
query getShelf(packageCode: "123") {
shelfId
}
如果设置了 packageCode
或 shelfId
,我如何定义检查类型?
- 当提供
packageCode
时 shelfId
不是必需的
- 当提供
shelfId
时packageCode
不需要
- 当我们都没有提供它们中的任何一个时
我认为我唯一的选择是:
- A) 为每个场景创建单独的解析器
- B) 使它们都是可选的并且 return 来自解析器的错误。
我将如何进行?
目前没有支持将两个参数之一设置为非空的语法。您必须使两个参数都可以为空,然后将验证逻辑添加到您的解析器。
或者,如果两个参数的类型相同,您可以这样做:
type Query {
getShelf(id: ID! idType: ShelfIdType!)
}
enum ShelfIdType {
SHELF_ID
PACKAGE_CODE
}
我认为这不一定更好,但如果您想完全依赖 GraphQL 的类型系统进行验证,这是一个选择。
您可以使用一个解析器来处理它。上面提到的大牛的回答也是其中一种方式。
您也可以将两者作为单独的参数。
type Query {
getShelf(SHELF_ID: ID, PACKAGE_CODE:ID)
}
在解析器中,您可以检查存在的参数并编写相应的逻辑来获取数据。
我正在使用 Apollo 框架设置 GraphQL 服务器。
它将有一个名为 Shelf
的实体。 Shelf
有 shelfId
和 packages
.
我需要能够使用 shelfId
或 packageCode
查询 Shelves
。
我的数据源可以处理这两种情况,但我想为此使用 1 个名为 shelf
的解析器。
例子
query getShelf(shelfId: "1") {
shelfId
}
或:
query getShelf(packageCode: "123") {
shelfId
}
如果设置了 packageCode
或 shelfId
,我如何定义检查类型?
- 当提供
packageCode
时shelfId
不是必需的 - 当提供
shelfId
时packageCode
不需要 - 当我们都没有提供它们中的任何一个时
我认为我唯一的选择是:
- A) 为每个场景创建单独的解析器
- B) 使它们都是可选的并且 return 来自解析器的错误。
我将如何进行?
目前没有支持将两个参数之一设置为非空的语法。您必须使两个参数都可以为空,然后将验证逻辑添加到您的解析器。
或者,如果两个参数的类型相同,您可以这样做:
type Query {
getShelf(id: ID! idType: ShelfIdType!)
}
enum ShelfIdType {
SHELF_ID
PACKAGE_CODE
}
我认为这不一定更好,但如果您想完全依赖 GraphQL 的类型系统进行验证,这是一个选择。
您可以使用一个解析器来处理它。上面提到的大牛的回答也是其中一种方式。
您也可以将两者作为单独的参数。
type Query {
getShelf(SHELF_ID: ID, PACKAGE_CODE:ID)
}
在解析器中,您可以检查存在的参数并编写相应的逻辑来获取数据。