Как передать параметры строки запроса URL без предварительного определения в AWS API Gateway

Есть ли способ не определять параметры строки запроса URL как в запросе метода, так и в запросе интеграции и передавать строку запроса в HTTP-прокси?

Например, в случае https://{api id}-api.us-east-1.amazonaws.com/test/user?start=1&end=10

Строка запроса 1. начало 2. конец

Если я помещу параметры строки запроса URL в запрос метода и запрос интеграции, я смогу получить обе строки запроса. Однако, если я не добавлю их и не сделаю запрос в почтальоне, то в бэкэнде я не получу обе строки запроса.

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

Есть ли способ сделать это?

Я использую HTTP-прокси, и вот сопоставление шаблона, которое я использую. (На самом деле это раскрывающийся список сквозного запроса метода).

#set($allParams = $input.params())
{
"body-json" : "$input.json('$')",
"params" : {
#foreach($type in $allParams.keySet())
    #set($params = $allParams.get($type))
"$type" : {
    #foreach($paramName in $params.keySet())
    "$paramName" : "$util.escapeJavaScript($params.get($paramName))"
        #if($foreach.hasNext),#end
    #end
}
    #if($foreach.hasNext),#end
#end
},
"stage-variables" : {
#foreach($key in $stageVariables.keySet())
"$key" : "$util.escapeJavaScript($stageVariables.get($key))"
    #if($foreach.hasNext),#end
#end
},
"context" : {
    "account-id" : "$context.identity.accountId",
    "api-id" : "$context.apiId",
    "api-key" : "$context.identity.apiKey",
    "authorizer-principal-id" : "$context.authorizer.principalId",
    "caller" : "$context.identity.caller",
    "cognito-authentication-provider" : "$context.identity.cognitoAuthenticationProvider",
    "cognito-authentication-type" : "$context.identity.cognitoAuthenticationType",
    "cognito-identity-id" : "$context.identity.cognitoIdentityId",
    "cognito-identity-pool-id" : "$context.identity.cognitoIdentityPoolId",
    "http-method" : "$context.httpMethod",
    "stage" : "$context.stage",
    "source-ip" : "$context.identity.sourceIp",
    "user" : "$context.identity.user",
    "user-agent" : "$context.identity.userAgent",
    "user-arn" : "$context.identity.userArn",
    "request-id" : "$context.requestId",
    "resource-id" : "$context.resourceId",
    "resource-path" : "$context.resourcePath"
    }
}

person jgranda2    schedule 18.05.2016    source источник


Ответы (2)


Как отмечалось на форумах AWS, необходимо определить все параметры строки запроса. явно. Для параметров строки запроса сквозная поддержка отсутствует.

person Bob Kinney    schedule 18.05.2016

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

  "queryParams": {
    #foreach($param in $input.params().querystring.keySet())
    "$param": "$util.escapeJavaScript($input.params().querystring.get($param))" #if($foreach.hasNext),#end

    #end
  }

Кроме того, в пользовательском интерфейсе шлюза API теперь вы можете просто выбрать «Прохождение запроса метода» в раскрывающемся списке «Создать шаблон», и он создаст для вас шаблон, который передает заголовки, параметры и другие вещи без необходимости указывать конкретные свойства, которые вы хотите пройти через.

person Mark B    schedule 18.05.2016
comment
добавил шаблон в запрос на интеграцию, как вы сказали, но он не работает. Я по-прежнему не получаю строки запроса, если не указываю параметры строки запроса URL. Я не использую функцию Lambda. - person jgranda2; 18.05.2016
comment
Можете ли вы добавить свой шаблон сопоставления к своему вопросу? - person Mark B; 18.05.2016
comment
Я только что добавил шаблон сопоставления, и на самом деле он находится в раскрывающемся списке, как вы сказали. В конце я не получаю никаких строк запроса в запросе. - person jgranda2; 18.05.2016
comment
@jgranda2 jgranda2 Я раньше не использовал API Gateway с серверной частью HTTP, но я думаю, что вам придется читать данные запроса из тела HTTP-запроса, который API Gateway отправляет на ваш сервер, вместо того, чтобы искать параметры. - person Mark B; 18.05.2016