在 Python 中构建 GraphQL 查询字符串的最佳方式

Best way to construct a GraphQL query string in Python

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

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

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

可以使用"""多行字符串方式,注入变量时,一定要在定义字符串时使用$符号,并在[=16=的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})

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

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

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

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

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

更新

操作 使用对象更 elastic/usable - 例如轻松解决条件问题: