

# Ejemplos de asignación de parámetros para las API de REST en API Gateway
<a name="request-response-data-mappings"></a>

En los siguientes ejemplos se muestra cómo crear expresiones de asignación de parámetros mediante la consola de API Gateway, OpenAPI y plantillas de CloudFormation. Para ver un ejemplo de cómo utilizar la asignación de parámetros para crear los encabezados CORS necesarios, consulte [CORS para las API de REST en API Gateway](how-to-cors.md). 

## Ejemplo 1: asignar un parámetro de solicitud de método a un parámetro de solicitud de integración
<a name="request-response-data-mappings-example-1"></a>

En el siguiente ejemplo se asigna el parámetro de encabezado de solicitud de método `puppies` al parámetro de encabezado de solicitud de integración `DogsAge0`. 

------
#### [ Consola de administración de AWS ]

**Asignación del parámetro de solicitud de método**

1. Inicie sesión en la consola de API Gateway en [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Elija una API de REST.

1. Elija un método.

   El método debe tener una integración sin proxy.

1. En **Configuración de solicitud de método**, elija **Editar**.

1. Elija **Encabezados de solicitud HTTP**.

1. Elija **Agregar encabezado**.

1. En **Nombre**, escriba **puppies**.

1. Seleccione **Save**.

1. Elija la pestaña **Solicitud de integración** y, a continuación, en **Configuración de solicitud de integración**, elija **Editar**.

   La Consola de administración de AWS agrega automáticamente una asignación de parámetros de `method.request.header.puppies ` a `puppies` por usted, pero debe cambiar el **Nombre** para que coincida con el parámetro de encabezado de solicitud que espera el punto de conexión de integración.

1. En **Nombre**, escriba **DogsAge0**.

1. Seleccione **Save**.

1. Vuelva a implementar la API para que los cambios se apliquen.

En los siguientes pasos se muestra cómo verificar que la asignación de parámetros se ha realizado correctamente.

**(Opcional) Prueba de la asignación de parámetros**

1. Elija la pestaña **Prueba**. Puede que tenga que elegir el botón de flecha hacia la derecha para mostrar la pestaña.

1. Para los encabezados, introduzca **puppies:true**.

1. Seleccione **Probar**

1. En **Registros**, el resultado debería tener el siguiente aspecto:

   ```
   Tue Feb 04 00:28:36 UTC 2025 : Method request headers: {puppies=true}
   Tue Feb 04 00:28:36 UTC 2025 : Method request body before transformations: 
   Tue Feb 04 00:28:36 UTC 2025 : Endpoint request URI: http://petstore-demo-endpoint.execute-api.com/petstore/pets
   Tue Feb 04 00:28:36 UTC 2025 : Endpoint request headers: {DogsAge0=true, x-amzn-apigateway-api-id=abcd1234, Accept=application/json, User-Agent=AmazonAPIGateway_aaaaaaa, X-Amzn-Trace-Id=Root=1-abcd-12344}
   ```

   El parámetro de encabezado de solicitud ha cambiado de `puppies` a `DogsAge0`.

------
#### [ CloudFormation ]

 En este ejemplo, utiliza la propiedad [body](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-body) para importar un archivo de definición de OpenAPI en API Gateway. 

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  Api:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Body:
        openapi: 3.0.1
        info:
          title: ParameterMappingExample
          version: "2025-02-04T00:30:41Z"
        paths:
          /pets:
            get:
              parameters:
                - name: puppies
                  in: header
                  schema:
                    type: string
              responses:
                "200":
                  description: 200 response
              x-amazon-apigateway-integration:
                httpMethod: GET
                uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets
                responses:
                  default:
                    statusCode: "200"
                requestParameters:
                  integration.request.header.DogsAge0: method.request.header.puppies
                passthroughBehavior: when_no_match
                type: http
  ApiGatewayDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  ApiGatewayDeployment20250219:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  Stage:
    Type: 'AWS::ApiGateway::Stage'
    Properties:
       DeploymentId: !Ref ApiGatewayDeployment20250219
       RestApiId: !Ref Api
       StageName: prod
```

------
#### [ OpenAPI ]

```
{
  "openapi" : "3.0.1",
  "info" : {
    "title" : "ParameterMappingExample",
    "version" : "2025-02-04T00:30:41Z"
  },
  "paths" : {
    "/pets" : {
      "get" : {
        "parameters" : [ {
          "name" : "puppies",
          "in" : "header",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "200 response"
          }
        },
        "x-amazon-apigateway-integration" : {
          "httpMethod" : "GET",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets",
          "responses" : {
            "default" : {
              "statusCode" : "200"
            }
          },
          "requestParameters" : {
            "integration.request.header.DogsAge0" : "method.request.header.puppies"
          },
          "passthroughBehavior" : "when_no_match",
          "type" : "http"
        }
      }
    }
  }
}
```

------

## Ejemplo 2: asignar varios parámetros de solicitud de método a diferentes parámetros de solicitud de integración
<a name="request-response-data-mappings-example-2"></a>

En el siguiente ejemplo, se asigna el parámetro de cadena de consulta de solicitud de método de varios valores `methodRequestQueryParam` al parámetro de cadena de consulta de solicitud de integración `integrationQueryParam` y se asigna el parámetro de encabezado de solicitud de método `methodRequestHeaderParam` al parámetro de ruta de solicitud de integración `integrationPathParam`.

------
#### [ Consola de administración de AWS ]

**Asignación de los parámetros de solicitud de método**

1. Inicie sesión en la consola de API Gateway en [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Elija una API de REST.

1. Elija un método.

   El método debe tener una integración sin proxy.

1. En **Configuración de solicitud de método**, elija **Editar**.

1. Elija **Parámetros de cadenas de consulta de URL**.

1. Elija **Añadir cadena de consulta**.

1. En **Nombre**, escriba **methodRequestQueryParam**.

1. Elija **Encabezados de solicitud HTTP**.

1. Elija **Agregar encabezado**.

1. En **Nombre**, escriba **methodRequestHeaderParam**.

1. Seleccione **Save**.

1. Elija la pestaña **Solicitud de integración** y, a continuación, en **Configuración de solicitud de integración**, elija **Editar**.

1. Elija los **Parámetros de la ruta URL**.

1. Elija **Añadir parámetro de ruta**.

1. En **Nombre**, escriba **integrationPathParam**.

1. En **Asignado desde**, introduzca **method.request.header.methodRequestHeaderParam**.

   Esto asigna el encabezado de solicitud de método que especificó en la solicitud de método a un nuevo parámetro de ruta de solicitud de integración.

1. Elija **Parámetros de cadenas de consulta de URL**.

1. Elija **Añadir cadena de consulta**.

1. En **Nombre**, escriba **integrationQueryParam**.

1. En **Asignado desde**, introduzca **method.request.multivaluequerystring.methodRequestQueryParam**.

   Esto asigna el parámetro de cadena de consulta de varios valores a un nuevo parámetro de cadena de consulta de solicitud de integración de valor único.

1. Seleccione **Save**.

1. Vuelva a implementar la API para que los cambios se apliquen.

------
#### [ CloudFormation ]

 En este ejemplo, utiliza la propiedad [body](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-body) para importar un archivo de definición de OpenAPI en API Gateway. 

La siguiente definición de OpenAPI crea las siguientes asignaciones de parámetros para una integración de HTTP:
+ El encabezado de la solicitud de método, llamado `methodRequestHeaderParam`, al parámetro de ruta de la solicitud de integración, llamado `integrationPathParam`
+ La cadena de consulta de la solicitud de método de varios valores, llamada `methodRequestQueryParam`, a la cadena de consulta de la solicitud de integración, llamada `integrationQueryParam`

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  Api:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Body: 
        openapi: 3.0.1
        info:
          title: Parameter mapping example 2
          version: "2025-01-15T19:12:31Z"
        paths:
          /:
            post:
              parameters:
                - name: methodRequestQueryParam
                  in: query
                  schema:
                    type: string
                - name: methodRequestHeaderParam
                  in: header
                  schema:
                    type: string
              responses:
                "200":
                  description: 200 response
              x-amazon-apigateway-integration:
                httpMethod: GET
                uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets
                responses:
                  default:
                    statusCode: "200"
                requestParameters:
                  integration.request.querystring.integrationQueryParam: method.request.multivaluequerystring.methodRequestQueryParam
                  integration.request.path.integrationPathParam: method.request.header.methodRequestHeaderParam
                requestTemplates:
                  application/json: '{"statusCode": 200}'
                passthroughBehavior: when_no_templates
                timeoutInMillis: 29000
                type: http
  ApiGatewayDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  ApiGatewayDeployment20250219:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  Stage:
    Type: 'AWS::ApiGateway::Stage'
    Properties:
       DeploymentId: !Ref ApiGatewayDeployment20250219
       RestApiId: !Ref Api
       StageName: prod
```

------
#### [ OpenAPI ]

La siguiente definición de OpenAPI crea las siguientes asignaciones de parámetros para una integración de HTTP:
+ El encabezado de la solicitud de método, llamado `methodRequestHeaderParam`, al parámetro de ruta de la solicitud de integración, llamado `integrationPathParam`
+ La cadena de consulta de la solicitud de método de varios valores, llamada `methodRequestQueryParam`, a la cadena de consulta de la solicitud de integración, llamada `integrationQueryParam`

```
{
  "openapi" : "3.0.1",
  "info" : {
    "title" : "Parameter mapping example 2",
    "version" : "2025-01-15T19:12:31Z"
  },
  "paths" : {
    "/" : {
      "post" : {
        "parameters" : [ {
          "name" : "methodRequestQueryParam",
          "in" : "query",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "methodRequestHeaderParam",
          "in" : "header",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "200 response"
          }
        },
        "x-amazon-apigateway-integration" : {
          "httpMethod" : "GET",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets",
          "responses" : {
            "default" : {
              "statusCode" : "200"
            }
          },
          "requestParameters" : {
            "integration.request.querystring.integrationQueryParam" : "method.request.multivaluequerystring.methodRequestQueryParam",
            "integration.request.path.integrationPathParam" : "method.request.header.methodRequestHeaderParam"
          },
          "requestTemplates" : {
            "application/json" : "{\"statusCode\": 200}"
          },
          "passthroughBehavior" : "when_no_templates",
          "timeoutInMillis" : 29000,
          "type" : "http"
        }
      }
    }
  }
}
```

------

## Ejemplo 3: asignar campos del cuerpo de la solicitud JSON a los parámetros de la solicitud de integración
<a name="request-response-data-mappings-example-3"></a>

También puede asignar parámetros de solicitud de integración desde campos del cuerpo de la solicitud JSON mediante una [expresión JSONPath](http://goessner.net/articles/JsonPath/index.html#e2). El siguiente ejemplo asigna el cuerpo de solicitud de método a un encabezado de solicitud de integración denominado `body-header` y asigna parte del cuerpo de solicitud, expresado mediante una expresión JSON, a un encabezado de solicitud de integración denominado `pet-price`.

Para probar este ejemplo, proporcione una entrada que contenga una categoría de precio, como la siguiente:

```
[ 
  { 
    "id": 1, 
    "type": "dog", 
    "price": 249.99 
  }
]
```

------
#### [ Consola de administración de AWS ]

**Asignación de los parámetros de solicitud de método**

1. Inicie sesión en la consola de API Gateway en [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Elija una API de REST.

1. Elija un método `POST`, `PUT`, `PATCH` o `ANY`.

   El método debe tener una integración sin proxy.

1. En **Configuración de solicitud de integración**, elija **Editar**.

1. Elija **Parámetros de encabezado de solicitud de URL**.

1. Elija **Agregar parámetro de encabezado de solicitud**.

1. En **Nombre**, escriba **body-header**.

1. En **Asignado desde**, introduzca **method.request.body**.

   Esto asigna el cuerpo de solicitud de método a un nuevo parámetro de encabezado de solicitud de integración.

1. Elija **Agregar parámetro de encabezado de solicitud**.

1. En **Nombre**, escriba **pet-price**.

1. En **Asignado desde**, introduzca ** method.request.body[0].price**.

   Esto asigna una parte del cuerpo de solicitud de método a un nuevo parámetro de encabezado de solicitud de integración.

1. Seleccione **Save**.

1. Vuelva a implementar la API para que los cambios se apliquen.

------
#### [ CloudFormation ]

 En este ejemplo, utiliza la propiedad [body](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-body) para importar un archivo de definición de OpenAPI en API Gateway. 

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  Api:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Body: 
        openapi: 3.0.1
        info:
          title: Parameter mapping example 3
          version: "2025-01-15T19:19:14Z"
        paths:
          /:
            post:
              responses:
                "200":
                  description: 200 response
              x-amazon-apigateway-integration:
                httpMethod: GET
                uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets
                responses:
                  default:
                    statusCode: "200"
                requestParameters:
                  integration.request.header.pet-price: method.request.body[0].price
                  integration.request.header.body-header: method.request.body
                requestTemplates:
                  application/json: '{"statusCode": 200}'
                passthroughBehavior: when_no_templates
                timeoutInMillis: 29000
                type: http
  ApiGatewayDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  ApiGatewayDeployment20250219:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  Stage:
    Type: 'AWS::ApiGateway::Stage'
    Properties:
       DeploymentId: !Ref ApiGatewayDeployment20250219
       RestApiId: !Ref Api
       StageName: prod
```

------
#### [ OpenAPI ]

La siguiente definición de OpenAPI asigna los parámetros de solicitud de integración de los campos del cuerpo de solicitud JSON.

```
{
  "openapi" : "3.0.1",
  "info" : {
    "title" : "Parameter mapping example 3",
    "version" : "2025-01-15T19:19:14Z"
  },
  "paths" : {
    "/" : {
      "post" : {
        "responses" : {
          "200" : {
            "description" : "200 response"
          }
        },
        "x-amazon-apigateway-integration" : {
          "httpMethod" : "GET",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets",
          "responses" : {
            "default" : {
              "statusCode" : "200"
            }
          },
          "requestParameters" : {
            "integration.request.header.pet-price" : "method.request.body[0].price",
            "integration.request.header.body-header" : "method.request.body"
          },
          "requestTemplates" : {
            "application/json" : "{\"statusCode\": 200}"
          },
          "passthroughBehavior" : "when_no_templates",
          "timeoutInMillis" : 29000,
          "type" : "http"
        }
      }
    }
  }
}
```

------

## Ejemplo 4: asignar la respuesta de integración a la respuesta de método
<a name="request-response-data-mappings-example-4"></a>

También puede asignar la respuesta de integración a la respuesta de método. En el siguiente ejemplo se asigna el cuerpo de respuesta de integración a un encabezado de respuesta de método denominado `location`, se asigna el encabezado de respuesta de integración `x-app-id` al encabezado de respuesta de método `id` y se asigna el encabezado de respuesta de integración de varios valores `item` al encabezado de respuesta de método `items`.

------
#### [ Consola de administración de AWS ]

**Asignación de la respuesta de integración**

1. Inicie sesión en la consola de API Gateway en [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Elija una API de REST.

1. Elija un método.

   El método debe tener una integración sin proxy.

1. Elija la pestaña **Respuesta de método** y, a continuación, para **Respuesta 200**, elija **Editar**.

1. En **Nombre de encabezado**, elija **Agregar encabezado**.

1. Cree tres encabezados llamados **id**, **item** y **location**.

1. Seleccione **Save**.

1. Elija la pestaña **Respuesta de integración** y, a continuación, en **Predeterminado: respuesta**, elija **Editar**.

1. En **Asignaciones de encabezado**, introduzca lo siguiente.

   1. En **id**, introduzca **integration.response.header.x-app-id**

   1. En **item**, introduzca **integration.response.multivalueheader.item**

   1. En **location**, introduzca **integration.response.body.redirect.url**

1. Seleccione **Save**.

1. Vuelva a implementar la API para que los cambios se apliquen.

------
#### [ CloudFormation ]

 En este ejemplo, utiliza la propiedad [body](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-body) para importar un archivo de definición de OpenAPI en API Gateway. 

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  Api:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Body:
        openapi: 3.0.1
        info:
          title: Parameter mapping example
          version: "2025-01-15T19:21:35Z"
        paths:
          /:
            post:
              responses:
                "200":
                  description: 200 response
                  headers:
                    item:
                      schema:
                        type: string
                    location:
                      schema:
                        type: string
                    id:
                      schema:
                        type: string
              x-amazon-apigateway-integration:
                type: http
                httpMethod: GET
                uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets
                responses:
                  default:
                    statusCode: "200"
                    responseParameters:
                      method.response.header.id: integration.response.header.x-app-id
                      method.response.header.location: integration.response.body.redirect.url
                      method.response.header.item: integration.response.multivalueheader.item
                requestTemplates:
                  application/json: '{"statusCode": 200}'
                passthroughBehavior: when_no_templates
                timeoutInMillis: 29000
  ApiGatewayDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  ApiGatewayDeployment20250219:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  Stage:
    Type: 'AWS::ApiGateway::Stage'
    Properties:
       DeploymentId: !Ref ApiGatewayDeployment20250219
       RestApiId: !Ref Api
       StageName: prod
```

------
#### [ OpenAPI ]

La siguiente definición de OpenAPI asigna la respuesta de integración a la respuesta de método.

```
{
  "openapi" : "3.0.1",
  "info" : {
    "title" : "Parameter mapping example",
    "version" : "2025-01-15T19:21:35Z"
  },
  "paths" : {
    "/" : {
      "post" : {
        "responses" : {
          "200" : {
            "description" : "200 response",
            "headers" : {
              "item" : {
                "schema" : {
                  "type" : "string"
                }
              },
              "location" : {
                "schema" : {
                  "type" : "string"
                }
              },
              "id" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          }
        },
        "x-amazon-apigateway-integration" : {
          "type" : "http",
          "httpMethod" : "GET",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets",
          "responses" : {
            "default" : {
              "statusCode" : "200",
              "responseParameters" : {
                "method.response.header.id" : "integration.response.header.x-app-id",
                "method.response.header.location" : "integration.response.body.redirect.url",
                "method.response.header.item" : "integration.response.multivalueheader.item"
              }
            }
          },
          "requestTemplates" : {
            "application/json" : "{\"statusCode\": 200}"
          },
          "passthroughBehavior" : "when_no_templates",
          "timeoutInMillis" : 29000
        }
      }
    }
  }
}
```

------