You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Strawberry GraphQL嵌套字段过滤查询是否合规及实现方法

在Strawberry GraphQL + FastAPI中实现嵌套字段的过滤查询

1. 第一种查询模式是否被允许?

完全允许。GraphQL的核心特性之一就是支持给任意字段(包括嵌套字段)定义参数,用来实现字段级别的过滤、排序等逻辑,你的第一个查询示例是符合GraphQL规范的合法写法。

2. 在Strawberry中如何实现?

下面是完整的实现示例,包含枚举定义、类型声明、字段解析逻辑以及FastAPI整合:

步骤1:定义基础类型和枚举

import strawberry
from typing import List, Optional

# 定义宠物类型枚举
@strawberry.enum
class PetType:
    DOG = "DOG"
    CAT = "CAT"
    BIRD = "BIRD"

# 定义Pet类型
@strawberry.type
class Pet:
    id: int
    name: str
    type: PetType

# 定义User类型,重点是pets字段带参数
@strawberry.type
class User:
    id: int
    name: str

    # 给pets字段添加过滤参数,resolver处理逻辑
    @strawberry.field
    def pets(self, type: Optional[PetType] = None) -> List[Pet]:
        # 这里模拟从数据库/数据源获取当前用户的所有宠物
        user_pets = [
            Pet(id=1, name="旺财", type=PetType.DOG),
            Pet(id=2, name="咪咪", type=PetType.CAT),
            Pet(id=3, name="啾啾", type=PetType.BIRD),
        ]

        # 如果传入了type参数,过滤对应类型的宠物
        if type:
            return [pet for pet in user_pets if pet.type == type]
        return user_pets

步骤2:定义Query根类型

@strawberry.type
class Query:
    @strawberry.field
    def users(self) -> List[User]:
        # 模拟返回用户列表
        return [
            User(id=1, name="张三"),
            User(id=2, name="李四"),
        ]

# 创建Strawberry schema
schema = strawberry.Schema(query=Query)

步骤3:整合到FastAPI

from fastapi import FastAPI
from strawberry.fastapi import GraphQLRouter

app = FastAPI()
graphql_app = GraphQLRouter(schema)
app.include_router(graphql_app, prefix="/graphql")

验证查询

现在你就可以用你想要的第一种查询模式请求了:

query {
  users {
    pets(type: DOG) {
      name
    }
  }
}

返回结果会只包含每个用户的狗狗宠物。

关键说明

  • 嵌套字段的参数是在对应字段的resolver方法中定义的,@strawberry.field装饰的方法可以接收自定义参数。
  • resolver方法的第一个参数self对应当前的父类型实例(这里是User对象),你可以基于这个实例的属性去关联查询对应的宠物数据(比如从数据库根据user_id查询)。
  • 如果不需要过滤,参数可以设为可选(Optional),默认返回全部数据。

内容的提问来源于stack exchange,提问作者Jan Zapał

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 18:04:58