#amazon-dynamodb #aws-api-gateway
#amazon-dynamodb #aws-api-gateway
Вопрос:
У меня настроена конечная точка на API gateway, которая взаимодействует непосредственно с DynamoDB.
При поступлении запроса post я использую скрипт body mapper для сопоставления параметров моего запроса URL с параметрами DynamoDB.
Параметры моего URL
{
"name": "sdaf",
"location": "asdf",
"gender": "male"
}
Скрипт для сопоставления тела
{
"TableName": "sample-table",
"Item": {
"firstName": {
"S": "$input.path('$.name')"
},
"location": {
"S": "$input.path('$.location')"
}
}
}
Все это работает нормально, пока мне не нужно записать весь объект в dynamo.
Новые параметры URL
{
"name": "sdaf",
"location": "asdf",
"gender": "male",
"hobbies": {
"hobby1": {
"startedAt": "<some time>"
},
"hobby2": {
"startedAt": "<some time>"
},
}
}
Я не уверен, как должен выглядеть body mapper для этой ситуации?
Я пробовал это:
Средство сопоставления тела
{
"TableName": "sample-table",
"Item": {
"firstName": {
"S": "$input.path('$.name')"
},
"location": {
"S": "$input.path('$.location')"
},
"hobbies": {
"M": "$input.path('$.hobbies')"
}
}
}
Но не работает. Интересно, есть ли способ выгрузить объект в столбец в dynamo напрямую из api gateway. Я знаю, что это возможно при добавлении лямбда-выражения между ними, но я хочу избежать этого.
Ответ №1:
Я не думаю, что это можно заставить работать при передаче хобби в качестве параметра URL.
Если вместо этого передать хобби в теле, вы можете сделать что-то вроде этого:
"M": {
#foreach( $elem in $input.path('$.hobbies'))
$elem
#if($foreach.hasNext),#end
#end
}