不使用boto3,如何通过requests.post实现DynamoDB的GraphQL修改
解决AWS AppSync GraphQL Mutation的MalformedHttpRequestException错误
错误根源
你的mutation请求存在语法错误:
- UUID格式的
id属于字符串类型,必须用双引号包裹。你直接写id: 80e1a712-0053-436c-ba73-9182a7cca67f,GraphQL会将其识别为无效的标识符组合,触发语法解析错误。
两种修正方案
方案1:直接修正参数引号
给字符串类型的id加上双引号,修正后的代码如下:
query = """ mutation { updateTodo (id: "80e1a712-0053-436c-ba73-9182a7cca67f", name: "Paul") { name } } """ Headers = {'X-API-KEY': 'myKey'} url = 'https://example.amazonaws.com/graphql' r = requests.post(url, json={'query': query}, headers=Headers) print(r.status_code) print(r.text)
方案2:使用GraphQL变量(推荐)
这种方式可避免字符串拼接的语法问题,代码更易维护:
# 定义带变量占位符的mutation mutation = """ mutation UpdateTodo($id: ID!, $name: String!) { updateTodo (id: $id, name: $name) { name createdAt } } """ # 定义变量参数 variables = { "id": "80e1a712-0053-436c-ba73-9182a7cca67f", "name": "Paul" } Headers = {'X-API-KEY': 'myKey'} url = 'https://example.amazonaws.com/graphql' # 发送请求时同时传递mutation和变量 r = requests.post(url, json={'query': mutation, 'variables': variables}, headers=Headers) print(r.status_code) print(r.text)
额外检查项
- 确认AWS AppSync的
updateTodoresolver已正确配置,具备DynamoDB表的修改权限,且参数类型定义(如ID!、String!)与你传递的参数匹配。 - 验证请求头中的
X-API-KEY有效,且该API密钥拥有执行mutation操作的权限。
内容的提问来源于stack exchange,提问作者Clarke D. Schweig
相关产品推荐
相关产品推荐

