Я успешно создал и протестировал в API Gateway Console API REST Service Proxy, возвращающий все элементы в таблице DynamoDB с помощью Scan API. И чтобы сделать ответ БД как объекта JSON, я добавил шаблон сопоставления в «Интеграционный ответ», который преобразует ответ следующим образом:
{
"tableItems": [
{ // item_1
"attribute_1": "value",
"attribute_2": "someValue"
},
{ //item_2
"attribute_1": "value",
"attribute_2": "someValue"
},
{ //item_3
"attribute_1": "value",
"attribute_2": "someValue"
}
]
}
Но затем я включил CORS (оставив все параметры по умолчанию), развернул API с этапом тестирования 'beta' и, наконец, вызвал его в веб-приложении, используя метод jQuery $ .get (). Я получил следующий ответ с пустым массивом «tableItems»:
{
"tableItems": []
}
Подозревая что-то не так в разделе «Ответ метода» шлюза API, я проверил настройки «Тело ответа на 200». Тип контента был установлен на «application / json» с моделями «Empty». По-видимому, я не могу изменить последние значения.
Обновление:
Чтобы углубиться в проблему root, я включил журналы Cloudwatch для Api Gateway, и вызвать конечную точку REST API GET следующим образом:
$.get("https://my_api_id.execute-api_region.amazonaws.com/beta/get-items/{tablename}", {
tablename: "abc"
})
.then(res => console.log(res))
.catch(err => console.error(err));
В журналах я получаю следующую информацию:
{
"requestId": "...",
"ip": "...",
"caller": "-",
"user": "-",
"requestTime": "21/Apr/2020:08:03:41 +0000",
"httpMethod": "GET",
"resourcePath": "/get-items/{tablename}",
"status": "200",
"protocol": "HTTP/1.1",
"responseLength": "44" <--- to probe
}