我正在使用 Strawberry GraphQL 和 FastAPI 构建 API。我正在考虑提供带有附加到嵌套字段的过滤器的查询,例如:
query {
users {
pets(type: DOG) {
name
}
}
但我找不到实现它的方法。我看到的例子是类似的问题通过顶层过滤器解决,例如:
query {
users(where: {pets: {type: DOG}) {
pets(type: DOG) {
name
}
}
第一个查询是否是 GraphQL 中允许的模式?如果是,如何在 Strawberry 中实现它?
在 GraphQL 中,您提到的第一个查询模式(直接过滤嵌套字段)通常不支持开箱即用。GraphQL 查询通常设计为在顶层指定过滤器。但是,您可以通过精心设计架构并使用解析器在 API 中实现类似的功能。
以下是为您的 FastAPI 和 Strawberry GraphQL 设置实施解决方案的方法:
步骤 1:定义模型
假设您有用户和宠物模型,您可以从以下内容开始:
第 2 步:定义查询类型
接下来,创建一个包含用户及其宠物解析器的查询类型:
步骤 3:更新架构
最后,您可以创建模式并将其与 FastAPI 集成:
查询示例
通过此设置,您现在可以查询用户并在顶层按类型过滤他们的宠物,如下所示:
在顶层进行过滤:由于 GraphQL 不支持在查询中直接过滤嵌套字段,因此我们在用户解析器中提供了一个类型参数。
动态解析器:解析器在返回用户之前根据提供的类型过滤宠物。
此方法遵循 GraphQL 最佳实践,同时仍允许您实现所需的过滤效果。如果您想要更复杂的嵌套过滤,则可能需要相应地扩展查询参数和逻辑。