

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# AWS AppSync JavaScript referencia de la función de resolución para Lambda
<a name="resolver-reference-lambda-js"></a>

Puede usar AWS AppSync funciones y resolutores para invocar las funciones de Lambda ubicadas en su cuenta. Puede configurar las cargas útiles de sus solicitudes y la respuesta de sus funciones de Lambda antes de devolverlas a sus clientes. También puede especificar el tipo de operación que se va a realizar en el objeto de solicitud. En esta sección se describen las solicitudes para las operaciones de Lambda admitidas.

## Objeto de solicitud
<a name="request-object-js"></a>

El objeto de solicitud de Lambda gestiona los campos relacionados con la función de Lambda:

```
export type LambdaRequest = {
  operation: 'Invoke' | 'BatchInvoke';
  invocationType?: 'RequestResponse' | 'Event';
  payload: unknown;
};
```

A continuación, se muestra un ejemplo en el que se usa una operación `invoke` cuyos datos de carga útil son el campo `getPost` de un esquema de GraphQL junto con sus argumentos del contexto:

```
export function request(ctx) {
  return {
    operation: 'Invoke',
    payload: { field: 'getPost', arguments: ctx.args },
  };
}
```

Todo el documento de mapeo se transfiere como la entrada a la función de Lambda, de modo que el ejemplo anterior tendría ahora el siguiente aspecto:

```
{
  "operation": "Invoke",
  "payload": {
    "field": "getPost",
    "arguments": {
      "input": {
        "id": "postId1",
      }
    }
  }
}
```

### Operación
<a name="operation-js"></a>

El origen de datos de Lambda permite definir dos operaciones en el campo `operation`: `Invoke` y `BatchInvoke`. La `Invoke` operación permite llamar a AWS AppSync la función Lambda para cada solucionador de campos de GraphQL. `BatchInvoke`indica AWS AppSync que se agrupen las solicitudes para el campo GraphQL actual. El campo `operation` es obligatorio.

Para `Invoke`, la solicitud resuelta coincide con la carga útil de entrada de la función de Lambda. Modifiquemos el ejemplo anterior:

```
export function request(ctx) {
  return {
    operation: 'Invoke',
    payload: { field: 'getPost', arguments: ctx.args },
  };
}
```

Esto se resuelve y se transfiere a la función de Lambda, que podría tener un aspecto similar al siguiente:

```
{
  "operation": "Invoke",
  "payload": {
    "arguments": {
      "id": "postId1"
    }
  }
}
```

Para `BatchInvoke`, la solicitud se aplica a cada solucionador de campo del lote. Para mayor concisión, AWS AppSync fusiona todos los `payload` valores de la solicitud en una lista bajo un único objeto que coincida con el objeto de la solicitud. El siguiente controlador de solicitudes de ejemplo muestra esta combinación:

```
export function request(ctx) {
  return {
    operation: 'Invoke',
    payload: ctx,
  };
}
```

Esta solicitud se evalúa y resuelve para dar el siguiente documento de mapeo:

```
{
  "operation": "BatchInvoke",
  "payload": [
    {...}, // context for batch item 1
    {...}, // context for batch item 2
    {...}  // context for batch item 3
  ]
}
```

Cada elemento de la lista `payload` se corresponde con cada elemento individual del lote. También se espera que la función de Lambda devuelva una respuesta en forma de lista que coincida con el orden de los elementos enviados en la solicitud:

```
[
  { "data": {...}, "errorMessage": null, "errorType": null }, // result for batch item 1
  { "data": {...}, "errorMessage": null, "errorType": null }, // result for batch item 2
  { "data": {...}, "errorMessage": null, "errorType": null }  // result for batch item 3
]
```

### Carga útil
<a name="payload-js"></a>

El campo `payload` es un contenedor que se utiliza para transferir cualquier dato a la función de Lambda. Si el `operation` campo está establecido en`BatchInvoke`, AWS AppSync agrupa los `payload` valores existentes en una lista. El campo `payload` es opcional.

### Tipos de invocación
<a name="async-invocation-type-js"></a>

El origen de datos de Lambda permite definir dos tipos de invocación: `RequestResponse` y `Event`. Los tipos de invocación son sinónimos de los tipos de invocación definidos en la [API de Lambda](https://docs.aws.amazon.com//lambda/latest/api/API_Invoke.html). El tipo `RequestResponse` de invocación permite AWS AppSync llamar a la función Lambda de forma sincrónica para esperar una respuesta. La invocación `Event` permite invocar su función de Lambda de forma asíncrona. Para obtener más información sobre cómo Lambda gestiona las solicitudes de tipo de invocación `Event`, consulte [Invocación asíncrona](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html). El campo `invocationType` es opcional. Si este campo no está incluido en la solicitud, AWS AppSync será el tipo de invocación predeterminado. `RequestResponse`

Para cualquier campo `invocationType`, la solicitud resuelta coincide con la carga útil de entrada de la función de Lambda. Modifiquemos el ejemplo anterior:

```
export function request(ctx) {
  return {
    operation: 'Invoke',
    invocationType: 'Event',
    payload: { field: 'getPost', arguments: ctx.args },
  };
}
```

Esto se resuelve y se transfiere a la función de Lambda, que podría tener un aspecto similar al siguiente:

```
{
  "operation": "Invoke",
  "invocationType": "Event",
  "payload": {
    "arguments": {
      "id": "postId1"
    }
  }
}
```

Cuando la `BatchInvoke` operación se usa junto con el campo de tipo de `Event` invocación, AWS AppSync fusiona el solucionador de campos de la misma manera que se mencionó anteriormente y la solicitud se pasa a la función Lambda como un evento asíncrono, siendo una lista de valores. `payload` La respuesta de una solicitud de tipo de invocación `Event` da como resultado un valor `null` sin un controlador de respuesta:

```
{
  "data": {
    "field": null
  }
}
```

Le recomendamos que deshabilite el almacenamiento en caché de los solucionadores para los solucionadores de tipo de invocación `Event`, ya que estos no se enviarían a Lambda si hubiera un acierto de caché.

## Objeto de respuesta
<a name="response-object-js"></a>

Al igual que con otras fuentes de datos, la función Lambda envía una respuesta AWS AppSync que debe convertirse a un tipo GraphQL. El resultado de la función de Lambda se contiene en la propiedad de resultado `context` (`context.result`).

Si la forma de la respuesta de la función de Lambda coincide con la forma del tipo de GraphQL, puede reenviar la respuesta mediante el siguiente controlador de respuestas de función:

```
export function response(ctx) {
  return ctx.result
}
```

No hay campos obligatorios ni restricciones de forma aplicables al objeto de respuesta. Sin embargo, dado que los tipos de GraphQL son estrictos, la respuesta resuelta debe coincidir con el tipo de GraphQL previsto.

## Repuesta de la función de Lambda en lotes
<a name="aws-appsync-resolver-reference-lambda-batched-response-js"></a>

Si el campo `operation` tiene el valor `BatchInvoke`, AWS AppSync espera que la función Lambda le devuelva una lista de elementos. Para volver AWS AppSync a asignar cada resultado al elemento de solicitud original, la lista de respuestas debe coincidir en tamaño y orden. Se pueden tener elementos `null` en la lista de respuestas; `ctx.result` se establece en *null* en consecuencia.