2015-07-20 3 views
4

В Amazon API шлюза Я создал простой API, содержащий единый ресурс под названием демо и один POST метод, соответствующий этому:Deploy API для Amazon API Шлюз

enter image description here

сейчас , Я хочу, чтобы моя конечная точка принимала POST запрос любойContent-Type, поэтому необязательно приложение lication/json, но также обычная почта/текст. Затем я хочу взять тело запроса и завернуть его в JSON объекта и отправить его в функцию Amazon Lambda (Lambda функция может принимать только JSON объекта в качестве параметра).

Для этого я редактировал интеграции запрос соответствующего мой метод использовать отображение пользовательского шаблона:

enter image description here

Я использовал ссылку из документации Amazon, которую можно найти здесь: http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html

Моя функция Lambda выглядит следующим образом:

exports.handler = function(event, context) { 
    context.succeed(event); 
}; 

При тестировании я получаю ожидаемый результат, независимо от того, что я посылаю:

enter image description here

Однако, когда я раскрываю, преобразование просто больше не работает, он ожидает JSON

  • посылания чего-нибудь yelds это:

enter image description here

  • Отправка JSON дает это:

enter image description here

Есть ли какая-либо часть этого процесса, выполняемого неправильно? Я что-то теряю при развертывании? Для меня это выглядит очень раздражающей ошибкой Amazon, может ли кто-нибудь подтвердить это?

+0

Работает ли кнопка «Тест»? – kixorz

+0

Да, но важно понимать, что при тестировании типа контента запрос вынужден быть * application/json *. Это, в свою очередь, будет соответствовать моему шаблону. – Interfector

+0

И вы не можете удалить требуемый 'Content-Type' или заменить его' '* ''? – kixorz

ответ

3

Используйте тип содержимого «приложение/JSON».

https://gist.github.com/maruks/e036168263cd412146e6

+2

Ваше решение отлично и определенно лучше, чем то, что я смог найти в документации. Однако это означает, что мне нужно заранее знать все типы контента, которые я мог бы получить. Есть ли способ указать что-то вроде типа содержимого подстановочного знака, который будет захватывать даже запросы без заданного типа контента (или разные вместе)? – Interfector

+0

@Interfector Я считаю, что его еще нет возможности иметь обработчик по умолчанию/подстановочного знака. От Amazon пока нет официального ответа на этот вопрос (https://forums.aws.amazon.com/message.jspa?messageID=665906#665906) на их форуме. – user3526

+0

Приложение/json является типом контента по умолчанию. Если в запросе не указан тип содержимого, шаблон отображения для приложения/json будет использоваться для создания события для Lambda. Если в запросе был задан тип контента, то, похоже, вам нужно иметь шаблон для каждого возможного типа содержимого. –

1

Вы пытались установить заголовки Accept и Content-Type в свой запрос на завивание? Ниже я предполагаю, что вы посылаете «текст/обычным» и можете принимать JSON в ответ

-H "Content-Type: text/plain" -H "Accept: application/json" 
+0

Я просто попробовал это, и он не работает. Принимающая часть избыточна, я просто возьму то, что было брошено на меня. Я также попытался установить Content-Type в application/json, надеясь, что я пропустил какое-то волшебство из Amazon. – Interfector

Смежные вопросы