我最近开始学习如何使用 python,但在调用 graphQL api 时遇到了一些问题。
我正在尝试设置一个循环以使用分页获取所有信息,并且我的第一个请求工作正常。
values = """
{"query" : "{organizations(ids:) {pipes {id name phases {id name cards_count cards(first:30){pageInfo{endCursor hasNextPage} edges {node {id title current_phase{name} assignees {name} due_date createdAt finished_at fields{name value filled_at updated_at} } } } } }}}"}
"""
Run Code Online (Sandbox Code Playgroud)
但是使用结束光标作为变量的第二次调用对我不起作用。我认为这是因为我不明白如何正确转义变量的字符串。但对于我的生活,我无法理解应该如何做。
到目前为止,这就是我所拥有的......
values = """
{"query" : "{phase(id: """ + phaseID+ """ ){id name cards_count cards(first:30, after:"""\" + pointer + "\"""){pageInfo{endCursor hasNextPage} edges {node {id title assignees {name} due_date createdAt finished_at fields{name value datetime_value updated_at phase_field { id label } } } } } } }"}
"""
Run Code Online (Sandbox Code Playgroud)
第二个因为它循环只返回一个 400 错误的请求。
任何帮助将不胜感激。
作为一般规则,您应该避免使用像这样的字符串操作来构建查询。
在 GraphQL 查询本身中,GraphQL 允许变量可以作为您稍后插入的值的查询中的占位符。您需要在查询顶部声明变量,然后可以在查询内的任何位置引用它们。没有 JSON 包装器的查询本身看起来像
query = """
query MoreCards($phase: ID!, $cursor: String) {
phase(id: $phase) {
id, name, cards_count
cards(first: 30, after: $cursor) {
... CardConnectionData
}
}
}
"""
Run Code Online (Sandbox Code Playgroud)
为了实际提供变量值,它们作为普通字典传递
variables = {
"phase": phaseID,
"cursor": pointer
}
Run Code Online (Sandbox Code Playgroud)
实际的请求正文是一个简单的 JSON 结构。您也可以将其构建为字典:
body = {
"query": query,
"variables": variables
}
Run Code Online (Sandbox Code Playgroud)
现在您可以使用标准json模块将其格式化为字符串
print(json.dumps(body))
Run Code Online (Sandbox Code Playgroud)
或者将它传递给requests可以直接接受对象并为您编码的包之类的东西。