AWS API Gateway: как сделать параметры строки запроса необязательными в шаблоне сопоставления?

Я не могу понять, как создать необязательные параметры строки запроса, используя шаблон сопоставления в запросе на интеграцию моего ресурса.

Мой шаблон выглядит так:

{ "limit": "$input.params('limit')", "post_date":"$input.params('post_date')" } 

Я бы хотел, чтобы «limit» и «post_date» были необязательными. Этот шаблон создает строку запроса, которая выглядит так, если эти параметры не указаны:

/myresource?limit=undefined&

Когда я жду:

 /myresource

документы, кажется, не распространяется на это. Я нашел в документации несколько примеров шаблонов, которые используют синтаксис, подобный bash, для предоставления условной функциональности. Я пытался протестировать следующее, но оно НЕ будет проверяться в консоли AWS:

        #set($limit = $input.path('limit'))
        { 
          #if($limit)"limit": "$input.params('limit')",#end
        } 

Я на правильном пути?

Спасибо!


person Nick    schedule 10.09.2015    source источник
comment
Я думаю, вы должны определить все возможные параметры, а затем обработать undefined в своем бэкэнде.   -  person adamkonrad    schedule 11.09.2015
comment
Вы используете Lambda в качестве серверной части?   -  person adamkonrad    schedule 11.09.2015
comment
@napalm Вот чем я сейчас занимаюсь. Действительно АВС?! Это глупо. Лямбда -> Да   -  person Nick    schedule 11.09.2015
comment
На самом деле это не плохо, конвейер обработки основан на JS. Он не может знать, если вы не передали undefined намеренно.   -  person adamkonrad    schedule 11.09.2015
comment
@napalm Должно быть так. В любом случае я справляюсь с этим на бэкэнде. Спасибо за ваши мысли.   -  person Nick    schedule 11.09.2015
comment
У меня такая же проблема. Я использую API Gateway в качестве прокси поверх Kinesis. Так что передача undefined не вариант. Я уверен, что есть и другие варианты.   -  person ustroetz    schedule 06.06.2016


Ответы (1)


Да, вы можете сделать это в Api Gateway; хотя это, кажется, не очень хорошо документировано!

В своем вопросе вы упомянули, что это параметр; но вы использовали input.path, который обычно ссылается на элемент в теле запроса POST. Следующее должно работать:

#set($limit = $input.params('limit'))
{
#if($limit && $limit.length() != 0)
"limit": "$input.params('limit')"
#end
}

Что касается документации, я обнаружил, что следующая страница с AWS на самом деле очень полезна. Однако он спрятан в разделе о фиктивных конечных точках:

http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-mock-integration.html

person Tom Kerswill    schedule 30.11.2016