2016-04-30 3 views
1

Я ищу хэш-эквивалент этого вопроса: How to pass array query params to AWS API Gateway?Как передать параметры запроса hash в AWS API Gateway?

В принципе, я хочу, чтобы настроить параметры запроса, которые выглядят следующим образом: example.com?color[background]=yellow&color[foreground]=black

Когда я пытаюсь создать параметр запроса с именем color[background] в API-интерфейс шлюз консоль, я получаю следующее сообщение об ошибке: Invalid mapping expression specified: Validation Result: warnings : [], errors : [Parameter name should be a non-empty alphanumeric string]

Я также попытался настройка параметров color запроса и затем передавая различные «хэш» к нему. Вот что я пытался переходящие в этот параметр:

  1. {"background" => 123, "foreground" => "abc"} и удаление пространства
  2. {"background" : 123, "foreground" : "abc"} и удаление пространства
  3. {background:123,foreground:abc}

Все они происходят в запросе, что некоторая форма example.com?color=%7Bbackground:123,foreground:abc%7D с хешем, который я прохожу после =.

Любые идеи? Является ли эта плохая практика для параметров строки запроса так или иначе, и я должен придерживаться простых параметров?

+1

Вы можете передать хэш, но вы не можете ожидать, что API Gateway понимает, что вы намерены это понимать ... это просто строковое значение в этой точке ... но ... поддерживает ли оно точки в ключе имена? Я бы склонен использовать '? Color.background = yellow & color.background = black' для удобочитаемости, если бы я просто проектировал API без какой-либо конкретной платформы, но это может быть не буквенно-цифровое значение в зависимости от того, насколько они свободно используют термин , –

+0

@ Michael-sqlbot - Спасибо! Я собираюсь пойти с чем-то вроде этого. – readyornot

ответ

1

Поскольку не существует стандартного для передачи сложных структур данных, таких как массивы или карты по строке запроса, API Gateway не пытается интерпретировать или анализировать строку запроса как нечто иное, чем простые пары строк ключа-значения ,

Если вы хотите передать и преобразовать сложные типы, лучше всего сделать это в теле запроса POST или PUT, где вы можете использовать JSON и API Gateway мощный body mapping templates feature.

В качестве альтернативы, если вы должны придерживаться параметров строки запроса, то вы должны либо:

  1. Collapse структура ваших данных, чтобы быть простыми пары ключей значения, как предложил Майкл -sqlbot выше, или
  2. Passthrough необработанную строку запроса на вашу бэкэнд-лямбду или интеграцию с http, где она может обрабатываться, как вам будет угодно. См. this post для получения более подробной информации о том, как это сделать.
+0

Делает смысл. Я могу настроить мой backend, чтобы справиться с этим. Благодаря! – readyornot

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