но вам то эта {} передается не текстом, а объектом, ваш язык лямбды как из этого объекта порядок то вытащит? во вторых, копии параметра объединяются через запятую, т.е. ?id=1&a=b&id=2 превратится в { 'id': '1,2' , 'a': 'b' } что тоже не позволит строку восстановить
Я использовал Python либу urllib.urlencode
когда хендлер лямбы вызывается, ему передается объект евента, этот объект не строка, а готовый объект вашего языка лямбы. в питоне это dict , в dict, который до недавнего времени не сохранял порядок добавления ключей, с недавнего времени (с версии 3.6 подсказывает гугол) порядок сохраняется, но это фича языка, скажем написать лямбду на javascript с проверяющую хеш уже не выйдет. т.е. вы в дизайне закладываетесь на какую-то специфическую фичу языка, тем самым , ИМХО, подкладываете себе свинью. В доке к API gateway (https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html) нигде не указано, что они в эту мапу будут добавлять параметры в порядке следования их в запросе, т.е. даже если вы твёрдо знаете , что навсегда останетесь на питоне >= 3.6 всё-равно закладываетесь на недокументированную фичу лямбд, которая может всегда поменяться и вас не спросят.
Технически у многих языков есть ордередмап, например у питона словарь так себя ведёт начиная с 3.6 версии.
Это вы очень хорошо подметили! Пожалуй, стоит сходить к сервисной команде (если пустят)
кстате да, если у вас JSON, то знаю точно что в js нету спецификации о том что порядок элементов будет соблюден при конвертации
даже если в языке можно добраться до сырой JSON строки с евентом, как в Java например, нет никакой гарантии, что в этой строке параметры будут идти в том же порядке, как и в запросе. На практике наверняка будут в простом случае,, можно связаться с поддержкой и попросить рассмотреть возможность добавить это в документацию
Обсуждают сегодня