【问题标题】:AWS API Gateway mapping templateAWS API Gateway 映射模板
【发布时间】:2020-09-28 12:09:08
【问题描述】:

我正在制作一项服务,通过 AWS API Gateway 直接从 DynamoDB 请求数据。

我想在集成响应上使用映射模板,以删除 DynamoDB 项目类型并为用户提供预期的简单 JSON。

从 DynamoDB 我得到了这个

{
  "Count": 10,
  "Items": [
    {
      "acc_secret": {
        "S": "12345"
      },
      "acc_apikey": {
        "S": "abcde"
      },
      "login": {
        "S": "user"
      }
    }
  ]
}

我想得到这样的项目格式

[
  {
    "acc_secret": "12345",
    "acc_apikey": "abcde",
    "login": "user"
  },
  {
    "acc_secret": "12345",
    "acc_apikey": "abcde",
    "login": "user"
  }
]

我有一个代码可以更改格式,但需要明确的值。

#set($inputRoot = $input.path('$'))
[
  #foreach($elem in $inputRoot.Items) {
    "param1": "$elem.param1.S",
    "param2": "$elem.param2.S",
    "param3": "$elem.param3.S"
    
  }#if ($foreach.hasNext),#end
  #end
]

但就我而言,我可以有不同类型的键,不仅是字符串,还有更多的项目,我不能一次在映射模板中声明它们。

请帮我在循环中动态转换项目键。 谢谢。

【问题讨论】:

    标签: amazon-web-services aws-api-gateway


    【解决方案1】:

    您可以使用DynamoDB Document Client:而不是通过添加映射来增加应用程序的一般复杂性:

    const dynamoDB = new AWS.DynamoDB.DocumentClient(options);
    dynamoDB.query(queryParams, function(err, data) {
       /*
         data = {
            Items: [
              {
                "acc_secret": "12345",
                "acc_apikey": "abcde",
                "login": "user"
              }
            ]
          }
        */
    });
    

    DynamoDB 文档客户端:

    1. 以您想要的格式返回数据(不包括属性类型)。
    2. 将数据转换为正确的类型(例如,对于数值,它将作为数字返回,与标准 API 将它们作为字符串值返回不同)。

    【讨论】:

    • 是的,最后我决定这样做。一开始我想在中间避开 lambda,但在花了一些时间探索如何做到这一点之后,又回到了 lambda 和 dynamodb 客户端内部。
    • @Maksim 如果你想避免中间出现 lambda,你可以通过 AWS SDK 而不是 API Gateway 来做到这一点。我正在做这种方法直接从客户端访问 dynamodb,而不是 lambda no api gateway
    猜你喜欢
    • 2017-11-30
    • 2018-12-04
    • 2018-01-20
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 2017-12-29
    • 1970-01-01
    相关资源
    最近更新 更多