如何使用例如从 AppSynch 查询网址库3

How to query from AppSynch using e.g. Urllib3

我已经在 AWS 上创建了一个 AppSynch API。我可以使用控制台或某些 AWS 特定包轻松查询它。但是我想使用一个简单的包来查询它,例如网址库3。很难找到任何人使用直接 api 调用(每个人都使用某种我似乎无法开始工作的 aws 相关包或解决方案)。我想做的查询是:

       mutation provision {
      provision(
        noteId:
        {ec2Instance: "t2.micro",
          s3Bucket: "dev"})}

我尝试过以下不同的变体:

    query = """
    mutation provision {
      provision(
        noteId:
        {ec2Instance: "t2.micro",
          s3Bucket: "dev"})}
    """
    headers = {"x-api-key": api_key}

http = urllib3.PoolManager()

    data = json.dumps("query": query, "variables": {}, "operationName": "somename")
    
    r = http.request('POST', url, headers=headers,
                     data=data.encode('utf8'))

但不知何故我无法让它工作,我不断收到 API 无法理解 POST 请求

的消息

我找到了解决方案:

import requests
import json

    APPSYNC_API_KEY = APPSYNC_API_KEY
    APPSYNC_API_ENDPOINT_URL = APPSYNC_API_ENDPOINT_URL
    
    headers = {
        'Content-Type': "application/graphql",
        'x-api-key': APPSYNC_API_KEY,
        'cache-control': "no-cache",
    }
    
    query = """
    mutation provision {
      provision(
        inputParameters:
        {ec2Instance: "t2.micro",
          s3Bucket: "dev"})}
    """
    
    payload_obj = {"query": query}
    payload = json.dumps(payload_obj)
    response = requests.request("POST", APPSYNC_API_ENDPOINT_URL, data=payload, headers=headers)
    print(response)