繁体   English   中英

使用 Ariadne 在 Python GraphQL 解析器中将 snake_case 转换为 camelCase

[英]Convert snake_case to camelCase in Python GraphQL resolver using Ariadne

我使用 Ariadne 创建了一个带有 Apollo GraphQL 的 Python Flask 服务器。 我的 GraphQL 架构应该在 camelCase 中具有属性名称。 但是,看起来,我的 GraphQL 解析器必须以 snake_case 返回属性名称,否则无法解析响应。

这是我的 GraphQL 架构定义:

type Asset {
    assetId: ID!
    accountId: Int
    version
}

type Query {
    getAssets() : [Asset]
}

我的解析器功能:

@convert_kwargs_to_snake_case
def get_commercial_asset_resolver(obj, info):
    """Resolver function to fetch list of assets"""        
    assets = runquery.run_query_for_assets()
    return assets

使用装饰器@convert_kwargs_to_snake_case,一个属性在GraphQL 响应中成功映射,即版本为snake_case 和camelCase,因为它是相同的。

但是,如果我从解析器中删除 @convert_kwargs_to_snake_case,我的结果集中的所有属性都不会映射到 GraphQL 响应。

是否可以在 Python 中使用 Ariadne 使用 camelCase 属性? 通过查看Ariadne 文档,似乎并非如此。 寻找建议。

好吧,在阅读了这个Ariadne 讨论之后,我发现,在创建 Ariadne 可执行 GraphQL 模式时,我只需要不传递 Ariadne snake_case_fallback_resolvers

所以,基本上,我所做的是——

from ariadne import load_schema_from_path, make_executable_schema, snake_case_fallback_resolvers, graphql_sync, ObjectType

type_defs = load_schema_from_path("./schema.graphql")
schema = make_executable_schema(type_defs, query, snake_case_fallback_resolvers)

我做了什么来解决无法将 camelCase 中的属性映射回 GraphQL 响应的问题:

schema = make_executable_schema(type_defs, query)
# Just removed snake_case_fallback_resolvers from the function parameters

另外,我从解析器函数中删除了@snake_case_fallback_resolvers,以获取属性(如果有任何属性作为输入传递给camelCase 中的解析器)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM