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 enTransactGetItems. 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
transactItemses 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
tablees 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
itemsserá 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 bloquecancellationReasonsserá el mismo que el orden de los elementos de solicitud. -
TransactGetItemsestá 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.