【问题标题】:Best way to construct a GraphQL query string in Python在 Python 中构造 GraphQL 查询字符串的最佳方法
【发布时间】:2020-10-04 15:05:04
【问题描述】:

我正在尝试这样做(见标题),但这有点复杂,因为我要构建的字符串必须具有以下属性:

  • 多线
  • 包含花括号
  • 我想给它注入变量

使用普通的'''''' 多行字符串会使注入变量变得困难。使用多个 f 字符串使注入变量变得容易,但是每个花括号,其中有很多,都必须加倍。并且f 必须被添加到每一行。另一方面,如果我尝试使用format,它也会被所有的花括号弄糊涂。

有没有更好的方法我还没有考虑过?

【问题讨论】:

  • 可能是模板字符串,还是完整的模板库?或者给自己写一个库,以函数式的方式构建你的 graphql,并隐藏细节。
  • 我只找到了这个库pypi.org/project/gql-query-builder

标签: python graphql graphene-python


【解决方案1】:

您可以使用“””多行字符串方法。注入变量时,请确保在定义字符串时使用$符号,并在requests.post方法的JSON参数中使用变量对象。

这是一个例子。 ContactInput 是我在 GraphQL 架构中定义的类型之一。

query = """
  mutation ($input:[ContactInput!]!) {
    AddContacts(contacts: $input) {
      user_id
    }
  }
"""
variables = {'input': my_arrofcontacts}
r = requests.post(url, json={'query': query , 'variables': variables})

【讨论】:

  • 恭喜您的第一个答案。谢谢!
【解决方案2】:

无需构造graphQL字符串来注入变量

这甚至是滥用graphQL,因为它旨在分离查询定义和变量(参数)。它更安全、更容易验证等。

只需学习如何使用query variables 来传递参数。这在docs 和许多教程中都有描述。 您应该了解并在实践中使用此技术。尝试使用字符串注入至少可以证明您缺乏知识。

如果您没有编写 graphql 编辑器或其他工具,那么您根本不应该使用字符串操作。顺便说一句,即使是编辑器也不应该对字符串进行操作,而是对 AST 进行操作。

graphql 中很少需要对字符串进行操作,f.e.让用户选择所需的答案(查询的响应部分)元素/片段。

更新

操作使用对象更具弹性/可用 - 例如轻松解决条件问题:How to conditionally include an argument in a GraphQL query?

【讨论】:

  • 对于经验不足的程序员来说,提供一个在您的“答案”中提到的最佳实践的工作示例将非常有帮助,而不是仅仅分享一个链接(不一定人们会理解),并说什么不该做,什么该学。
  • @lowercase00 不使用 python ......你在接受的答案中有一个工作示例......这个答案扩展了这一点,解释了一般的 graphql 规则,为什么问题(要求)通常是误导性的。 ..传递变量不是“最佳实践”,它是基本的graphql知识……如果仍然不理解,请寻找更多教程或提出自己的具体问题,而不是关于“最佳实践”,因为询问个人意见是题外话就这样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多