基于Ariadne的模块化GraphQL架构中如何使用查询变量?
在Ariadne模块化GraphQL Schema中使用查询变量的正确方式
模块化GraphQL Schema设计和查询变量完全兼容,你遇到的问题是混淆了Schema定义语法和查询语句语法的边界,并非二者不兼容。
核心误区澄清
你尝试在extend type Query中直接定义查询变量,这是错误的——查询变量属于客户端查询的范畴,和Schema的类型扩展无关。Schema里的extend type Query仅用于扩展查询类型的字段,字段的输入参数需要在字段定义中声明,而非变量。
正确的实现步骤
在模块化Schema中定义带参数的字段
在po.graphql中扩展Query类型时,为poByNbr字段声明参数:# po.graphql extend type Query { poByNbr(nbr: String!): PurchaseOrder }这里的
nbr是字段的输入参数,用于接收客户端传入的值。客户端查询时使用变量
发起查询时,在查询语句中定义变量,并将变量绑定到字段参数上:query GetPurchaseOrder($poNumber: String!) { poByNbr(nbr: $poNumber) { id number items { name quantity } } }同时在请求中传入变量值:
{ "variables": { "poNumber": "PO-2024-001" } }Ariadne中编写Resolver处理参数
在Python代码中,为poByNbr字段编写Resolver,接收并使用参数:from ariadne import QueryType # 假设你有获取采购订单的业务逻辑函数 from your_app.services import get_purchase_order query = QueryType() @query.field("poByNbr") def resolve_po_by_nbr(*_, nbr): return get_purchase_order(po_number=nbr)
总结
模块化Schema扩展和查询变量是完全独立的两个概念:Schema扩展负责定义可查询的字段结构,查询变量负责客户端动态传递参数。只要遵循各自的语法规范,就能在Ariadne的模块化架构中正常使用查询变量。
内容的提问来源于stack exchange,提问作者CrankyElderGod
相关产品推荐
相关产品推荐

