在 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 - 例如轻松解决条件问题:
我正在尝试这样做(见标题),但它有点复杂,因为我要构建的字符串必须具有以下属性:
- 多线
- 包含大括号
- 我想往里面注入变量
使用普通的 ''''''
多行字符串会使注入变量变得困难。使用多个 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 - 例如轻松解决条件问题: