

# Variables para transformaciones de datos para API Gateway
<a name="api-gateway-mapping-template-reference"></a>

Cuando cree una asignación de parámetro, puede utilizar variables de contexto como origen de datos. Cuando cree las transformaciones de plantilla de asignación, puede utilizar variables de contexto, de entrada y de utilidad en los scripts que escriba en [Velocity Template Language (VTL)](https://velocity.apache.org/engine/devel/vtl-reference.html). Por obtener ejemplos de plantillas de asignación que utilizan estas variables de referencia, consulte [Ejemplos que utilizan variables para las transformaciones de plantilla de asignación para API Gateway](api-gateway-mapping-variable-examples.md).

Para obtener una lista de variables de referencia para el registro de acceso, consulte [Variables para el registro de acceso para API Gateway](api-gateway-variables-for-access-logging.md).

## Variables de contexto para transformaciones de datos
<a name="context-variable-reference"></a>

Puede utilizar las siguientes variables `$context` que distinguen entre mayúsculas y minúsculas para transformaciones de datos.


| Parámetro | Descripción | 
| --- | --- | 
| \$1context.accountId |  El ID de cuenta de AWS del propietario de la API.  | 
| \$1context.apiId |  El identificador que API Gateway asigna a su API.  | 
| \$1context.authorizer.claims.property |  Una propiedad de las notificaciones devueltas por el grupo de usuarios de Amazon Cognito una vez que se ha autenticado correctamente al intermediario del método. Para obtener más información, consulte [Control del acceso a las API de REST con grupos de usuarios de Amazon Cognito como autorizador](apigateway-integrate-with-cognito.md).  La llamada a `$context.authorizer.claims` devuelve null.   | 
| \$1context.authorizer.principalId |  La identificación de usuario principal asociada con el token enviado por el cliente y devuelto por el autorizador de Lambda de API Gateway (que anteriormente se denominaba autorizador personalizado). Para obtener más información, consulte [Uso de autorizadores Lambda de API Gateway](apigateway-use-lambda-authorizer.md).  | 
| \$1context.authorizer.property |  El valor en forma de cadena del par clave-valor especificado de la asignación `context` que devuelve la función de Lambda del autorizador de Lambda de API Gateway. Por ejemplo, si el autorizador devuelve la siguiente asignación de `context`:  <pre>"context" : {<br />  "key": "value",<br />  "numKey": 1,<br />  "boolKey": true<br />}</pre> La llamada a `$context.authorizer.key` devuelve la cadena `"value"`, la llamada a `$context.authorizer.numKey` devuelve la cadena `"1"` y la llamada a `$context.authorizer.boolKey` devuelve la cadena `"true"`. En el caso de la *propiedad*, el único carácter especial admitido es el carácter `(_)` de subrayado. Para obtener más información, consulte [Uso de autorizadores Lambda de API Gateway](apigateway-use-lambda-authorizer.md).  | 
| \$1context.awsEndpointRequestId |  El ID de solicitud del punto de enlace de AWS.  | 
| \$1context.deploymentId | El ID de la implementación de la API. | 
| \$1context.domainName |  El nombre de dominio completo que se utiliza para invocar la API. Este debe ser el mismo que el encabezado `Host` entrante.  | 
| \$1context.domainPrefix |  La primera etiqueta del `$context.domainName`.  | 
| \$1context.error.message |  Una cadena que contiene un mensaje de error de API Gateway. Esta variable solo se puede usar para una sustitución sencilla de variables en una plantilla de mapeo de cuerpo [GatewayResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html), que no procesa el motor de Velocity Template Language, y en el registro de acceso. Para obtener más información, consulte [Supervisión de la ejecución de la API de WebSocket con métricas de CloudWatch](apigateway-websocket-api-logging.md) y [Configuración de respuestas de gateway para personalizar respuestas de errores](api-gateway-gatewayResponse-definition.md#customize-gateway-responses).  | 
| \$1context.error.messageString | El valor entrecomillado de \$1context.error.message, es decir, "\$1context.error.message". | 
| \$1context.error.responseType |  Un [tipo](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html#responseType) de [GatewayResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html). Esta variable solo se puede usar para una sustitución sencilla de variables en una plantilla de mapeo de cuerpo [GatewayResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html), que no procesa el motor de Velocity Template Language, y en el registro de acceso. Para obtener más información, consulte [Supervisión de la ejecución de la API de WebSocket con métricas de CloudWatch](apigateway-websocket-api-logging.md) y [Configuración de respuestas de gateway para personalizar respuestas de errores](api-gateway-gatewayResponse-definition.md#customize-gateway-responses).  | 
| \$1context.error.validationErrorString |  Una cadena que contiene un mensaje de error de validación detallado.  | 
| \$1context.extendedRequestId | El ID ampliado que API Gateway genera y asigna a la solicitud de API. El ID de solicitud ampliado contiene información útil para la depuración y la resolución de problemas. | 
| \$1context.httpMethod |  El método HTTP utilizado. Los valores válidos son: `DELETE`, `GET`, `HEAD`, `OPTIONS`, `PATCH`, `POST` y `PUT`.  | 
| \$1context.identity.accountId |  El ID de cuenta de AWS asociado con la solicitud.  | 
| \$1context.identity.apiKey |  Para los métodos de API que necesitan una clave de API, esta variable es la clave de API asociada a la solicitud del método. Para métodos que no requieren una clave de API, esta variable corresponde a valores null. Para obtener más información, consulte [Planes de uso y clave de API para las API de REST en API Gateway](api-gateway-api-usage-plans.md).  | 
| \$1context.identity.apiKeyId | El ID de clave de API asociado a una solicitud de API que requiere una clave de API. | 
| \$1context.identity.caller |  El identificador principal del intermediario que firmó la solicitud. Compatible con recursos que utilizan la autorización de IAM.  | 
| \$1context.identity.cognitoAuthenticationProvider |  Una lista separada por comas de todos los proveedores de autenticación de Amazon Cognito utilizados por el intermediario que realiza la solicitud. Solo está disponible si la solicitud se firmó con las credenciales de Amazon Cognito.  Por ejemplo, para una identidad de un grupo de usuarios de Amazon Cognito, `cognito-idp. region.amazonaws.com/user_pool_id,cognito-idp.region.amazonaws.com/user_pool_id:CognitoSignIn:token subject claim` Consulte [Uso de las identidades federadas](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html) en la *Guía para desarrolladores de Amazon Cognito* para obtener información sobre los proveedores de autenticación de Amazon Cognito disponibles. | 
| \$1context.identity.cognitoAuthenticationType |  El tipo de autenticación de Amazon Cognito del intermediario que realiza la solicitud. Solo está disponible si la solicitud se firmó con las credenciales de Amazon Cognito. Los valores posibles incluyen `authenticated` para identidades autenticadas y `unauthenticated` para identidades no autenticadas. | 
| \$1context.identity.cognitoIdentityId |  El ID de identidad de Amazon Cognito del intermediario que realiza la solicitud. Solo está disponible si la solicitud se firmó con las credenciales de Amazon Cognito.  | 
| \$1context.identity.cognitoIdentityPoolId |  El ID del grupo de identidades de Amazon Cognito del intermediario que realiza la solicitud. Solo está disponible si la solicitud se firmó con las credenciales de Amazon Cognito.  | 
| \$1context.identity.principalOrgId |  El [ID de organización de AWS](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html).  | 
| \$1context.identity.sourceIp |  La dirección IP de origen de la conexión TCP inmediata que realiza la solicitud al punto de conexión de API Gateway.  | 
| \$1context.identity.clientCert.clientCertPem |  El certificado de cliente codificado en PEM que el cliente presentó durante la autenticación TLS mutua. Presente cuando un cliente accede a una API mediante un nombre de dominio personalizado que tiene una TLS mutua habilitada. Presente solo en los registros de acceso si falla la autenticación TLS mutua.  | 
| \$1context.identity.clientCert.subjectDN |  Nombre distintivo del asunto del certificado que presenta un cliente. Presente cuando un cliente accede a una API mediante un nombre de dominio personalizado que tiene una TLS mutua habilitada. Presente solo en los registros de acceso si falla la autenticación TLS mutua.  | 
| \$1context.identity.clientCert.issuerDN |  Nombre distintivo del emisor del certificado que presenta un cliente. Presente cuando un cliente accede a una API mediante un nombre de dominio personalizado que tiene una TLS mutua habilitada. Presente solo en los registros de acceso si falla la autenticación TLS mutua.  | 
| \$1context.identity.clientCert.serialNumber |  Número de serie del certificado. Presente cuando un cliente accede a una API mediante un nombre de dominio personalizado que tiene una TLS mutua habilitada. Presente solo en los registros de acceso si falla la autenticación TLS mutua.  | 
| \$1context.identity.clientCert.validity.notBefore |  Fecha antes de la cual el certificado no es válido. Presente cuando un cliente accede a una API mediante un nombre de dominio personalizado que tiene una TLS mutua habilitada. Presente solo en los registros de acceso si falla la autenticación TLS mutua.  | 
| \$1context.identity.clientCert.validity.notAfter |  Fecha después de la cual el certificado no es válido. Presente cuando un cliente accede a una API mediante un nombre de dominio personalizado que tiene una TLS mutua habilitada. Presente solo en los registros de acceso si falla la autenticación TLS mutua.  | 
|  \$1context.identity.vpcId | El ID de VPC de la VPC que realiza la solicitud al punto de conexión de API Gateway. | 
|  \$1context.identity.vpceId |  El ID de punto de conexión de VPC del punto de conexión de VPC que realiza la solicitud al punto de conexión de API Gateway. Está presente solo cuando tiene una API privada.  | 
| \$1context.identity.user |  El identificador principal del usuario que se autorizará a acceder al recurso. Compatible con recursos que utilizan la autorización de IAM.  | 
| \$1context.identity.userAgent |  El encabezado [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent) del intermediario de la API.  | 
| \$1context.identity.userArn |  El Nombre de recurso de Amazon (ARN) del usuario identificado después de la autenticación. Para obtener más información, consulte [https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html).  | 
| \$1context.isCanaryRequest |  Devuelve `true` si la solicitud se dirigió al canario y `false` si no se dirigió al canario. Está presente solo cuando tiene un canario activado. | 
| \$1context.path | Ruta de acceso de la solicitud. Por ejemplo, en el caso del URL de una solicitud que no es de proxy https://\$1rest-api-id\$1.execute-api.\$1region\$1.amazonaws.com/\$1stage\$1/root/child, el valor de \$1context.path es /\$1stage\$1/root/child.  | 
| \$1context.protocol | Protocolo de la solicitud; por ejemplo, HTTP/1.1.  Las API de API Gateway pueden aceptar solicitudes HTTP/2, pero API Gateway envía solicitudes a las integraciones de backend mediante HTTP/1.1. Como resultado, el protocolo de solicitud se registra como HTTP/1.1 incluso si un cliente envía una solicitud que usa HTTP/2.   | 
| \$1context.requestId |  ID de la solicitud. Los clientes pueden anular este ID de solicitud. Utilice `$context.extendedRequestId` para un ID de solicitud único que genera API Gateway.  | 
| \$1context.requestOverride.header.header\$1name |  La invalidación del encabezado de solicitud. Si este parámetro se define, contiene los encabezados que se utilizarán en lugar de los **HTTP Headers (Encabezados HTTP)** que se definen en el panel **Integration Request (Solicitud de integración)**. Para obtener más información, consulte [Anulación de los parámetros de solicitud y respuesta y de los códigos de estado de la API para las API de REST en API Gateway](apigateway-override-request-response-parameters.md).  | 
| \$1context.requestOverride.path.path\$1name |  La invalidación de la ruta de acceso de la solicitud. Si este parámetro se define, contiene la ruta de acceso de la solicitud que se utilizará en lugar de los **URL Path Parameters (Parámetros de ruta URL)** que se definen en el panel **Integration Request (Solicitud de integración)**. Para obtener más información, consulte [Anulación de los parámetros de solicitud y respuesta y de los códigos de estado de la API para las API de REST en API Gateway](apigateway-override-request-response-parameters.md).  | 
| \$1context.requestOverride.querystring.querystring\$1name |  La invalidación de la cadena de consulta de solicitud. Si este parámetro se define, contiene las cadenas de consulta de solicitud que se utilizarán en lugar de los **URL Query String Parameters (Parámetros de cadena de consulta URL)** que se definen en el panel **Integration Request (Solicitud de integración)**. Para obtener más información, consulte [Anulación de los parámetros de solicitud y respuesta y de los códigos de estado de la API para las API de REST en API Gateway](apigateway-override-request-response-parameters.md).  | 
| \$1context.responseOverride.header.header\$1name | La invalidación del encabezado de respuesta. Si este parámetro se define, contiene el encabezado que se devolverá en lugar del Response header (Encabezado de respuesta) que se define como Default mapping (Asignación predeterminada) en el panel Integration Response (Respuesta de integración). Para obtener más información, consulte [Anulación de los parámetros de solicitud y respuesta y de los códigos de estado de la API para las API de REST en API Gateway](apigateway-override-request-response-parameters.md). | 
| \$1context.responseOverride.status | La invalidación del código de estado de respuesta. Si este parámetro se define, contiene el código de estado que se devolverá en lugar del Method response status (Estado de respuesta de método) que se define como Default mapping (Asignación predeterminada) en el panel Integration Response (Respuesta de integración). Para obtener más información, consulte [Anulación de los parámetros de solicitud y respuesta y de los códigos de estado de la API para las API de REST en API Gateway](apigateway-override-request-response-parameters.md). | 
| \$1context.requestTime | Hora de la solicitud en formato [CLF](https://httpd.apache.org/docs/current/logs.html#common)-(dd/MMM/yyyy:HH:mm:ss \$1-hhmm). | 
| \$1context.requestTimeEpoch | Hora de la solicitud en formato [Epoch](https://en.wikipedia.org/wiki/Unix_time) en milisegundos. | 
| \$1context.resourceId |  El identificador que API Gateway asigna a su recurso.  | 
| \$1context.resourcePath |  La ruta a su recurso. Por ejemplo, en el caso del URI de una solicitud que no es de proxy `https://{rest-api-id}.execute-api.{region}.amazonaws.com/{stage}/root/child`, el valor de `$context.resourcePath` es `/root/child`. Para obtener más información, consulte [Tutorial: Creación de una API de REST con integración no de proxy HTTP](api-gateway-create-api-step-by-step.md).   | 
| \$1context.stage |  La etapa de implementación de la solicitud de la API (por ejemplo, `Beta` o `Prod`).  | 
| \$1context.wafResponseCode |  La respuesta recibida desde [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html): `WAF_ALLOW` o `WAF_BLOCK`. No se establecerá si la etapa no está asociada a una ACL web. Para obtener más información, consulte [Uso de AWS WAF para proteger sus API de REST en API Gateway](apigateway-control-access-aws-waf.md).  | 
| \$1context.webaclArn |  El ARN completo de la ACL web que se utiliza para decidir si se debe permitir o bloquear la solicitud. No se establecerá si la etapa no está asociada a una ACL web. Para obtener más información, consulte [Uso de AWS WAF para proteger sus API de REST en API Gateway](apigateway-control-access-aws-waf.md).  | 

## Variables de entrada
<a name="input-variable-reference"></a>

Puede utilizar las siguientes variables `$input` que distinguen entre mayúsculas y minúsculas para hacer referencia a la carga útil de solicitud del método y a los parámetros de solicitud del método. Están disponibles las siguientes funciones:


| Variable y función | Descripción | 
| --- | --- | 
| \$1input.body |  Devuelve la carga de solicitud bruta como una cadena. Puede utilizar `$input.body` para conservar números enteros de punto flotante, como `10.00`. | 
| \$1input.json(x) | Esta función evalúa una expresión JSONPath y devuelve los resultados como una cadena JSON. Por ejemplo, `$input.json('$.pets')` devuelve una cadena JSON que representa la estructura de `pets` (mascotas). Para obtener más información acerca de JSONPath, consulte [JSONPath](https://goessner.net/articles/JsonPath/) o [JSONPath for Java](https://github.com/json-path/JsonPath). | 
| \$1input.params() |  Devuelve una asignación de todos los parámetros de solicitud. Recomendamos que se utilice `$util.escapeJavaScript` para sanear el resultado a fin de evitar un posible ataque de inyección. Para un control total del saneamiento de solicitudes, utilice una integración de proxy sin plantilla y gestione dicho saneamiento en su integración. | 
| \$1input.params(x) | Devuelve el valor de un parámetro de solicitud de método de la ruta, cadena de consulta o valor de encabezado (buscado en este orden) dada una cadena de nombre de parámetro `x`. Recomendamos que se utilice `$util.escapeJavaScript` para sanear el parámetro a fin de evitar un posible ataque de inyección. Para un control total del saneamiento de parámetros, utilice una integración de proxy sin plantilla y gestione dicho saneamiento en su integración. | 
| \$1input.path(x) | Toma una cadena de expresión JSONPath (`x`) y devuelve una representación del resultado en forma de objeto JSON. Esto le permite tener acceso y manipular los elementos de la carga de forma nativa en [Apache Velocity Template Language (VTL)](https://velocity.apache.org/engine/devel/vtl-reference.html). Por ejemplo, si la expresión `$input.path('$.pets')` devuelve un objeto como este: <pre>[<br />  { <br />    "id": 1, <br />    "type": "dog", <br />    "price": 249.99 <br />  }, <br />  { <br />    "id": 2, <br />    "type": "cat", <br />    "price": 124.99 <br />  }, <br />  { <br />    "id": 3, <br />    "type": "fish", <br />    "price": 0.99 <br />  } <br />]</pre> `$input.path('$.pets').size()` devolvería `"3"`. Para obtener más información acerca de JSONPath, consulte [JSONPath](https://goessner.net/articles/JsonPath/) o [JSONPath for Java](https://github.com/json-path/JsonPath). | 

## Variables de etapa
<a name="stagevariables-template-reference"></a>

Puede utilizar las siguientes variables de etapa como marcadores de posición para ARN y URL en integraciones de método. Para obtener más información, consulte [Uso de variables de etapa para una API de REST en API Gateway](stage-variables.md).


| Sintaxis | Descripción | 
| --- | --- | 
| \$1stageVariables.variable\$1name, \$1stageVariables['variable\$1name'], o bien \$1\$1stageVariables['variable\$1name']\$1  |  *variable\$1name* representa un nombre de variable de etapa.  | 

## Variables de utilidad
<a name="util-template-reference"></a>

Puede utilizar las siguientes variables `$util` que distinguen entre mayúsculas y minúsculas para utilizar funciones de utilidad en las plantillas de asignación. A menos que se especifique lo contrario, el conjunto de caracteres predeterminado es UTF-8.


| Función | Descripción | 
| --- | --- | 
| \$1util.escapeJavaScript() |  Aplica caracteres de escape a los caracteres de una cadena usando reglas de cadena de JavaScript.  Esta función convertirá todas las comillas simples (`'`) en caracteres de escape (`\'`). Sin embargo, JSON no admite comillas simples con caracteres de escape. Por lo tanto, cuando la salida de esta función se utiliza en una propiedad de JSON, debe convertir todas las comillas simples con caracteres de escape (`\'`) en comillas simples normales (`'`). Esto se muestra en el siguiente ejemplo:  <pre> "input" : "$util.escapeJavaScript(data).replaceAll("\\'","'")"</pre>   | 
| \$1util.parseJson() |   Toma un elemento JSON en forma de cadena y devuelve una representación del resultado en forma de objeto. Puede utilizar el resultado de esta función para tener acceso y manipular los elementos de la carga de forma nativa en Apache Velocity Template Language (VTL). Por ejemplo, si tiene la siguiente carga:  <pre>{"errorMessage":"{\"key1\":\"var1\",\"key2\":{\"arr\":[1,2,3]}}"}</pre>  y usa la siguiente plantilla de asignación  <pre>#set ($errorMessageObj = $util.parseJson($input.path('$.errorMessage')))<br />{<br />   "errorMessageObjKey2ArrVal" : $errorMessageObj.key2.arr[0]<br />}<br /></pre> Obtendrá el siguiente resultado: <pre>{<br />   "errorMessageObjKey2ArrVal" : 1<br />}<br /></pre>  | 
| \$1util.urlEncode() | Convierte una cadena en formato "application/x-www-form-urlencoded". | 
| \$1util.urlDecode() | Descodifica una cadena "application/x-www-form-urlencoded". | 
| \$1util.base64Encode() | Codifica los datos en una cadena codificada en base64. | 
| \$1util.base64Decode() | Descodifica los datos de una cadena codificada en base64. | 