用途:Strawberry GraphQL 是 Python 的代码优先(code-first)GraphQL 库,用类型注解定义 schema,适合复杂数据关系(嵌套查询、多实体)、客户端驱动取数(移动端、SPA)、实时订阅以及联邦微服务架构。简单 CRUD 建议用 REST,内部微服务通信建议用 gRPC。
主要能力:用 @strawberry.type、@strawberry.field、@strawberry.mutation、@strawberry.subscription 定义类型、查询、变更与订阅;@strawberry.enum 定义枚举;@strawberry.input 定义输入;Private 字段不暴露到 schema;支持异步解析器与 strawberry.Info 上下文。DataLoader(strawberry.dataloader.DataLoader)通过批量加载避免 N+1 查询。权限用 BasePermission 子类配合 permission_classes 实现认证与授权。变更错误可用 union 类型返回成功或错误结果。
使用方式:定义 Query、Mutation、Subscription 后创建 strawberry.Schema,再通过 strawberry.fastapi.GraphQLRouter 挂载到 FastAPI,例如 graphql_router = GraphQLRouter(schema, context_getter=get_context, graphiql=True),app.include_router(graphql_router, prefix="/graphql")。上下文对象承载服务、DataLoader 与当前用户。订阅建议用 Redis PubSub 以支持水平扩展。
限制与注意:避免在解析器循环中直接查库造成 N+1,应使用 DataLoader;不要暴露自增内部 ID,应使用 strawberry.ID 等不透明 ID;变更必须做输入校验。资料未提供安装命令、版本、收费与性能数据。