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

基于Graphene的GraphQL:不执行查询获取Resolver名称/路径的方法咨询

不执行查询获取GraphQL Resolver的方案

一、基于Graphene的静态分析方案

Graphene的Schema对象本身存储了完整的类型定义与Resolver映射关系,无需执行查询,通过解析Query AST并结合Schema元数据就能定位对应Resolver。

1. 解析Query为抽象语法树(AST)

借助graphql-core库的parse函数,将查询字符串转换为AST:

from graphql import parse

query_str = """
query GetUser($id: ID!) {
  user(id: $id) {
    name
    email
  }
}
"""
ast = parse(query_str)

2. 遍历AST提取字段路径

遍历AST的selection_set节点,提取完整的字段层级路径,比如user、user.name、user.email。

3. 从Schema中直接获取Resolver

通过Graphene生成的Schema对象,逐层定位字段对应的Resolver:

from graphene import ObjectType, String, ID, Schema

class User(ObjectType):
    name = String()
    email = String()

    def resolve_name(parent, info):
        return parent["name"]

    def resolve_email(parent, info):
        return parent["email"]

class Query(ObjectType):
    user = User.Field(id=ID(required=True))

    def resolve_user(parent, info, id):
        return {"id": id, "name": "Alice", "email": "alice@example.com"}

schema = Schema(query=Query)

# 获取根字段user的Resolver
query_type = schema.type_map["Query"]
user_field = query_type.fields["user"]
user_resolver_name = user_field.resolver.__name__  # 输出:resolve_user

# 获取嵌套字段name的Resolver
user_type = schema.type_map["User"]
name_field = user_type.fields["name"]
name_resolver_name = name_field.resolver.__name__  # 输出:resolve_name

该方法全程为静态分析,不会触发任何Resolver的执行逻辑。

二、非Graphene的通用方案

如果不想依赖Graphene内部实现,可通过通用GraphQL工具链或静态代码分析实现需求:

1. 基于graphql-core的通用Schema校验与推断

用graphql-core的validate函数校验Query与Schema的合法性,提取字段路径后,结合项目Resolver的命名规范(比如Graphene默认的resolve_<字段名>规则)直接推断Resolver名称:

from graphql import validate, parse

# 校验查询合法性
is_valid = validate(schema, parse(query_str))
if not is_valid:
    # 处理查询不合法场景
    pass

# 提取字段路径后,按命名规范推断Resolver
# 例如字段user对应resolve_user,嵌套字段name对应resolve_name

2. 结合Schema文件的静态代码扫描

若项目有独立的schema.graphql文件,可使用静态代码分析工具(如astroid)扫描项目代码,匹配resolve_前缀的函数与Schema中字段的对应关系,实现Resolver路径的映射。


内容的提问来源于stack exchange,提问作者DilLip_Chowdary

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:07:10