POST для API шлюза AWS из Python в Dynamodb - PullRequest
0 голосов
/ 01 июня 2018

Я публикую простую структуру JSON в Amazon Gateway API из Python.

Вот структура JSON:

payload = {
'ping': '1.967',
'download': '570.01',
'upload': '697.85',
'timestamp': '1527845073'
}

А вот код Python:

headers = {'content-type':'application/json'}
r = requests.post("https:xxx.execute-api.us-east-1.amazonaws.com/beta/device", data = payload ,headers=headers)
print(r.status_code, r.reason)
print(r.text)
  • r.status_code возвращается как '200'
  • r.reason возвращается как 'Ok'
  • r.text возвращается как {"__ type": "com.amazon.coral.validate # ValidationException "," message ":" Одно или несколько значений параметров недопустимы: AttributeValue может не содержать пустую строку "}

Параметры явно не пусты, поэтому я 'Я не уверен, почему я получаю эту ошибку.У меня есть шаблон отображения тела в запросе на интеграцию, который выглядит следующим образом:

{ 
"TableName": "device",
"Item": {
"id": {
        "S": "$context.requestId"
        },
"ping": {
        "S": "$input.path('$.ping')"
        },
"download": {
        "S": "$input.path('$.download')"
    },
"upload": {
        "S": "$input.path('$.upload')"
    },
"timestamp": {
       "S": "$input.path('$.timestamp')"
}
}
}

И когда я запускаю тест из AWS Gateway API Console, данные вводятся в DynamoDB просто отлично.Тем не менее, это не будет работать с Python.Есть идеи, что я могу делать не так?Держу пари, это глупая ошибка.Спасибо.

1 Ответ

0 голосов
/ 01 июня 2018

Может быть, вам нужно создать строковый формат ваших данных полезной нагрузки JSON.Попробуйте это:

payload=json.dumps({
    'ping': '1.967',
    'download': '570.01',
    'upload': '697.85',
    'timestamp': '1527845073'
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...