AWS API Gateway - условное форматирование ответа интеграции? - PullRequest
1 голос
/ 28 февраля 2020

Я настроил AWS API-шлюз для работы в качестве прокси для операции HTTP GET DynamoDB.

Следующий запрос интеграции извлекает все записи, где "topi c" == 'sensor' через HTTP GET / POST:

{
    "TableName": "SensorData",
    "IndexName": "topic-index",
    "KeyConditionExpression": "topic = :v1",
    "ExpressionAttributeValues": {
        ":v1": {
            "S": "$input.params('sensor')"
        }
    }
}

Все это прекрасно работает. Моя проблема заключается в форматировании ответа интеграции, который сервер API AWS предоставляет конечному клиенту. У меня есть несколько различных тем, раскрываемых через API, и я хотел бы условно отформатировать полезные данные через «Шаблон отображения: application / json», основываясь на особенностях полезной нагрузки.

Я развернул этот скрипт, но мой развернутый API сейчас обслуживаю пустые словари:

#set($inputRoot = $input.path('$'))
{
  #if("$elem.topic.S" == "sensor_kitchen")
    "comments": [
        #foreach($elem in $inputRoot.Items) {
            "userId": "$elem.userId.S",
            "topic": "$elem.topic.S",
            "timeStamp": "$elem.timeStamp.S",
            "status": "$elem.status.BOOL"
        }#if($foreach.hasNext),#end
          #end
    ]
  #elseif("$elem.topic.S" == "sensor_livingroom")
    "comments": [
        #foreach($elem in $inputRoot.Items) {
            "userId": "$elem.userId.S",
            "topic": "$elem.topic.S",
            "timeStamp": "$elem.timeStamp.S"
            "status": "$elem.status.BOOL"
        }#if($foreach.hasNext),#end
        #end
    ]
    #elseif("$elem.topic.S" == "sensor_bedroom")
      "comments": [
          #foreach($elem in $inputRoot.Items) {
          "userId": "$elem.userId.S",
          "topic": "$elem.topic.S",
          "timeStamp": "$elem.timeStamp.S"
          "heart_rate": "elem.heart_rate.S",
          "heart_rate_variability": "$elem.heart_rate_variability.S",
          "measured_signal_strength": "$elem.measured_signal_strength.S"
          }#if($foreach.hasNext),#end
          #end
      ]
      #elseif("$elem.topic.S" == "sensor_bathroom")
        "comments": [
            #foreach($elem in $inputRoot.Items) {
            "userId": "$elem.userId.S",
            "topic": "$elem.topic.S",
            "timeStamp": "$elem.timeStamp.S",
            "prediction": "$elem.prediction.S"
            }#if($foreach.hasNext),#end
            #end
        ]
      #end
}

Что я тут не так делаю? Любая помощь очень ценится.

...