Transformar solicitações e respostas de API para APIs HTTP no API Gateway
Você pode modificar solicitações de API dos clientes antes que eles atinjam suas integrações de backend. Você também pode alterar a resposta das integrações antes que o API Gateway retorne a resposta aos clientes. Use o mapeamento de parâmetros para modificar solicitações e respostas de API para APIs HTTP. Para usar o mapeamento de parâmetros, especifique os parâmetros de solicitação de API ou resposta a serem modificados e especifique como modificar esses parâmetros.
Transformação de solicitações de API
Você usa parâmetros de solicitação para alterar solicitações antes que elas atinjam suas integrações de backend. Você pode modificar cabeçalhos, strings de consulta ou o caminho da solicitação.
Os parâmetros de solicitação são um mapa de chave-valor. A chave identifica a localização do parâmetro da solicitação a ser alterado e como alterá-lo. O valor especifica os novos dados para o parâmetro.
A tabela a seguir mostra as chaves suportadas.
Tipo | Sintaxe |
---|---|
Cabeçalho | append|overwrite|remove:header. |
String de consulta | append|overwrite|remove:querystring. |
Caminho | overwrite:path |
A tabela a seguir mostra os valores suportados que você pode mapear para parâmetros.
Tipo | Sintaxe | Observações |
---|---|---|
Valor de cabeçalho | $request.header.name ou ${request.header.name } |
Nomes de cabeçalhos não diferenciam maiúsculas de minúsculas. O API Gateway combina vários valores de cabeçalho com vírgulas, por exemplo, "header1": "value1,value2" . Alguns cabeçalhos são reservados. Para saber mais, consulte Cabeçalhos reservados. |
Valor da string de consulta | $request.querystring.name ou ${request.querystring.name } |
Os nomes de strings de consulta diferenciam maiúsculas e minúsculas O API Gateway combina vários valores com vírgulas, por exemplo, "querystring1" "Value1,Value2" . |
Corpo da solicitação | $request.body.name ou ${request.body.name } |
Uma expressão de caminho JSON. Descida recursiva ($request.body..name) e expressões de filtro (?(expression) ) não são suportadas. notaQuando você especifica um caminho JSON, o API Gateway trunca o corpo da solicitação em 100 KB e, em seguida, aplica a expressão de seleção. Para enviar cargas maiores que 100 KB, especifique |
O caminho da solicitação. | $request.path ou ${request.path} | O caminho da solicitação, sem o nome do estágio. |
Parâmetro de caminho | $request.path.name ou ${request.path.name } |
O valor de um parâmetro de caminho na solicitação. Por exemplo, se a rota for /pets/{petId} , você poderá mapear o parâmetro petId da solicitação com $request.path.petId . |
Variável de contexto | $context.variableName ou ${context.variableName } |
O valor de uma variável de contexto. notaSomente os caracteres especiais |
Variável de estágio | $stageVariables.variableName ou ${stageVariables.variableName } |
O valor de uma variável de estágio. |
Valor estático | string |
Um valor constante. |
nota
Para usar mais de uma variável em uma expressão de seleção, inclua a variável entre colchetes. Por exemplo, ${request.path.name} ${request.path.id}
.
Transformando respostas da API
Você usa parâmetros de resposta para transformar a resposta HTTP de uma integração de backend antes de retornar a resposta aos clientes. Você pode modificar cabeçalhos ou o código de status de uma resposta antes que o API Gateway retorne a resposta aos clientes.
Você configura os parâmetros de resposta para cada código de status que sua integração retorna. Os parâmetros de resposta são um mapa de chave-valor. A chave identifica a localização do parâmetro da solicitação a ser alterado e como alterá-lo. O valor especifica os novos dados para o parâmetro.
A tabela a seguir mostra as chaves suportadas.
Tipo | Sintaxe |
---|---|
Cabeçalho | append|overwrite|remove:header. |
Código de status | overwrite:statuscode |
A tabela a seguir mostra os valores suportados que você pode mapear para parâmetros.
Tipo | Sintaxe | Observações |
---|---|---|
Valor de cabeçalho | $response.header.nome ou ${response.header.nome } |
Nomes de cabeçalhos não diferenciam maiúsculas de minúsculas. O API Gateway combina vários valores de cabeçalho com vírgulas, por exemplo, "header1": "value1,value2" . Alguns cabeçalhos são reservados. Para saber mais, consulte Cabeçalhos reservados. |
Corpo da resposta | $response.body.name ou ${response.body.name } |
Uma expressão de caminho JSON. Descidas recursivas ($response.body..name ) e expressões de filtro (?(expression) ) não são compatíveis. notaQuando você especifica um caminho JSON, o API Gateway trunca o corpo da resposta a 100 KB e, em seguida, aplica a expressão de seleção. Para enviar cargas maiores que 100 KB, especifique |
Variável de contexto | $context.variableName ou ${context.variableName } |
O valor de uma variável de contexto compatível. |
Variável de estágio | $stageVariables.variableName ou ${stageVariables.variableName } |
O valor de uma variável de estágio. |
Valor estático | string |
Um valor constante. |
nota
Para usar mais de uma variável em uma expressão de seleção, inclua a variável entre colchetes. Por exemplo, ${request.path.name} ${request.path.id}
.
Cabeçalhos reservados
Os seguintes cabeçalhos são reservados. Não é possível configurar mapeamentos de solicitação ou resposta para esses cabeçalhos.
-
access-control-*
-
apigw-*
-
Autorização
-
Conexão
-
Content-Encoding
-
Content-Length
-
Content-Location
-
Encaminhado
-
Keep-alive
-
Origem
-
Proxy-Authenticate
-
Proxy-Authorization
-
TE
-
Trailers
-
Transfer-Encoding
-
Upgrade
-
x-amz-*
-
x-amzn-*
-
X-Forwarded-For
-
X-Forwarded-Host
-
X-Forwarded-Proto
-
Via
Exemplos
Os exemplos da AWS CLI a seguir configuram mapeamentos de dados. Para ver modelos de exemplo do AWS CloudFormation, consulte o GitHub
Adicionar um cabeçalho a uma solicitação de API
O exemplo a seguir adiciona um cabeçalho chamado header1
a uma solicitação de API antes que ele atinja sua integração de backend. O API Gateway preenche o cabeçalho com o ID da solicitação.
aws apigatewayv2 create-integration \ --api-id abcdef123 \ --integration-type HTTP_PROXY \ --payload-format-version 1.0 \ --integration-uri 'https://api.example.com' \ --integration-method ANY \ --request-parameters '{ "append:header.header1": "$context.requestId" }'
Renomear um cabeçalho de solicitação
O exemplo a seguir renomeia um cabeçalho de solicitação de header1
para header2
.
aws apigatewayv2 create-integration \ --api-id abcdef123 \ --integration-type HTTP_PROXY \ --payload-format-version 1.0 \ --integration-uri 'https://api.example.com' \ --integration-method ANY \ --request-parameters '{ "append:header.header2": "$request.header.header1", "remove:header.header1": "''"}'
Alterar a resposta de uma integração
O exemplo a seguir configura parâmetros de resposta para uma integração. Quando as integrações retornam um código de status 500, o API Gateway altera o código de status para 403 e adiciona header1
1 à resposta. Quando a integração retorna um código de status 404, o API Gateway adiciona um error
cabeçalho à resposta.
aws apigatewayv2 create-integration \ --api-id abcdef123 \ --integration-type HTTP_PROXY \ --payload-format-version 1.0 \ --integration-uri 'https://api.example.com' \ --integration-method ANY \ --response-parameters '{"500" : {"append:header.header1": "$context.requestId", "overwrite:statuscode" : "403"}, "404" : {"append:header.error" : "$stageVariables.environmentId"} }'
Remover mapeamentos de parâmetros configurados
O comando de exemplo a seguir remove os parâmetros de solicitação configurados anteriormente para append:header.header1
. Ele também remove parâmetros de resposta previamente configurados para um código de status 200.
aws apigatewayv2 update-integration \ --api-id abcdef123 \ --integration-id hijk456 \ --request-parameters '{"append:header.header1" : ""}' \ --response-parameters '{"200" : {}}'