TransactGetItems - AWS AppSync GraphQL

TransactGetItems

El objeto de solicitud TransactGetItems permite indicar a la función de DynamoDB de AWS AppSync que realice una solicitud TransactGetItems a DynamoDB para recuperar varios elementos, potencialmente en varias tablas. Para este objeto de solicitud, debe especificar lo siguiente:

  • El nombre de la tabla de cada elemento de solicitud de la que se va a recuperar el elemento

  • La clave de cada elemento de solicitud que se va a recuperar de cada tabla

Se aplican los límites de TransactGetItems de DynamoDB y no puede proporcionar ninguna expresión de condición.

El objeto de solicitud TransactGetItems tiene la siguiente estructura:

type DynamoDBTransactGetItemsRequest = { operation: 'TransactGetItems'; transactItems: { table: string; key: { [key: string]: any }; projection?: { expression: string; expressionNames?: { [key: string]: string }; }[]; }; };

Los campos se definen de la siguiente manera:

Campos TransactGetItems

operation

La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB TransactGetItems, este valor se debe establecer en TransactGetItems. Este valor es obligatorio.

transactItems

Los elementos de solicitud que se van a incluir. El valor es una matriz de elementos de solicitud. Se debe proporcionar al menos un elemento de solicitud. Este valor transactItems es obligatorio.

table

La tabla de DynamoDB de la que se va a recuperar el elemento. El valor es una cadena con el nombre de la tabla. Este valor table es obligatorio.

key

La clave de DynamoDB que representa la clave principal del elemento que se desea recuperar. Los elementos de DynamoDB pueden tener solo una clave hash o una clave hash y una clave de clasificación, dependiendo de la estructura de la tabla. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud).

projection

Proyección que se utiliza para especificar los atributos que se devolverán de la operación de DynamoDB. Para obtener más información acerca de las proyecciones, consulte la sección Proyecciones. Este campo es opcional.

Cosas que tener en cuenta:

  • Si una transacción se realiza correctamente, el orden de los elementos recuperados en el bloque items será el mismo que el orden de los elementos de solicitud.

  • Las transacciones se realizan en régimen de todo o nada. Si algún elemento de solicitud causa un error, no se realizará la transacción completa y se devolverán los detalles del error.

  • El hecho de no poder recuperar un elemento de solicitud no es un error. En su lugar, aparece un elemento null en el bloque items (elementos) en la posición correspondiente.

  • Si el error de una transacción es TransactionCanceledException, se rellenará el bloque cancellationReasons. El orden de los motivos de cancelación en el bloque cancellationReasons será el mismo que el orden de los elementos de solicitud.

  • TransactGetItems está limitado a 100 elementos de solicitud.

Para el siguiente controlador de solicitudes de función de ejemplo:

import { util } from '@aws-appsync/utils'; export function request(ctx) { const { authorId, postId } = ctx.args; return { operation: 'TransactGetItems', transactItems: [ { table: 'posts', key: util.dynamodb.toMapValues({ postId }), }, { table: 'authors', key: util.dynamodb.toMapValues({ authorId }), }, ], }; }

Si la transacción se realiza correctamente y solo se recupera el primer elemento solicitado, el resultado de la invocación disponible en ctx.result es el siguiente:

{ "items": [ { // Attributes of the first requested item "post_id": "p1", "post_title": "title", "post_description": "description" }, // Could not retrieve the second requested item null, ], "cancellationReasons": null }

Si la transacción no se realiza correctamente debido a la excepción TransactionCanceledException causada por el primer elemento de solicitud, el resultado de la invocación disponible en ctx.result es el siguiente:

{ "items": null, "cancellationReasons": [ { "type":"Sample error type", "message":"Sample error message" }, { "type":"None", "message":"None" } ] }

El ctx.error contiene detalles acerca del error. Los valores de items de claves y cancellationReasons estarán presentes sin duda en ctx.result.