Вложенные объекты для отображения тела API gateway

#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
      }