【问题标题】:Call GraphQL API with String variable使用字符串变量调用 GraphQL API
【发布时间】:2020-06-01 04:56:54
【问题描述】:

我想执行一个简单的GraphQL 查询,并在其中传递一个变量。

import requests
import json

var = "whatever"

query = """
    query ($var: String!){
        styles(locale: "en", styleNumbers: [ $var] ) {
            styleOptions {
    parms {
        parm1
        parm2
            }
        }
        }
    }
"""

url = 'https://sth_random.io/graphql?'
response = requests.get(url, json={'query': query, '$var': var})
response = response.json()

print(response)

但我收到以下错误:

{'errors': [{'message': 'Variable "$var" of required type "String!" was not provided.', 'locations': [{'line': 2, 'column': 12}]}]}

我错过了什么?

提前谢谢你。

【问题讨论】:

    标签: python python-3.x graphql


    【解决方案1】:

    请求正文应包含一个 variables 键,该键本身就是变量值的字典:

    variables = {'var': var}
    response = requests.post(url, json={'query': query, 'variables': variables})
    

    【讨论】:

    • 实际上这是我尝试过的,但我认为这不是很重要,我试图简化我的示例。尽管错误仍然完全相同。
    • 我改变了,但错误仍然存​​在。据我了解,这并不是电话被拒绝。该变量未在查询中传递。
    • 我的错。当您在查询本身的变量名称前添加 $ 时,您在 variables 对象中省略了 $。请查看编辑后的答案。
    • 我们确实取得了进展,因为我没有收到错误,但响应是:{'data': {'styles': []}} 所以我知道它并不指向字典的元素。 variables = {'var': var} 对的值应该返回完整的响应。
    • 如果您查询的服务器公开了 GraphiQL 或 GraphQL Playground 接口,您可以使用它来测试相同的查询。如果您得到相同的响应,则问题不在于上面的客户端代码。
    猜你喜欢
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    相关资源
    最近更新 更多