Возвращают HTML-код от шлюза в AWS API-интерфейс
Я пытаюсь добиться того же, что и этот пост, но я не понимаю ответа там и не имею разрешения просить разъяснений в комментариях.
У меня есть конечная точка шлюза API, которая принимает запрос GET, передает некоторые переменные запроса в функцию Lambda (реализованную в Python) и возвращает текст / html через пустую модель ответа (как описано здесь
Как описано в предыдущем вопросе SO, если лямбда-функция возвращает HTML-строка и конечная точка API использует стандартный вывод Passthrough behavior @ Integration Response, вывод HTML заключен в кавычки:
"n<html>n<body>n ... n</body>n</html>n"
Этот ответ (от @ARUNBALAN NV) гласит: "просто сохраните разметку HTML в переменной и верните ее.", но я не уверен, что это означает в контексте лямбда-функции. Это значит, чтобы вернуть "приложение/JSON" ответ с элементом под названием "variableHTML"? Что-то вроде этого?
"{"variableHTML": "\n<html>\n<body>\n ... \n</body>\n</html>\n"}"
Я настроил это & в API Gateway моя интеграция Теперь Response использует отображение для извлечения элемента (для 200 ответов application/json) точно так, как было предложено:
#set($inputRoot = $input.path('$'))
$inputRoot.variableHTML .
В результате теперь возвращается одна точка.
Я перепробовал много вариантов ($input.json вместо $input.путь, различные типы контента на разных этапах и т. д.), Но чувствую, что вышеописанная настройка наиболее точно соответствует принятому ответу из другого потока.
Любое понимание того, где я ошибаюсь в этом, будет оценено по достоинству. Спасибо за чтение!2 ответа:
Вы очень близки. Ключом к пониманию этого является понимание того, что любой возвращаемый объект Python будет сериализован в JSON. Таким образом, если вы возвращаете строку, она будет заключена в кавычки и экранирована в допустимый объект JSON. Если вам нужно значение этой строки, то используйте следующее сопоставление ответов интеграции:
#set($inputRoot = $input.path('$')) $inputRoot
Строка
Предположим, вы хотите построить ответ в отображении, а не в своей программе. Тогда вместо того, чтобы возвращать строку Python, вы можете вернуть объект Python, например:#set
дает$inputRoot
значение всего объекта JSON, возвращенного программой Python... это всего лишь исходная строка, которую вы вернули до лямбда-фреймворка преобразовал его в JSON.return {"title": "Greeting", "message": "Hello"}
Ваше отображение может преобразовать это в HTML следующим образом:
Однако использование такого сопоставления более полезно, если вы возвращаете структурированные данные, чем простой HTML. Я бы использовал первое отображение выше для вашей проблемы.#set($inputRoot = $input.path('$')) <html><head><title>$inputRoot.title</title></head> <body>$inputRoot.message</body></html>