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.
Referencia de las plantillas de mapeo de solucionador para DynamoDB
nota
Ahora admitimos de forma básica el tiempo de ejecución APPSYNC_JS y su documentación. Considere la opción de utilizar el tiempo de ejecución APPSYNC_JS y sus guías aquí.
El solucionador de DynamoDB de AWS AppSync permite utilizar GraphQL
GetItem
El documento de mapeo de solicitudes de GetItem
le permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud GetItem
a DynamoDB, así como especificar lo siguiente:
-
La clave del elemento de DynamoDB.
-
Si se utiliza una lectura consistente o no.
El documento de mapeo de GetItem
tiene la siguiente estructura:
{ "version" : "2017-02-28", "operation" : "GetItem", "key" : { "foo" : ... typed value, "bar" : ... typed value }, "consistentRead" : true, "projection" : { ... } }
Los campos se definen de la siguiente manera:
Campos GetItem
-
version
-
La versión de la definición de plantilla
2017-02-28
y2018-05-29
se admiten actualmente. Este valor es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
GetItem
, este valor se debe establecer enGetItem
. Este valor es obligatorio. -
key
-
La clave del elemento de DynamoDB. 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). Este valor es obligatorio.
-
consistentRead
-
Indica si se realizará o no una lectura lectura altamente coherente con DynamoDB. Este valor es opcional y de forma predeterminada es
false
. 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.
El elemento que se devuelve desde DynamoDB se convierte automáticamente a tipos primitivos de GraphQL y JSON, y se encuentra disponible en el contexto del mapeo ($context.result
).
Para obtener más información sobre la conversión de tipos de DynamoDB, consulte la sección Sistema de tipos (mapeo de respuestas).
Para obtener más información acerca de las plantillas de mapeo de respuesta, consulte Información general sobre las plantillas de mapeo de solucionador.
Ejemplo
A continuación se muestra una plantilla de mapeo de una consulta de GraphQL getThing(foo: String!, bar: String!)
:
{ "version" : "2017-02-28", "operation" : "GetItem", "key" : { "foo" : $util.dynamodb.toDynamoDBJson($ctx.args.foo), "bar" : $util.dynamodb.toDynamoDBJson($ctx.args.bar) }, "consistentRead" : true }
Para obtener más información sobre la API GetItem
de DynamoDB, consulte la documentación de la API de DynamoDB.
PutItem
El documento de mapeo de solicitudes de PutItem
le permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud PutItem
a DynamoDB, así como especificar lo siguiente:
-
La clave del elemento de DynamoDB.
-
El contenido completo del elemento (compuesto de
key
yattributeValues
). -
Condiciones para que la operación se lleve a cabo correctamente.
El documento de mapeo de PutItem
tiene la siguiente estructura:
{ "version" : "2018-05-29", "operation" : "PutItem", "customPartitionKey" : "foo", "populateIndexFields" : boolean value, "key": { "foo" : ... typed value, "bar" : ... typed value }, "attributeValues" : { "baz" : ... typed value }, "condition" : { ... }, "_version" : 1 }
Los campos se definen de la siguiente manera:
Campos PutItem
-
version
-
La versión de la definición de plantilla
2017-02-28
y2018-05-29
se admiten actualmente. Este valor es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
PutItem
, este valor se debe establecer enPutItem
. Este valor es obligatorio. -
key
-
La clave del elemento de DynamoDB. 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). Este valor es obligatorio.
-
attributeValues
-
El resto de los atributos del elemento que debe colocarse en DynamoDB. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este campo es opcional.
-
condition
-
Una condición para determinar si la solicitud debe realizarse correctamente o no, en función del estado del objeto ya incluido en DynamoDB. Si no se especifica ninguna condición, la solicitud
PutItem
sobrescribe todas las entradas existentes para dicho elemento. Para obtener más información sobre las condiciones, consulte Expresiones de condición. Este valor es opcional. -
_version
-
Valor numérico que representa la última versión conocida de un elemento. Este valor es opcional. Este campo se utiliza para detectar conflictos y solo se admite en orígenes de datos con control de versiones.
customPartitionKey
-
Cuando se habilita, este valor de cadena modifica el formato de los registros
ds_sk
yds_pk
que utiliza la tabla Delta Sync una vez habilitado el control de versiones (para obtener más información, consulte el artículo sobre detección de conflictos y sincronización en la Guía para desarrolladores de AWS AppSync). Cuando se habilita, también lo hace el procesamiento de la entradapopulateIndexFields
. Este campo es opcional. populateIndexFields
-
Valor booleano que, cuando se habilita junto con la
customPartitionKey
, crea nuevas entradas para cada registro de la tabla Delta Sync, específicamente en las columnasgsi_ds_pk
ygsi_ds_sk
. Para obtener más información, consulte el artículo sobre detección de conflictos y sincronización en la Guía para desarrolladores de AWS AppSync. Este campo es opcional.
El elemento que se escribe en DynamoDB se convierte automáticamente a los tipos primitivos de GraphQL y JSON, y está disponible en el contexto de mapeo ($context.result
).
Para obtener más información sobre la conversión de tipos de DynamoDB, consulte la sección Sistema de tipos (mapeo de respuestas).
Para obtener más información acerca de las plantillas de mapeo de respuesta, consulte Información general sobre las plantillas de mapeo de solucionador.
Ejemplo 1
El siguiente ejemplo muestra una plantilla de mapeo de una mutación de GraphQL updateThing(foo: String!,
bar: String!, name: String!, version: Int!)
.
Si no existe ningún elemento con la clave especificada, dicho elemento se crea. Si ya existe un elemento con la clave especificada, dicho elemento se sobrescribe.
{ "version" : "2017-02-28", "operation" : "PutItem", "key": { "foo" : $util.dynamodb.toDynamoDBJson($ctx.args.foo), "bar" : $util.dynamodb.toDynamoDBJson($ctx.args.bar) }, "attributeValues" : { "name" : $util.dynamodb.toDynamoDBJson($ctx.args.name), "version" : $util.dynamodb.toDynamoDBJson($ctx.args.version) } }
Ejemplo 2
El siguiente ejemplo muestra una plantilla de mapeo de una mutación de GraphQL updateThing(foo: String!, bar: String!, name: String!,
expectedVersion: Int!)
.
En este ejemplo se comprueba que el elemento que actualmente se encuentra en DynamoDB tenga en el campo version
definido con el valor expectedVersion
.
{ "version" : "2017-02-28", "operation" : "PutItem", "key": { "foo" : $util.dynamodb.toDynamoDBJson($ctx.args.foo), "bar" : $util.dynamodb.toDynamoDBJson($ctx.args.bar) }, "attributeValues" : { "name" : $util.dynamodb.toDynamoDBJson($ctx.args.name), #set( $newVersion = $context.arguments.expectedVersion + 1 ) "version" : $util.dynamodb.toDynamoDBJson($newVersion) }, "condition" : { "expression" : "version = :expectedVersion", "expressionValues" : { ":expectedVersion" : $util.dynamodb.toDynamoDBJson($expectedVersion) } } }
Para obtener más información sobre la API PutItem
de DynamoDB, consulte la documentación de la API de DynamoDB.
UpdateItem
El documento de mapeo de solicitudes de UpdateItem
le permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud UpdateItem
a DynamoDB, así como especificar lo siguiente:
-
La clave del elemento de DynamoDB.
-
Una expresión de actualización que describe cómo se actualiza el elemento de DynamoDB.
-
Condiciones para que la operación se lleve a cabo correctamente.
El documento de mapeo de UpdateItem
tiene la siguiente estructura:
{ "version" : "2018-05-29", "operation" : "UpdateItem", "customPartitionKey" : "foo", "populateIndexFields" : boolean value, "key": { "foo" : ... typed value, "bar" : ... typed value }, "update" : { "expression" : "someExpression", "expressionNames" : { "#foo" : "foo" }, "expressionValues" : { ":bar" : ... typed value } }, "condition" : { ... }, "_version" : 1 }
Los campos se definen de la siguiente manera:
Campos UpdateItem
-
version
-
La versión de la definición de plantilla
2017-02-28
y2018-05-29
se admiten actualmente. Este valor es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
UpdateItem
, este valor se debe establecer enUpdateItem
. Este valor es obligatorio. -
key
-
La clave del elemento de DynamoDB. 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). Este valor es obligatorio.
-
update
-
La sección
update
permite especificar una expresión de actualización que describe cómo se actualiza el elemento en DynamoDB. Para obtener más información sobre el modo de escribir expresiones de actualización, consulte la documentación de DynamoDB UpdateExpressions. Esta sección es obligatoria.La sección
update
tiene tres componentes:-
expression
-
La expresión de actualización. Este valor es obligatorio.
-
expressionNames
-
Las sustituciones de los marcadores de posición de nombre de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de nombre usado en la
expression
y el valor tiene que ser una cadena que corresponda al nombre de atributo del elemento en DynamoDB. Este campo es opcional y solo debe rellenarse con las sustituciones de marcadores de posición de nombre de atributo de expresión que se usen en laexpression
. -
expressionValues
-
Las sustituciones de los marcadores de posición de valor de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de valor usado en la
expression
y el valor tiene que ser un valor con tipo. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor debe especificarse. Este campo es opcional y solo debe rellenarse con las sustituciones de los marcadores de posición de valor de atributo de expresión que se usen en laexpression
.
-
-
condition
-
Una condición para determinar si la solicitud debe realizarse correctamente o no, en función del estado del objeto ya incluido en DynamoDB. Si no se especifica ninguna condición, la solicitud
UpdateItem
actualiza todas las entradas existentes independientemente de su estado actual. Para obtener más información sobre las condiciones, consulte Expresiones de condición. Este valor es opcional. -
_version
-
Valor numérico que representa la última versión conocida de un elemento. Este valor es opcional. Este campo se utiliza para detectar conflictos y solo se admite en orígenes de datos con control de versiones.
customPartitionKey
-
Cuando se habilita, este valor de cadena modifica el formato de los registros
ds_sk
yds_pk
que utiliza la tabla Delta Sync una vez habilitado el control de versiones (para obtener más información, consulte el artículo sobre detección de conflictos y sincronización en la Guía para desarrolladores de AWS AppSync). Cuando se habilita, también lo hace el procesamiento de la entradapopulateIndexFields
. Este campo es opcional. populateIndexFields
-
Valor booleano que, cuando se habilita junto con la
customPartitionKey
, crea nuevas entradas para cada registro de la tabla Delta Sync, específicamente en las columnasgsi_ds_pk
ygsi_ds_sk
. Para obtener más información, consulte el artículo sobre detección de conflictos y sincronización en la Guía para desarrolladores de AWS AppSync. Este campo es opcional.
El elemento que se actualiza en DynamoDB se convierte automáticamente a los tipos primitivos de GraphQL y JSON, y está disponible en el contexto de mapeo ($context.result
).
Para obtener más información sobre la conversión de tipos de DynamoDB, consulte la sección Sistema de tipos (mapeo de respuestas).
Para obtener más información acerca de las plantillas de mapeo de respuesta, consulte Información general sobre las plantillas de mapeo de solucionador.
Ejemplo 1
El siguiente ejemplo muestra una plantilla de mapeo de la mutación de GraphQL upvote(id: ID!)
.
En este ejemplo, se han incrementado en 1 los campos upvotes
y version
de un elemento de DynamoDB.
{ "version" : "2017-02-28", "operation" : "UpdateItem", "key" : { "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id) }, "update" : { "expression" : "ADD #votefield :plusOne, version :plusOne", "expressionNames" : { "#votefield" : "upvotes" }, "expressionValues" : { ":plusOne" : { "N" : 1 } } } }
Ejemplo 2
El siguiente ejemplo muestra una plantilla de mapeo de una mutación de GraphQL updateItem(id: ID!, title: String, author: String, expectedVersion:
Int!)
.
Se trata de un ejemplo complejo que inspecciona los argumentos y genera de manera dinámica la expresión de actualización que solo incluye los argumentos que ha proporcionado el cliente. Por ejemplo, si se omiten title
y author
, no se actualizan. Si se especifica un argumento pero su valor es null
, ese campo se elimina del objeto en DynamoDB. Por último, la operación tiene una condición que comprueba si el elemento que está actualmente en DynamoDB tiene el campo version
establecido en expectedVersion
:
{ "version" : "2017-02-28", "operation" : "UpdateItem", "key" : { "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id) }, ## Set up some space to keep track of things we're updating ** #set( $expNames = {} ) #set( $expValues = {} ) #set( $expSet = {} ) #set( $expAdd = {} ) #set( $expRemove = [] ) ## Increment "version" by 1 ** $!{expAdd.put("version", ":newVersion")} $!{expValues.put(":newVersion", { "N" : 1 })} ## Iterate through each argument, skipping "id" and "expectedVersion" ** #foreach( $entry in $context.arguments.entrySet() ) #if( $entry.key != "id" && $entry.key != "expectedVersion" ) #if( (!$entry.value) && ("$!{entry.value}" == "") ) ## If the argument is set to "null", then remove that attribute from the item in DynamoDB ** #set( $discard = ${expRemove.add("#${entry.key}")} ) $!{expNames.put("#${entry.key}", "$entry.key")} #else ## Otherwise set (or update) the attribute on the item in DynamoDB ** $!{expSet.put("#${entry.key}", ":${entry.key}")} $!{expNames.put("#${entry.key}", "$entry.key")} #if( $entry.key == "ups" || $entry.key == "downs" ) $!{expValues.put(":${entry.key}", { "N" : $entry.value })} #else $!{expValues.put(":${entry.key}", { "S" : "${entry.value}" })} #end #end #end #end ## Start building the update expression, starting with attributes we're going to SET ** #set( $expression = "" ) #if( !${expSet.isEmpty()} ) #set( $expression = "SET" ) #foreach( $entry in $expSet.entrySet() ) #set( $expression = "${expression} ${entry.key} = ${entry.value}" ) #if ( $foreach.hasNext ) #set( $expression = "${expression}," ) #end #end #end ## Continue building the update expression, adding attributes we're going to ADD ** #if( !${expAdd.isEmpty()} ) #set( $expression = "${expression} ADD" ) #foreach( $entry in $expAdd.entrySet() ) #set( $expression = "${expression} ${entry.key} ${entry.value}" ) #if ( $foreach.hasNext ) #set( $expression = "${expression}," ) #end #end #end ## Continue building the update expression, adding attributes we're going to REMOVE ** #if( !${expRemove.isEmpty()} ) #set( $expression = "${expression} REMOVE" ) #foreach( $entry in $expRemove ) #set( $expression = "${expression} ${entry}" ) #if ( $foreach.hasNext ) #set( $expression = "${expression}," ) #end #end #end ## Finally, write the update expression into the document, along with any expressionNames and expressionValues ** "update" : { "expression" : "${expression}" #if( !${expNames.isEmpty()} ) ,"expressionNames" : $utils.toJson($expNames) #end #if( !${expValues.isEmpty()} ) ,"expressionValues" : $utils.toJson($expValues) #end }, "condition" : { "expression" : "version = :expectedVersion", "expressionValues" : { ":expectedVersion" : $util.dynamodb.toDynamoDBJson($ctx.args.expectedVersion) } } }
Para obtener más información sobre la API UpdateItem
de DynamoDB, consulte la documentación de la API de DynamoDB.
DeleteItem
El documento de mapeo de solicitudes de DeleteItem
le permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud DeleteItem
a DynamoDB, así como especificar lo siguiente:
-
La clave del elemento de DynamoDB.
-
Condiciones para que la operación se lleve a cabo correctamente.
El documento de mapeo de DeleteItem
tiene la siguiente estructura:
{ "version" : "2018-05-29", "operation" : "DeleteItem", "customPartitionKey" : "foo", "populateIndexFields" : boolean value, "key": { "foo" : ... typed value, "bar" : ... typed value }, "condition" : { ... }, "_version" : 1 }
Los campos se definen de la siguiente manera:
Campos DeleteItem
-
version
-
La versión de la definición de plantilla
2017-02-28
y2018-05-29
se admiten actualmente. Este valor es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
DeleteItem
, este valor se debe establecer enDeleteItem
. Este valor es obligatorio. -
key
-
La clave del elemento de DynamoDB. 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). Este valor es obligatorio.
-
condition
-
Una condición para determinar si la solicitud debe realizarse correctamente o no, en función del estado del objeto ya incluido en DynamoDB. Si no se especifica ninguna condición, la solicitud
DeleteItem
elimina un elemento independientemente de su estado actual. Para obtener más información sobre las condiciones, consulte Expresiones de condición. Este valor es opcional. -
_version
-
Valor numérico que representa la última versión conocida de un elemento. Este valor es opcional. Este campo se utiliza para detectar conflictos y solo se admite en orígenes de datos con control de versiones.
customPartitionKey
-
Cuando se habilita, este valor de cadena modifica el formato de los registros
ds_sk
yds_pk
que utiliza la tabla Delta Sync una vez habilitado el control de versiones (para obtener más información, consulte el artículo sobre detección de conflictos y sincronización en la Guía para desarrolladores de AWS AppSync). Cuando se habilita, también lo hace el procesamiento de la entradapopulateIndexFields
. Este campo es opcional. populateIndexFields
-
Valor booleano que, cuando se habilita junto con la
customPartitionKey
, crea nuevas entradas para cada registro de la tabla Delta Sync, específicamente en las columnasgsi_ds_pk
ygsi_ds_sk
. Para obtener más información, consulte el artículo sobre detección de conflictos y sincronización en la Guía para desarrolladores de AWS AppSync. Este campo es opcional.
El elemento que se elimina de DynamoDB se convierte automáticamente a los tipos primitivos de GraphQL y JSON, y está disponible en el contexto de mapeo ($context.result
).
Para obtener más información sobre la conversión de tipos de DynamoDB, consulte la sección Sistema de tipos (mapeo de respuestas).
Para obtener más información acerca de las plantillas de mapeo de respuesta, consulte Información general sobre las plantillas de mapeo de solucionador.
Ejemplo 1
El siguiente ejemplo muestra una plantilla de mapeo de una mutación de GraphQL deleteItem(id: ID!)
. Si ya existe un elemento con este ID, se eliminará.
{ "version" : "2017-02-28", "operation" : "DeleteItem", "key" : { "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id) } }
Ejemplo 2
El siguiente ejemplo muestra una plantilla de mapeo de una mutación de GraphQL deleteItem(id: ID!, expectedVersion: Int!)
. Si ya existe un elemento con este ID, se eliminará, pero solo si su campo version
está establecido en expectedVersion
:
{ "version" : "2017-02-28", "operation" : "DeleteItem", "key" : { "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id) }, "condition" : { "expression" : "attribute_not_exists(id) OR version = :expectedVersion", "expressionValues" : { ":expectedVersion" : $util.dynamodb.toDynamoDBJson($expectedVersion) } } }
Para obtener más información sobre la API DeleteItem
de DynamoDB, consulte la documentación de la API de DynamoDB.
Consulta
El documento de mapeo de solicitudes de Query
le permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud Query
a DynamoDB, así como especificar lo siguiente:
-
Expresión de clave.
-
Qué índice utilizar.
-
Todos los filtros adicionales.
-
Cuántos elementos deben devolverse.
-
Si se utilizarán lecturas coherentes.
-
Dirección de consulta (hacia delante o hacia atrás).
-
Token de paginación
El documento de mapeo de Query
tiene la siguiente estructura:
{ "version" : "2017-02-28", "operation" : "Query", "query" : { "expression" : "some expression", "expressionNames" : { "#foo" : "foo" }, "expressionValues" : { ":bar" : ... typed value } }, "index" : "fooIndex", "nextToken" : "a pagination token", "limit" : 10, "scanIndexForward" : true, "consistentRead" : false, "select" : "ALL_ATTRIBUTES" | "ALL_PROJECTED_ATTRIBUTES" | "SPECIFIC_ATTRIBUTES", "filter" : { ... }, "projection" : { ... } }
Los campos se definen de la siguiente manera:
Campos de consulta
-
version
-
La versión de la definición de plantilla
2017-02-28
y2018-05-29
se admiten actualmente. Este valor es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
Query
, este valor se debe establecer enQuery
. Este valor es obligatorio. -
query
-
La sección
query
permite especificar una expresión de condición de clave que describe qué elementos deben recuperarse de DynamoDB. Para obtener más información sobre cómo escribir expresiones de condición de clave, consulte DynamoDB KeyConditions documentation. Esta sección debe especificarse.-
expression
-
La expresión de la consulta. Este campo debe especificarse.
-
expressionNames
-
Las sustituciones de los marcadores de posición de nombre de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de nombre usado en la
expression
y el valor tiene que ser una cadena que corresponda al nombre de atributo del elemento en DynamoDB. Este campo es opcional y solo debe rellenarse con las sustituciones de marcadores de posición de nombre de atributo de expresión que se usen en laexpression
. -
expressionValues
-
Las sustituciones de los marcadores de posición de valor de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de valor usado en la
expression
y el valor tiene que ser un valor con tipo. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor es obligatorio. Este campo es opcional y solo debe rellenarse con las sustituciones de los marcadores de posición de valor de atributo de expresión que se usen en laexpression
.
-
-
filter
-
Un filtro adicional que se puede utilizar para filtrar los resultados de DynamoDB antes de que se devuelvan. Para obtener más información acerca de los filtros, consulte Filtros. Este campo es opcional.
-
index
-
El nombre del índice que se consultará. La operación de consulta de DynamoDB permite escanear en índices secundarios locales y globales, además de hacerlo en el índice de clave principal de una clave hash. Si se especifica, indica a DynamoDB que debe consultar el índice especificado. Si se omite, se consultará el índice de clave principal.
-
nextToken
-
El token de paginación para continuar una consulta anterior. Se debe obtener de una consulta anterior. Este campo es opcional.
-
limit
-
Número máximo de elementos que se van a evaluar, que no es necesariamente el número de elementos coincidentes. Este campo es opcional.
-
scanIndexForward
-
Valor booleano que indica si se debe consultar hacia delante o hacia atrás. Este campo es opcional y de forma predeterminada es
true
. -
consistentRead
-
Valor booleano que indica si se utilizarán lecturas coherentes al consultar DynamoDB. Este campo es opcional y de forma predeterminada es
false
. -
select
-
De forma predeterminada, el solucionador de DynamoDB de AWS AppSync solo devuelve los atributos que se proyectan en el índice. Si se necesitan más atributos, puede configurar este campo. Este campo es opcional. Los valores admitidos son:
-
ALL_ATTRIBUTES
-
Devuelve todos los atributos de elementos de la tabla o el índice especificados. Si consulta un índice secundario local, DynamoDB recupera todo el elemento de la tabla principal para cada elemento coincidente en el índice. Si el índice está configurado para proyectar todos los atributos de los elementos, todos los datos se pueden obtener del índice secundario local y no es necesario efectuar una recuperación.
-
ALL_PROJECTED_ATTRIBUTES
-
Permitido solo al consultar un índice. Recupera todos los atributos que se han proyectado en el índice. Si el índice está configurado para proyectar todos los atributos, este valor de retorno equivale a especificar
ALL_ATTRIBUTES
. SPECIFIC_ATTRIBUTES
-
Devuelve solo los atributos que aparecen en la
expression
de laprojection
. Este valor devuelto equivale a especificar laexpression
de laprojection
sin especificar ningún valor paraSelect
.
-
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.
Los resultados de DynamoDB se convierten automáticamente a los tipos primitivos de GraphQL y JSON, y están disponibles en el contexto de mapeo ($context.result
).
Para obtener más información sobre la conversión de tipos de DynamoDB, consulte la sección Sistema de tipos (mapeo de respuestas).
Para obtener más información acerca de las plantillas de mapeo de respuesta, consulte Información general sobre las plantillas de mapeo de solucionador.
Los resultados tienen la estructura siguiente:
{ items = [ ... ], nextToken = "a pagination token", scannedCount = 10 }
Los campos se definen de la siguiente manera:
-
items
-
Una lista que contiene los elementos que devuelve la consulta de DynamoDB.
-
nextToken
-
Si hubiera más resultados,
nextToken
contiene un token de paginación que puede usar en otra solicitud. Observe que AWS AppSync cifra y oculta el token de paginación devuelto de DynamoDB. Esto evita que los datos de las tablas se filtren accidentalmente al intermediario. Además, tenga en cuenta que estos tokens de paginación no se pueden utilizar en diferentes solucionadores. -
scannedCount
-
El número de elementos que coincidían con la expresión de condición de consulta antes de aplicar una expresión de filtro (si la hay).
Ejemplo
El siguiente ejemplo muestra una plantilla de mapeo de una consulta de GraphQL getPosts(owner: ID!)
.
En este ejemplo, se consulta un índice secundario global en una tabla para que devuelva todas las publicaciones que pertenecen al ID especificado.
{ "version" : "2017-02-28", "operation" : "Query", "query" : { "expression" : "ownerId = :ownerId", "expressionValues" : { ":ownerId" : $util.dynamodb.toDynamoDBJson($context.arguments.owner) } }, "index" : "owner-index" }
Para obtener más información sobre la API Query
de DynamoDB, consulte la documentación de la API de DynamoDB.
Examen
El documento de mapeo de solicitudes de Scan
le permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud Scan
a DynamoDB, así como especificar lo siguiente:
-
Un filtro para excluir resultados
-
Qué índice utilizar.
-
Cuántos elementos deben devolverse.
-
Si se utilizarán lecturas coherentes.
-
Token de paginación
-
Exámenes en paralelo
El documento de mapeo de Scan
tiene la siguiente estructura:
{ "version" : "2017-02-28", "operation" : "Scan", "index" : "fooIndex", "limit" : 10, "consistentRead" : false, "nextToken" : "aPaginationToken", "totalSegments" : 10, "segment" : 1, "filter" : { ... }, "projection" : { ... } }
Los campos se definen de la siguiente manera:
Campos de Scan
-
version
-
La versión de la definición de plantilla
2017-02-28
y2018-05-29
se admiten actualmente. Este valor es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
Scan
, este valor se debe establecer enScan
. Este valor es obligatorio. -
filter
-
Un filtro que se puede utilizar para filtrar los resultados de DynamoDB antes de que se devuelvan. Para obtener más información acerca de los filtros, consulte Filtros. Este campo es opcional.
-
index
-
El nombre del índice que se consultará. La operación de consulta de DynamoDB permite escanear en índices secundarios locales y globales, además de hacerlo en el índice de clave principal de una clave hash. Si se especifica, indica a DynamoDB que debe consultar el índice especificado. Si se omite, se consultará el índice de clave principal.
-
limit
-
El número máximo de elementos que se evalúan en una sola vez. Este campo es opcional.
-
consistentRead
-
Valor booleano que indica si se utilizarán lecturas coherentes al consultar DynamoDB. Este campo es opcional y de forma predeterminada es
false
. -
nextToken
-
El token de paginación para continuar una consulta anterior. Se debe obtener de una consulta anterior. Este campo es opcional.
-
select
-
De forma predeterminada, el solucionador de DynamoDB de AWS AppSync solo devuelve los atributos que se proyecten en el índice. Si se necesitan más atributos, este campo se puede configurar. Este campo es opcional. Los valores admitidos son:
-
ALL_ATTRIBUTES
-
Devuelve todos los atributos de elementos de la tabla o el índice especificados. Si consulta un índice secundario local, DynamoDB recupera todo el elemento de la tabla principal para cada elemento coincidente en el índice. Si el índice está configurado para proyectar todos los atributos de los elementos, todos los datos se pueden obtener del índice secundario local y no es necesario efectuar una recuperación.
-
ALL_PROJECTED_ATTRIBUTES
-
Permitido solo al consultar un índice. Recupera todos los atributos que se han proyectado en el índice. Si el índice está configurado para proyectar todos los atributos, este valor de retorno equivale a especificar
ALL_ATTRIBUTES
. SPECIFIC_ATTRIBUTES
-
Devuelve solo los atributos que aparecen en la
expression
de laprojection
. Este valor devuelto equivale a especificar laexpression
de laprojection
sin especificar ningún valor paraSelect
.
-
-
totalSegments
-
El número de segmentos para dividir en particiones la tabla al realizar un examen paralelo. Este campo es opcional, pero debe especificarse si se indica
segment
. -
segment
-
El segmento de tabla de esta operación al realizar un examen en paralelo. Este campo es opcional, pero debe especificarse si se indica
totalSegments
. 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.
Los resultados que devuelve el análisis de DynamoDB se convierten automáticamente a los tipos primitivos de GraphQL y JSON, y están disponibles en el contexto de mapeo ($context.result
).
Para obtener más información sobre la conversión de tipos de DynamoDB, consulte la sección Sistema de tipos (mapeo de respuestas).
Para obtener más información acerca de las plantillas de mapeo de respuesta, consulte Información general sobre las plantillas de mapeo de solucionador.
Los resultados tienen la estructura siguiente:
{ items = [ ... ], nextToken = "a pagination token", scannedCount = 10 }
Los campos se definen de la siguiente manera:
-
items
-
Una lista que contiene los elementos que devuelve el análisis de DynamoDB.
-
nextToken
-
Si hubiera más resultados,
nextToken
contiene un token de paginación que puede usar en otra solicitud. AWS AppSync cifra y oculta el token de paginación devuelto de DynamoDB. Esto evita que los datos de las tablas se filtren accidentalmente al intermediario. Además, estos tokens de paginación no se pueden utilizar en diferentes solucionadores. -
scannedCount
-
El número de elementos que DynamoDB ha recuperado antes de aplicar una expresión de filtro (en caso de incluirse).
Ejemplo 1
El siguiente ejemplo muestra una plantilla de mapeo de una consulta de GraphQL: allPosts
.
En este ejemplo, se devuelven todas las entradas de la tabla.
{ "version" : "2017-02-28", "operation" : "Scan" }
Ejemplo 2
El siguiente ejemplo muestra una plantilla de mapeo de una consulta de GraphQL: postsMatching(title: String!)
.
En este ejemplo, todas las entradas de la tabla se devuelven donde el título comienza con el argumento title
.
{ "version" : "2017-02-28", "operation" : "Scan", "filter" : { "expression" : "begins_with(title, :title)", "expressionValues" : { ":title" : $util.dynamodb.toDynamoDBJson($context.arguments.title) }, } }
Para obtener más información sobre la API Scan
de DynamoDB, consulte la documentación de la API de DynamoDB.
Sync (Sincronizar)
El documento de mapeo de solicitudes de Sync
permite recuperar todos los resultados de una tabla de DynamoDB y, a continuación, recibir tan solo los datos alterados desde la última consulta (las actualizaciones delta). Únicamente se pueden realizar solicitudes Sync
a orígenes de datos con control de versiones de DynamoDB. Puede especificar lo siguiente:
-
Un filtro para excluir resultados
-
Cuántos elementos deben devolverse.
-
Token de paginación
-
Cuando se inició la última operación
Sync
El documento de mapeo de Sync
tiene la siguiente estructura:
{ "version" : "2018-05-29", "operation" : "Sync", "basePartitionKey": "Base Tables PartitionKey", "deltaIndexName": "delta-index-name", "limit" : 10, "nextToken" : "aPaginationToken", "lastSync" : 1550000000000, "filter" : { ... } }
Los campos se definen de la siguiente manera:
Campos de Sync
-
version
-
La versión de la definición de plantilla. Solo se admite
2018-05-29
actualmente. Este valor es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación
Sync
de , en este valor debe establecerseSync
. Este valor es obligatorio. -
filter
-
Un filtro que se puede utilizar para filtrar los resultados de DynamoDB antes de que se devuelvan. Para obtener más información acerca de los filtros, consulte Filtros. Este campo es opcional.
-
limit
-
El número máximo de elementos que se evalúan en una sola vez. Este campo es opcional. Si se omite, el límite predeterminado se establecerá en
100
elementos. El valor máximo de este campo son1000
elementos. -
nextToken
-
El token de paginación para continuar una consulta anterior. Se debe obtener de una consulta anterior. Este campo es opcional.
-
lastSync
-
El momento, en milisegundos transcurridos desde la fecha de inicio, en el que comenzó la última operación
Sync
que se ha realizado correctamente. Si se especifica, solo se devuelven los elementos que han cambiado después delastSync
. Este campo es opcional y solo debe rellenarse después de haber recuperado todas las páginas de una operaciónSync
inicial. Si se omite, se devolverán los resultados de la tabla Base; de lo contrario, se devolverán los resultados de la tabla Delta. basePartitionKey
-
Clave de partición de la tabla Base utilizada al realizar una operación
Sync
. Este campo permite realizar una operaciónSync
cuando la tabla utiliza una clave de partición personalizada. Se trata de un campo opcional. deltaIndexName
-
Índice utilizado para la operación
Sync
. Este índice es necesario para habilitar una operaciónSync
en toda la tabla de almacenamiento Delta cuando la tabla utiliza una clave de partición personalizada. La operaciónSync
se realizará en el GSI (creado engsi_ds_pk
ygsi_ds_sk
). Este campo es opcional.
Los resultados que devuelve la sincronización de DynamoDB se convierten automáticamente a los tipos primitivos de GraphQL y JSON, y están disponibles en el contexto de mapeo ($context.result
).
Para obtener más información sobre la conversión de tipos de DynamoDB, consulte la sección Sistema de tipos (mapeo de respuestas).
Para obtener más información acerca de las plantillas de mapeo de respuesta, consulte Información general sobre las plantillas de mapeo de solucionador.
Los resultados tienen la estructura siguiente:
{ items = [ ... ], nextToken = "a pagination token", scannedCount = 10, startedAt = 1550000000000 }
Los campos se definen de la siguiente manera:
-
items
-
Una lista que contiene los elementos que devuelve la sincronización.
-
nextToken
-
Si hubiera más resultados,
nextToken
contiene un token de paginación que puede usar en otra solicitud. AWS AppSync cifra y oculta el token de paginación devuelto de DynamoDB. Esto evita que los datos de las tablas se filtren accidentalmente al intermediario. Además, estos tokens de paginación no se pueden utilizar en diferentes solucionadores. -
scannedCount
-
El número de elementos que DynamoDB ha recuperado antes de aplicar una expresión de filtro (en caso de incluirse).
-
startedAt
-
El momento, en milisegundos transcurridos desde la fecha de inicio, en el que comenzó la operación de sincronización que puede almacenar localmente y usar en otra solicitud como argumento de
lastSync
. Si se incluyó un token de paginación en la solicitud, este valor será el mismo que el devuelto por la solicitud para la primera página de resultados.
Ejemplo 1
El siguiente ejemplo muestra una plantilla de mapeo de una consulta de GraphQL: syncPosts(nextToken: String, lastSync: AWSTimestamp)
.
En este ejemplo, si se omite lastSync
, se devuelven todas las entradas de la tabla base. Si se proporciona lastSync
, solo se devuelven las entradas de la tabla Delta Sync que han cambiado desde lastSync
.
{ "version" : "2018-05-29", "operation" : "Sync", "limit": 100, "nextToken": $util.toJson($util.defaultIfNull($ctx.args.nextToken, null)), "lastSync": $util.toJson($util.defaultIfNull($ctx.args.lastSync, null)) }
BatchGetItem
El documento de mapeo de solicitudes de BatchGetItem
permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud BatchGetItem
a DynamoDB para recuperar varios elementos, posiblemente de varias tablas. Para esta plantilla de solicitud, debe especificar lo siguiente:
-
Los nombres de tabla de los que recuperar los elementos
-
Las claves de los elementos que recuperar de cada tabla
Se aplican los límites de BatchGetItem
de DynamoDB y no puede proporcionar ninguna expresión de condición.
El documento de mapeo de BatchGetItem
tiene la siguiente estructura:
{ "version" : "2018-05-29", "operation" : "BatchGetItem", "tables" : { "table1": { "keys": [ ## Item to retrieve Key { "foo" : ... typed value, "bar" : ... typed value }, ## Item2 to retrieve Key { "foo" : ... typed value, "bar" : ... typed value } ], "consistentRead": true|false, "projection" : { ... } }, "table2": { "keys": [ ## Item3 to retrieve Key { "foo" : ... typed value, "bar" : ... typed value }, ## Item4 to retrieve Key { "foo" : ... typed value, "bar" : ... typed value } ], "consistentRead": true|false, "projection" : { ... } } } }
Los campos se definen de la siguiente manera:
Campos BatchGetItem
-
version
-
La versión de la definición de plantilla. Solo se admite
2018-05-29
. Este valor es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
BatchGetItem
, este valor se debe establecer enBatchGetItem
. Este valor es obligatorio. -
tables
-
Las tablas de DynamoDB de las que recuperar los elementos. El valor es un mapa en el que se especifican los nombres de las tablas como claves del mapa. Al menos debe proporcionarse una tabla. Este valor
tables
es obligatorio.-
keys
-
Lista de claves de DynamoDB que representan la clave principal de los elementos que se van a 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).
-
consistentRead
-
Si se utiliza una lectura consistente a la hora de ejecutar una operación GetItem. Este valor es opcional y de forma predeterminada es falso.
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 un elemento no se ha recuperado de la tabla, aparece un elemento nulo en el bloque de datos para esa tabla.
-
Los resultados de invocación se ordenan por tabla, según el orden en el que se hayan proporcionado dentro de la plantilla de mapeo de solicitud.
-
Cada comando
Get
dentro de unBatchGetItem
es atómico; sin embargo, un lote se puede procesar parcialmente. Si un lote se procesa parcialmente debido a un error, la claves sin procesar se devuelven como parte del resultado de invocación dentro del bloque unprocessedKeys. -
BatchGetItem
está limitado a 100 claves.
Para la siguiente plantilla de mapeo de solicitud de ejemplo:
{ "version": "2018-05-29", "operation": "BatchGetItem", "tables": { "authors": [ { "author_id": { "S": "a1" } }, ], "posts": [ { "author_id": { "S": "a1" }, "post_id": { "S": "p2" } } ], } }
El resultado de invocación disponible en $ctx.result
es el siguiente:
{ "data": { "authors": [null], "posts": [ # Was retrieved { "author_id": "a1", "post_id": "p2", "post_title": "title", "post_description": "description", } ] }, "unprocessedKeys": { "authors": [ # This item was not processed due to an error { "author_id": "a1" } ], "posts": [] } }
El $ctx.error
contiene detalles acerca del error. Está garantizado que los datos de claves, unprocessedKeys y cada clave de tabla que se le proporcionó en la plantilla de mapeo de solicitud estarán presentes en el resultado de invocación. Los elementos que se han eliminado aparecen en el bloque de datos. Los elementos que no se hayan procesado se marcan como null dentro del bloque de datos y se colocan dentro del bloque unprocessedKeys.
Para obtener un ejemplo más completo, siga el tutorial de lotes de DynamoDB con AppSync aquí Tutorial: Solucionadores por lotes de DynamoDB.
BatchDeleteItem
El documento de mapeo de solicitudes de BatchDeleteItem
permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud BatchWriteItem
a DynamoDB para eliminar varios elementos, posiblemente en varias tablas. Para esta plantilla de solicitud, debe especificar lo siguiente:
-
Los nombres de tabla de los que eliminar los elementos
-
Las claves de los elementos que eliminar de cada tabla
Se aplican los límites de BatchWriteItem
de DynamoDB y no puede proporcionar ninguna expresión de condición.
El documento de mapeo de BatchDeleteItem
tiene la siguiente estructura:
{ "version" : "2018-05-29", "operation" : "BatchDeleteItem", "tables" : { "table1": [ ## Item to delete Key { "foo" : ... typed value, "bar" : ... typed value }, ## Item2 to delete Key { "foo" : ... typed value, "bar" : ... typed value }], "table2": [ ## Item3 to delete Key { "foo" : ... typed value, "bar" : ... typed value }, ## Item4 to delete Key { "foo" : ... typed value, "bar" : ... typed value }], } }
Los campos se definen de la siguiente manera:
Campos BatchDeleteItem
-
version
-
La versión de la definición de plantilla. Solo se admite
2018-05-29
. Este valor es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
BatchDeleteItem
, este valor se debe establecer enBatchDeleteItem
. Este valor es obligatorio. -
tables
-
Las tablas de DynamoDB de las que eliminar los elementos. Cada tabla es una lista de claves de DynamoDB que representan la clave principal de los elementos que se van a eliminar. 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). Al menos debe proporcionarse una tabla. El valor
tables
es obligatorio.
Cosas que tener en cuenta:
-
Al contrario que en la operación
DeleteItem
, el elemento completamente eliminado no se devuelve en la respuesta. Solo se devuelve la clave pasada. -
Si un elemento no se ha eliminado de la tabla, aparece un elemento nulo en el bloque de datos para esa tabla.
-
Los resultados de invocación se ordenan por tabla, según el orden en el que se hayan proporcionado dentro de la plantilla de mapeo de solicitud.
-
Cada comando
Delete
dentro de unBatchDeleteItem
es atómico. Sin embargo, un lote puede procesarse parcialmente. Si un lote se procesa parcialmente debido a un error, la claves sin procesar se devuelven como parte del resultado de invocación dentro del bloque unprocessedKeys. -
BatchDeleteItem
está limitado a 25 claves.
Para la siguiente plantilla de mapeo de solicitud de ejemplo:
{ "version": "2018-05-29", "operation": "BatchDeleteItem", "tables": { "authors": [ { "author_id": { "S": "a1" } }, ], "posts": [ { "author_id": { "S": "a1" }, "post_id": { "S": "p2" } } ], } }
El resultado de invocación disponible en $ctx.result
es el siguiente:
{ "data": { "authors": [null], "posts": [ # Was deleted { "author_id": "a1", "post_id": "p2" } ] }, "unprocessedKeys": { "authors": [ # This key was not processed due to an error { "author_id": "a1" } ], "posts": [] } }
El $ctx.error
contiene detalles acerca del error. Está garantizado que los datos de claves, unprocessedKeys y cada clave de tabla que se le proporcionó en la plantilla de mapeo de solicitud estarán presentes en el resultado de invocación. Los elementos que se han eliminado están presentes en el bloque de datos. Los elementos que no se hayan procesado se marcan como null dentro del bloque de datos y se colocan dentro del bloque unprocessedKeys.
Para obtener un ejemplo más completo, siga el tutorial de lotes de DynamoDB con AppSync aquí Tutorial: Solucionadores por lotes de DynamoDB.
BatchPutItem
El documento de mapeo de solicitudes de BatchPutItem
permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud BatchWriteItem
a DynamoDB para colocar varios elementos, posiblemente en varias tablas. Para esta plantilla de solicitud, debe especificar lo siguiente:
-
Los nombres de tabla en los que poner los elementos
-
Los elementos completos que poner en cada tabla
Se aplican los límites de BatchWriteItem
de DynamoDB y no puede proporcionar ninguna expresión de condición.
El documento de mapeo de BatchPutItem
tiene la siguiente estructura:
{ "version" : "2018-05-29", "operation" : "BatchPutItem", "tables" : { "table1": [ ## Item to put { "foo" : ... typed value, "bar" : ... typed value }, ## Item2 to put { "foo" : ... typed value, "bar" : ... typed value }], "table2": [ ## Item3 to put { "foo" : ... typed value, "bar" : ... typed value }, ## Item4 to put { "foo" : ... typed value, "bar" : ... typed value }], } }
Los campos se definen de la siguiente manera:
Campos BatchPutItem
-
version
-
La versión de la definición de plantilla. Solo se admite
2018-05-29
. Este valor es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
BatchPutItem
, este valor se debe establecer enBatchPutItem
. Este valor es obligatorio. -
tables
-
Las tablas de DynamoDB en las que poner los elementos. Cada entrada de la tabla representa una lista de elementos de DynamoDB que insertar para esta tabla específica. Al menos debe proporcionarse una tabla. Este valor es obligatorio.
Cosas que tener en cuenta:
-
Los elementos totalmente insertados se devuelven en la respuesta, si la operación se realiza correctamente.
-
Si un elemento no se ha insertado en la tabla, aparece un elemento nulo en el bloque de datos para esa tabla.
-
Los elementos insertados se ordenan por tabla, según el orden en el que se hayan proporcionado dentro de la plantilla de mapeo de solicitudes.
-
Cada comando
Put
dentro de unBatchPutItem
es atómico; sin embargo, un lote se puede procesar parcialmente. Si un lote se procesa parcialmente debido a un error, la claves sin procesar se devuelven como parte del resultado de invocación dentro del bloque unprocessedKeys. -
BatchPutItem
está limitado a 25 elementos.
Para la siguiente plantilla de mapeo de solicitud de ejemplo:
{ "version": "2018-05-29", "operation": "BatchPutItem", "tables": { "authors": [ { "author_id": { "S": "a1" }, "author_name": { "S": "a1_name" } }, ], "posts": [ { "author_id": { "S": "a1" }, "post_id": { "S": "p2" }, "post_title": { "S": "title" } } ], } }
El resultado de invocación disponible en $ctx.result
es el siguiente:
{ "data": { "authors": [ null ], "posts": [ # Was inserted { "author_id": "a1", "post_id": "p2", "post_title": "title" } ] }, "unprocessedItems": { "authors": [ # This item was not processed due to an error { "author_id": "a1", "author_name": "a1_name" } ], "posts": [] } }
El $ctx.error
contiene detalles acerca del error. Está garantizado que los datos de claves, unprocessedItems y cada clave de tabla que se le proporcionó en la plantilla de mapeo de solicitud estarán presentes en el resultado de invocación. Los elementos que se han insertado están en el bloque de datos. Los elementos que no se hayan procesado se marcan como null dentro del bloque de datos y se colocan dentro del bloque unprocessedItems.
Para obtener un ejemplo más completo, siga el tutorial de lotes de DynamoDB con AppSync aquí Tutorial: Solucionadores por lotes de DynamoDB.
TransactGetItems
El documento de mapeo de solicitudes de TransactGetItems
permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud TransactGetItems
a DynamoDB para recuperar varios elementos, que pueden estar en varias tablas. Para esta plantilla 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 documento de mapeo de TransactGetItems
tiene la siguiente estructura:
{ "version": "2018-05-29", "operation": "TransactGetItems", "transactItems": [ ## First request item { "table": "table1", "key": { "foo": ... typed value, "bar": ... typed value }, "projection" : { ... } }, ## Second request item { "table": "table2", "key": { "foo": ... typed value, "bar": ... typed value }, "projection" : { ... } } ] }
Los campos se definen de la siguiente manera:
Campos TransactGetItems
-
version
-
La versión de la definición de plantilla. Solo se admite
2018-05-29
. Este valor es obligatorio. -
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
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 bloquecancellationReasons
será el mismo que el orden de los elementos de solicitud. -
TransactGetItems
está limitado a 25 elementos de solicitud.
Para la siguiente plantilla de mapeo de solicitud de ejemplo:
{ "version": "2018-05-29", "operation": "TransactGetItems", "transactItems": [ ## First request item { "table": "posts", "key": { "post_id": { "S": "p1" } } }, ## Second request item { "table": "authors", "key": { "author_id": { "S": a1 } } } ] }
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
.
Para obtener un ejemplo más completo, siga el tutorial de transacciones de DynamoDB con AppSync aquí Tutorial: Solucionadores de transacciones de DynamoDB.
TransactWriteItems
El documento de mapeo de solicitudes de TransactWriteItems
permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud TransactWriteItems
a DynamoDB para escribir varios elementos, posiblemente en varias tablas. Para esta plantilla de solicitud, debe especificar lo siguiente:
-
El nombre de la tabla de destino de cada elemento de solicitud
-
La operación de cada elemento de solicitud que se va a realizar. Hay cuatro tipos de operaciones compatibles: PutItem, UpdateItem, DeleteItem y ConditionCheck.
-
La clave de cada elemento de solicitud que se va a escribir
Se aplican los límites de TransactWriteItems
de DynamoDB.
El documento de mapeo de TransactWriteItems
tiene la siguiente estructura:
{ "version": "2018-05-29", "operation": "TransactWriteItems", "transactItems": [ { "table": "table1", "operation": "PutItem", "key": { "foo": ... typed value, "bar": ... typed value }, "attributeValues": { "baz": ... typed value }, "condition": { "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } }, { "table":"table2", "operation": "UpdateItem", "key": { "foo": ... typed value, "bar": ... typed value }, "update": { "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value } }, "condition": { "expression": "someExpression", "expressionNames": { "#foo":"foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } }, { "table": "table3", "operation": "DeleteItem", "key":{ "foo": ... typed value, "bar": ... typed value }, "condition":{ "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } }, { "table": "table4", "operation": "ConditionCheck", "key":{ "foo": ... typed value, "bar": ... typed value }, "condition":{ "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } } ] }
Campos TransacTwriteItems
- Los campos se definen de la siguiente manera:
-
-
version
-
La versión de la definición de plantilla. Solo se admite
2018-05-29
. Este valor es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
TransactWriteItems
, este valor se debe establecer enTransactWriteItems
. 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.Para
PutItem
, los campos se definen de la siguiente manera:-
table
-
La tabla de DynamoDB de destino. El valor es una cadena con el nombre de la tabla. Este valor
table
es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
PutItem
, este valor se debe establecer enPutItem
. Este valor es obligatorio. -
key
-
La clave de DynamoDB que representa la clave principal del elemento que se desea colocar. 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). Este valor es obligatorio.
-
attributeValues
-
El resto de los atributos del elemento que debe colocarse en DynamoDB. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este campo es opcional.
-
condition
-
Una condición para determinar si la solicitud debe realizarse correctamente o no, en función del estado del objeto ya incluido en DynamoDB. Si no se especifica ninguna condición, la solicitud
PutItem
sobrescribe todas las entradas existentes para dicho elemento. Puede especificar si desea recuperar el elemento existente cuando se produzca un error en la comprobación de condiciones. Para obtener más información acerca de las condiciones transaccionales, consulte Expresiones de condición de transacción. Este valor es opcional.
Para
UpdateItem
, los campos se definen de la siguiente manera:-
table
-
La tabla de DynamoDB que se va a actualizar. El valor es una cadena con el nombre de la tabla. Este valor
table
es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
UpdateItem
, este valor se debe establecer enUpdateItem
. Este valor es obligatorio. -
key
-
La clave de DynamoDB que representa la clave principal del elemento que se va a actualizar. 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). Este valor es obligatorio.
-
update
-
La sección
update
permite especificar una expresión de actualización que describe cómo se actualiza el elemento en DynamoDB. Para obtener más información sobre el modo de escribir expresiones de actualización, consulte la documentación de DynamoDB UpdateExpressions. Esta sección es obligatoria. -
condition
-
Una condición para determinar si la solicitud debe realizarse correctamente o no, en función del estado del objeto ya incluido en DynamoDB. Si no se especifica ninguna condición, la solicitud
UpdateItem
actualiza todas las entradas existentes independientemente de su estado actual. Puede especificar si desea recuperar el elemento existente cuando se produzca un error en la comprobación de condiciones. Para obtener más información acerca de las condiciones transaccionales, consulte Expresiones de condición de transacción. Este valor es opcional.
Para
DeleteItem
, los campos se definen de la siguiente manera:-
table
-
La tabla de DynamoDB en la que se elimina el elemento. El valor es una cadena con el nombre de la tabla. Este valor
table
es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
DeleteItem
, este valor se debe establecer enDeleteItem
. Este valor es obligatorio. -
key
-
La clave de DynamoDB que representa la clave principal del elemento que se desea eliminar. 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). Este valor es obligatorio.
-
condition
-
Una condición para determinar si la solicitud debe realizarse correctamente o no, en función del estado del objeto ya incluido en DynamoDB. Si no se especifica ninguna condición, la solicitud
DeleteItem
elimina un elemento independientemente de su estado actual. Puede especificar si desea recuperar el elemento existente cuando se produzca un error en la comprobación de condiciones. Para obtener más información acerca de las condiciones transaccionales, consulte Expresiones de condición de transacción. Este valor es opcional.
Para
ConditionCheck
, los campos se definen de la siguiente manera:-
table
-
La tabla de DynamoDB en la que se comprueba la condición. El valor es una cadena con el nombre de la tabla. Este valor
table
es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
ConditionCheck
, este valor se debe establecer enConditionCheck
. Este valor es obligatorio. -
key
-
La clave de DynamoDB que representa la clave principal del elemento que hay que someter a una comprobación de condición. 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). Este valor es obligatorio.
-
condition
-
Una condición para determinar si la solicitud debe realizarse correctamente o no, en función del estado del objeto ya incluido en DynamoDB. Puede especificar si desea recuperar el elemento existente cuando se produzca un error en la comprobación de condiciones. Para obtener más información acerca de las condiciones transaccionales, consulte Expresiones de condición de transacción. Este valor es obligatorio.
-
-
Cosas que tener en cuenta:
-
Solo las claves de los elementos de solicitud se devuelven en la respuesta, si se realiza correctamente. El orden de las claves 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.
-
No se pueden dirigir dos elementos de solicitud al mismo elemento. De lo contrario, causarán un error de TransactionCanceledException.
-
Si el error de una transacción es TransactionCanceledException, se rellenará el bloque
cancellationReasons
. Si se produce un error en la comprobación de condición de un elemento de solicitud y no se ha especificado quereturnValuesOnConditionCheckFailure
seafalse
, el elemento existente en la tabla se recuperará y almacenará enitem
en la posición correspondiente del bloquecancellationReasons
. -
TransactWriteItems
está limitado a 25 elementos de solicitud.
Para la siguiente plantilla de mapeo de solicitud de ejemplo:
{ "version": "2018-05-29", "operation": "TransactWriteItems", "transactItems": [ { "table": "posts", "operation": "PutItem", "key": { "post_id": { "S": "p1" } }, "attributeValues": { "post_title": { "S": "New title" }, "post_description": { "S": "New description" } }, "condition": { "expression": "post_title = :post_title", "expressionValues": { ":post_title": { "S": "Expected old title" } } } }, { "table":"authors", "operation": "UpdateItem", "key": { "author_id": { "S": "a1" }, }, "update": { "expression": "SET author_name = :author_name", "expressionValues": { ":author_name": { "S": "New name" } } }, } ] }
Si la transacción se realiza correctamente, el resultado de la invocación disponible en $ctx.result
es el siguiente:
{ "keys": [ // Key of the PutItem request { "post_id": "p1", }, // Key of the UpdateItem request { "author_id": "a1" } ], "cancellationReasons": null }
Si la transacción no se realiza correctamente debido a un error de comprobación de condición de la solicitud PutItem
, el resultado de la invocación disponible en $ctx.result
es el siguiente:
{ "keys": null, "cancellationReasons": [ { "item": { "post_id": "p1", "post_title": "Actual old title", "post_description": "Old description" }, "type": "ConditionCheckFailed", "message": "The condition check failed." }, { "type": "None", "message": "None" } ] }
El $ctx.error
contiene detalles acerca del error. Los valores de keys y cancellationReasons estarán presentes sin duda en $ctx.result
.
Para obtener un ejemplo más completo, siga el tutorial de transacciones de DynamoDB con AppSync aquí Tutorial: Solucionadores de transacciones de DynamoDB.
Sistema de tipos (mapeo de solicitud)
Cuando se utiliza el solucionador de DynamoDB de AWS AppSync para llamar a sus tablas de DynamoDB, AWS AppSync debe conocer el tipo de cada valor que se va a utilizar en dicha llamada. Esto se debe a que DynamoDB admite más tipos primitivos que los disponibles en GraphQL o JSON (por ejemplo, conjuntos y datos binarios). AWS AppSync necesita indicaciones para hacer conversiones entre GraphQL y DynamoDB; de lo contrario, tendría que suponer cómo se estructuran los datos de la tabla.
Para obtener más información sobre los tipos de datos de DynamoDB, consulte la documentación relativa a los descriptores de tipos de datos y los tipos de datos de DynamoDB.
Un valor de DynamoDB se representa mediante un objeto JSON que contiene un único par de clave-valor. La clave especifica el tipo de DynamoDB y el valor especifica el valor en sí. En el siguiente ejemplo, la clave S
indica que el valor es una cadena y el valor identifier
es el valor de la cadena en sí.
{ "S" : "identifier" }
Tenga en cuenta que el objeto JSON no puede tener más de un par de clave-valor. Si se especifica más de un par de clave-valor, el documento de mapeo de solicitudes no se analizará.
Siempre que necesite especificar un valor en un documento de mapeo de solicitudes, deberá usar un valor de DynamoDB. Entre los lugares donde necesitará realizar esta operación figuran: las secciones key
y attributeValue
, y la sección expressionValues
de secciones de expresión. En el siguiente ejemplo, el valor de cadena de DynamoDB identifier
se asigna al campo id
de una sección key
(tal vez en un documento de mapeo de solicitudes GetItem
).
"key" : { "id" : { "S" : "identifier" } }
Tipos admitidos
AWS AppSync admite los siguientes tipos escalares, de documento y de conjunto de DynamoDB:
- Tipo cadena
S
-
Un valor de cadena único. Un valor de cadena de DynamoDB se indica de la siguiente manera:
{ "S" : "some string" }
Ejemplo de uso:
"key" : { "id" : { "S" : "some string" } }
- Tipo de conjunto de cadenas
SS
-
Un conjunto de valores de cadena. Un valor de conjunto de cadenas de DynamoDB se indica de la siguiente manera:
{ "SS" : [ "first value", "second value", ... ] }
Ejemplo de uso:
"attributeValues" : { "phoneNumbers" : { "SS" : [ "+1 555 123 4567", "+1 555 234 5678" ] } }
- Tipo número
N
-
Un valor numérico único. Un valor de número de DynamoDB se indica de la siguiente manera:
{ "N" : 1234 }
Ejemplo de uso:
"expressionValues" : { ":expectedVersion" : { "N" : 1 } }
- Tipo conjunto de números
NS
-
Conjunto de valores de número. Un valor de conjunto de números de DynamoDB se indica de la siguiente manera:
{ "NS" : [ 1, 2.3, 4 ... ] }
Ejemplo de uso:
"attributeValues" : { "sensorReadings" : { "NS" : [ 67.8, 12.2, 70 ] } }
- Tipo binario
B
-
Un valor binario. Un valor Binario de DynamoDB se indica de la siguiente manera:
{ "B" : "SGVsbG8sIFdvcmxkIQo=" }
Observe que el valor es en realidad una cadena que contiene la representación codificada en base64 de los datos binarios. AWS AppSync descodifica esta cadena de nuevo a su valor binario antes de enviarlo a DynamoDB. AWS AppSync utiliza el esquema de descodificación base64 como se define en RFC 2045: cualquier carácter que no esté en el alfabeto base64 no se tiene en cuenta.
Ejemplo de uso:
"attributeValues" : { "binaryMessage" : { "B" : "SGVsbG8sIFdvcmxkIQo=" } }
- Tipo conjunto binario
BS
-
Conjunto de valores binarios. Un valor de conjunto binario de DynamoDB se indica de la siguiente manera:
{ "BS" : [ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ... ] }
Observe que el valor es en realidad una cadena que contiene la representación codificada en base64 de los datos binarios. AWS AppSync descodifica esta cadena de nuevo a su valor binario antes de enviarlo a DynamoDB. AWS AppSync utiliza el esquema de descodificación base64 como se define en RFC 2045: cualquier carácter que no esté en el alfabeto base64 no se tiene en cuenta.
Ejemplo de uso:
"attributeValues" : { "binaryMessages" : { "BS" : [ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ] } }
- Tipo booleano
BOOL
-
Un valor booleano. Un valor Booleano de DynamoDB se indica de la siguiente manera:
{ "BOOL" : true }
Observe que solo los valores
true
yfalse
son válidos.Ejemplo de uso:
"attributeValues" : { "orderComplete" : { "BOOL" : false } }
- Tipo lista
L
-
Lista del resto de valores de DynamoDB admitidos. Un valor de lista de DynamoDB se indica de la siguiente manera:
{ "L" : [ ... ] }
Observe que se trata de un valor compuesto, y que la lista puede contener cero o más de cualquiera de los valores de DynamoDB admitidos (incluidas otras listas). La lista también puede contener una combinación de diferentes tipos.
Ejemplo de uso:
{ "L" : [ { "S" : "A string value" }, { "N" : 1 }, { "SS" : [ "Another string value", "Even more string values!" ] } ] }
- Tipo de mapa
M
-
Representa una colección sin ordenar de pares de clave-valor de otros valores de DynamoDB admitidos. Un valor de mapa de DynamoDB se indica de la siguiente manera:
{ "M" : { ... } }
Observe que un mapa puede contener cero o más pares clave-valor. La clave tiene que ser una cadena y el valor puede ser cualquier valor de DynamoDB admitido (incluidos otros mapas). El mapa también puede contener una combinación de diferentes tipos.
Ejemplo de uso:
{ "M" : { "someString" : { "S" : "A string value" }, "someNumber" : { "N" : 1 }, "stringSet" : { "SS" : [ "Another string value", "Even more string values!" ] } } }
- Tipo nulo
NULL
-
Un valor nulo. Un valor Nulo de DynamoDB se indica de la siguiente manera:
{ "NULL" : null }
Ejemplo de uso:
"attributeValues" : { "phoneNumbers" : { "NULL" : null } }
Para obtener más información sobre cada tipo, consulte la documentación de DynamoDB.
Sistema de tipos (mapeo de respuestas)
Cuando recibe una respuesta de DynamoDB, AWS AppSync la convierte automáticamente a los tipos primitivos de GraphQL y JSON. Cada atributo de DynamoDB se descodifica y se devuelve en el contexto de mapeo de respuestas.
Por ejemplo, si DynamoDB devuelve lo siguiente:
{ "id" : { "S" : "1234" }, "name" : { "S" : "Nadia" }, "age" : { "N" : 25 } }
El solucionador de DynamoDB de AWS AppSync lo convierte a los tipos GraphQL y JSON:
{ "id" : "1234", "name" : "Nadia", "age" : 25 }
En esta sección se explica cómo AWS AppSync convierte los tipos escalares, de documento y de conjunto de DynamoDB indicados:
- Tipo cadena
S
-
Un valor de cadena único. Se devuelve un valor de cadena de DynamoDB en forma de cadena.
Por ejemplo, si DynamoDB devuelve el siguiente valor de cadena de DynamoDB:
{ "S" : "some string" }
AWS AppSync lo convierte en una cadena:
"some string"
- Tipo de conjunto de cadenas
SS
-
Un conjunto de valores de cadena. Un valor de conjunto de cadenas de DynamoDB se devuelve como una lista de cadenas.
Por ejemplo, si DynamoDB devuelve el siguiente valor de conjunto de cadenas de DynamoDB:
{ "SS" : [ "first value", "second value", ... ] }
AWS AppSync lo convierte en una lista de cadenas:
[ "+1 555 123 4567", "+1 555 234 5678" ]
- Tipo número
N
-
Un valor numérico único. Un valor de número de DynamoDB se devuelve como número.
Por ejemplo, si DynamoDB devuelve el siguiente valor de número de DynamoDB:
{ "N" : 1234 }
AWS AppSync lo convierte en un número:
1234
- Tipo conjunto de números
NS
-
Conjunto de valores de número. Un valor de conjunto de números de DynamoDB se devuelve como una lista de números.
Por ejemplo, si DynamoDB devuelve el siguiente valor de conjunto de números de DynamoDB:
{ "NS" : [ 67.8, 12.2, 70 ] }
AWS AppSync lo convierte en una lista de números:
[ 67.8, 12.2, 70 ]
- Tipo binario
B
-
Un valor binario. Un valor Binario de DynamoDB se devuelve en forma de cadena que contiene la representación base64 de dicho valor.
Por ejemplo, si DynamoDB devuelve el siguiente valor binario de DynamoDB:
{ "B" : "SGVsbG8sIFdvcmxkIQo=" }
AWS AppSync lo convierte en una cadena con la representación base64 del valor:
"SGVsbG8sIFdvcmxkIQo="
Observe que los datos binarios se codifican con el esquema base64 como se especifica en RFC 4648
y en RFC 2045 . - Tipo conjunto binario
BS
-
Conjunto de valores binarios. Un valor de conjunto binario de DynamoDB se devuelve en forma de una lista de cadenas con la representación base64 de los valores.
Por ejemplo, si DynamoDB devuelve el siguiente valor de conjunto binario de DynamoDB:
{ "BS" : [ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ... ] }
AWS AppSync lo convierte en una lista de cadenas que contienen la representación base64 de los valores:
[ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ... ]
Observe que los datos binarios se codifican con el esquema base64 como se especifica en RFC 4648
y en RFC 2045 . - Tipo booleano
BOOL
-
Un valor booleano. Un valor Booleano de DynamoDB se devuelve en forma de valor booleano.
Por ejemplo, si DynamoDB devuelve el siguiente valor booleano de DynamoDB:
{ "BOOL" : true }
AWS AppSync lo convierte en un valor booleano:
true
- Tipo lista
L
-
Lista del resto de valores de DynamoDB admitidos. Un valor de lista de DynamoDB se devuelve en forma de lista de valores, donde el valor de cada elemento también se convierte.
Por ejemplo, si DynamoDB devuelve el siguiente valor de lista de DynamoDB:
{ "L" : [ { "S" : "A string value" }, { "N" : 1 }, { "SS" : [ "Another string value", "Even more string values!" ] } ] }
AWS AppSync lo convierte en una lista de valores convertidos:
[ "A string value", 1, [ "Another string value", "Even more string values!" ] ]
- Tipo de mapa
M
-
Colección de claves y valores de cualquier otro valor de DynamoDB admitido. Un valor de mapa de DynamoDB se devuelve en forma de objeto JSON en el que también se convierte cada clave y valor.
Por ejemplo, si DynamoDB devuelve el siguiente valor de mapa de DynamoDB:
{ "M" : { "someString" : { "S" : "A string value" }, "someNumber" : { "N" : 1 }, "stringSet" : { "SS" : [ "Another string value", "Even more string values!" ] } } }
AWS AppSync lo convierte en un objeto JSON:
{ "someString" : "A string value", "someNumber" : 1, "stringSet" : [ "Another string value", "Even more string values!" ] }
- Tipo nulo
NULL
-
Un valor nulo.
Por ejemplo, si DynamoDB devuelve el siguiente valor nulo de DynamoDB:
{ "NULL" : null }
AWS AppSync lo convierte en un valor nulo:
null
Filtros
Al consultar objetos de DynamoDB mediante las operaciones Query
y Scan
, tiene la posibilidad de especificar un filter
para evaluar los resultados y devolver solo los valores deseados.
La sección de mapeo de filtros de un documento de mapeo Query
o Scan
tiene la siguiente estructura:
"filter" : { "expression" : "filter expression" "expressionNames" : { "#name" : "name", }, "expressionValues" : { ":value" : ... typed value }, }
Los campos se definen de la siguiente manera:
-
expression
-
La expresión de la consulta. Para obtener más información sobre cómo escribir expresiones de filtro, consulte la documentación de DynamoDB QueryFilter y DynamoDB ScanFilter. Este campo debe especificarse.
-
expressionNames
-
Las sustituciones de los marcadores de posición de nombre de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de nombre utilizado en la
expression
. El valor debe ser una cadena que corresponda al nombre del atributo del elemento en DynamoDB. Este campo es opcional y solo debe rellenarse con las sustituciones de marcadores de posición de nombre de atributo de expresión que se usen en laexpression
. -
expressionValues
-
Las sustituciones de los marcadores de posición de valor de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de valor usado en la
expression
y el valor tiene que ser un valor con tipo. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor debe especificarse. Este campo es opcional y solo debe rellenarse con las sustituciones de los marcadores de posición de valor de atributo de expresión que se usen en laexpression
.
Ejemplo
En el siguiente ejemplo, se muestra una sección de filtro para una plantilla de mapeo en la que las entradas obtenidas de DynamoDB solo se devuelven si el título comienza con el argumento title
.
"filter" : { "expression" : "begins_with(#title, :title)", "expressionNames" : { "#title" : "title" }, "expressionValues" : { ":title" : $util.dynamodb.toDynamoDBJson($context.arguments.title) } }
Expresiones de condición
Al mutar objetos en DynamoDB utilizando las operaciones de DynamoDB PutItem
, UpdateItem
y DeleteItem
, puede especificar opcionalmente una expresión de condición que determine si la solicitud se debe atender o no en función del estado del objeto que ya está en DynamoDB antes de ejecutar la operación.
El solucionador de DynamoDB de AWS AppSync permite especificar una expresión de condición en los documentos de mapeo de solicitudes PutItem
, UpdateItem
y DeleteItem
, así como la estrategia que debe seguirse en caso de que la condición no se cumpla y el objeto no se actualice.
Ejemplo 1
El siguiente documento de mapeo PutItem
no tiene una expresión de condición. Como resultado, pone un elemento en DynamoDB incluso si ya existe un elemento con la misma clave, lo que permite sobrescribir el elemento existente.
{ "version" : "2017-02-28", "operation" : "PutItem", "key" : { "id" : { "S" : "1" } } }
Ejemplo 2
El siguiente documento de mapeo PutItem
tiene una expresión de condición que permitirá que la operación se complete solo si no existe un elemento con la misma clave en DynamoDB.
{ "version" : "2017-02-28", "operation" : "PutItem", "key" : { "id" : { "S" : "1" } }, "condition" : { "expression" : "attribute_not_exists(id)" } }
De forma predeterminada, si la condición no se cumple, el solucionador de DynamoDB de AWS AppSync devolverá un error para la mutación y el valor actual del objeto en DynamoDB de un campo data
de la sección error
de la respuesta de GraphQL. Sin embargo, el solucionador de DynamoDB de AWS AppSync ofrece algunas características adicionales para ayudar a los desarrolladores a gestionar algunos casos límite habituales:
-
Si el solucionador de DynamoDB de AWS AppSync puede determinar que el valor actual de DynamoDB coincide con el resultado deseado, trata la operación como si se hubiera realizado correctamente de todos modos.
-
En lugar de devolver un error, puede configurar el solucionador para que invoque una función de Lambda personalizada que decida cómo debe gestionar el error AWS AppSync DynamoDB.
Estos casos se describen con más detalle en la sección de gestión de un error de comprobación de la condición.
Para obtener más información sobre las expresiones de condiciones de DynamoDB, consulte la documentación de expresiones de condición de DynamoDB.
Especificación de una condición
Todos los documentos de mapeo de solicitudes PutItem
, UpdateItem
y DeleteItem
permiten especificar una sección condition
opcional. Si se omite, no se comprobará ninguna condición. Si se especifica, la condición debe ser true para que la operación se lleve a cabo correctamente.
Las secciones condition
tienen la siguiente estructura:
"condition" : { "expression" : "someExpression" "expressionNames" : { "#foo" : "foo" }, "expressionValues" : { ":bar" : ... typed value }, "equalsIgnore" : [ "version" ], "consistentRead" : true, "conditionalCheckFailedHandler" : { "strategy" : "Custom", "lambdaArn" : "arn:..." } }
Los campos siguientes especifican la condición:
-
expression
-
La misma expresión de actualización. Para obtener más información sobre cómo escribir expresiones de condición, consulte la documentación de DynamoDB ContitionExpressions. Este campo debe especificarse.
-
expressionNames
-
Las sustituciones de los marcadores de posición de nombre de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de nombre usado en la expresión, y el valor tiene que ser una cadena que corresponda al nombre de atributo del elemento en DynamoDB. Este campo es opcional y solo debe rellenarse con las sustituciones de los marcadores de posición de nombre de atributo de expresión que se usen en la expresión.
-
expressionValues
-
Las sustituciones de los marcadores de posición de valor de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de valor usado en la expresión y el valor tiene que ser un valor con tipo. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor debe especificarse. Este campo es opcional y solo debe rellenarse con las sustituciones de los marcadores de posición de valor de atributo de expresión que se usen en la expresión.
El resto de los campos indican al solucionador de DynamoDB de AWS AppSync cómo gestionar los casos en que no se cumpla la condición:
-
equalsIgnore
-
Cuando no se cumple la condición para la operación
PutItem
, el solucionador de DynamoDB de AWS AppSync compara el elemento que hay actualmente en DynamoDB con el elemento que ha intentado escribir. Si son iguales, trata la operación como si se hubiera realizado correctamente. Puede utilizar el campoequalsIgnore
para especificar una lista de atributos que AWS AppSync no debe tener en cuenta al realizar la comparación. Por ejemplo, si la única diferencia ha sido un atributoversion
, trata la operación como si se hubiera realizado satisfactoriamente. Este campo es opcional. -
consistentRead
-
Cuando una condición no se cumple, AWS AppSync obtiene el valor actual del elemento de DynamoDB mediante una lectura altamente coherente. Puede utilizar este campo para indicar al solucionador de DynamoDB de AWS AppSync que use una lectura coherente posterior en su lugar. Este campo es opcional y de forma predeterminada es
true
. -
conditionalCheckFailedHandler
-
Esta sección le permite especificar la forma en que el solucionador de DynamoDB de AWS AppSync trata los casos en que no se cumpla la condición después de haber comparado el valor actual en DynamoDB con el resultado esperado. Esta sección es opcional. Si se omite, el valor predeterminado es una estrategia
Reject
.-
strategy
-
La estrategia que el solucionador de DynamoDB de AWS AppSync sigue después de comparar el valor actual en DynamoDB con el resultado esperado. Este campo es obligatorio y tiene los siguientes valores posibles:
-
Reject
-
La mutación fracasa y se obtiene un error y un error para la mutación y el valor actual del objeto en DynamoDB en un campo
data
de la secciónerror
de la respuesta de GraphQL. -
Custom
-
El solucionador de DynamoDB de AWS AppSync invoca una función de Lambda personalizada para decidir cómo gestionar el incumplimiento de la condición. Cuando
strategy
tiene el valorCustom
, el campolambdaArn
debe contener el ARN de la función Lambda que se va a invocar.
-
-
lambdaArn
-
El ARN de la función de Lambda que se invoca, que determina cómo debe gestionar el solucionador de DynamoDB de AWS AppSync el incumplimiento de la condición. Este campo solo tiene que especificarse cuando
strategy
tiene el valorCustom
. Para obtener más información acerca de cómo utilizar esta característica, consulte la sección Gestión de los casos en que no se cumple la condición.
-
Gestión de un error de comprobación de la condición
De forma predeterminada, si la condición no se cumple, el solucionador de DynamoDB de AWS AppSync devolverá un error para la mutación y el valor actual del objeto en DynamoDB de un campo data
de la sección error
de la respuesta de GraphQL. Sin embargo, el solucionador de DynamoDB de AWS AppSync ofrece algunas características adicionales para ayudar a los desarrolladores a gestionar algunos casos límite habituales:
-
Si el solucionador de DynamoDB de AWS AppSync puede determinar que el valor actual de DynamoDB coincide con el resultado deseado, trata la operación como si se hubiera realizado correctamente de todos modos.
-
En lugar de devolver un error, puede configurar el solucionador para que invoque una función de Lambda personalizada que decida cómo debe gestionar el error AWS AppSync DynamoDB.
El diagrama de flujo de este proceso es:
![](images/DynamoDB-condition-check-failure-handling.png)
Comprobación del resultado deseado
Cuando la condición no se cumple, el solucionador de DynamoDB de AWS AppSync realiza una solicitud de DynamoDB GetItem
para obtener el valor actual del elemento de DynamoDB. De forma predeterminada, utiliza una lectura muy consistente; sin embargo, esto puede configurarse mediante el campo consistentRead
en el bloque condition
y compararlo con el resultado esperado:
-
En la operación
PutItem
, el solucionador de DynamoDB de AWS AppSync compara el valor actual con el que intentó escribir, excluyendo de la comparación los atributos especificados enequalsIgnore
. Si los elementos son los mismos, trata la operación como si se hubiera realizado y devuelve el elemento obtenido de DynamoDB. De lo contrario, sigue la estrategia configurada.Por ejemplo, si el documento de mapeo de
PutItem
tenía el siguiente aspecto:{ "version" : "2017-02-28", "operation" : "PutItem", "key" : { "id" : { "S" : "1" } }, "attributeValues" : { "name" : { "S" : "Steve" }, "version" : { "N" : 2 } }, "condition" : { "expression" : "version = :expectedVersion", "expressionValues" : { ":expectedVersion" : { "N" : 1 } }, "equalsIgnore": [ "version" ] } }
Y el elemento que está actualmente en DynamoDB fuese de la siguiente manera:
{ "id" : { "S" : "1" }, "name" : { "S" : "Steve" }, "version" : { "N" : 8 } }
El solucionador de DynamoDB de AWS AppSync compararía el elemento que intentó escribir con el valor actual y vería que la única diferencia es el campo
version
, pero como la configuración pasa el campoversion
por alto, trataría la operación como correcta y devolvería el elemento obtenido de DynamoDB. -
En la operación
DeleteItem
, el solucionador de DynamoDB de AWS AppSync realiza una comprobación para verificar que se ha devuelto un elemento de DynamoDB. Si no se devuelve ningún elemento, trata la operación como si se hubiera realizado correctamente. De lo contrario, sigue la estrategia configurada. -
En la operación
UpdateItem
, el solucionador de DynamoDB de AWS AppSync no tiene suficiente información para determinar si el elemento que está actualmente en DynamoDB coincide con el resultado esperado y, por lo tanto, sigue la estrategia configurada.
Si el estado actual del objeto en DynamoDB es diferente del resultado esperado, el solucionador de DynamoDB de AWS AppSync sigue la estrategia configurada para rechazar la mutación o invocar una función de Lambda para determinar qué hacer a continuación.
Aplicación de la estrategia de rechazo
Si se sigue la estrategia Reject
, el solucionador de DynamoDB de AWS AppSync devuelve un error para la mutación y el valor actual del objeto en DynamoDB también se devuelve en un campo data
de la sección error
de la respuesta de GraphQL. El elemento que se devuelve desde DynamoDB pasa por la plantilla de mapeo de respuesta para convertirlo a un formato que el cliente espera y también se filtra según el conjunto de selección.
Por ejemplo, si se recibe la solicitud de mutación siguiente:
mutation { updatePerson(id: 1, name: "Steve", expectedVersion: 1) { Name theVersion } }
Si el elemento devuelto de DynamoDB tiene un aspecto similar al siguiente:
{ "id" : { "S" : "1" }, "name" : { "S" : "Steve" }, "version" : { "N" : 8 } }
Y la plantilla de mapeo de respuesta es como se muestra a continuación:
{ "id" : $util.toJson($context.result.id), "Name" : $util.toJson($context.result.name), "theVersion" : $util.toJson($context.result.version) }
La respuesta GraphQL tiene este aspecto:
{ "data": null, "errors": [ { "message": "The conditional request failed (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ConditionalCheckFailedException; Request ID: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ)" "errorType": "DynamoDB:ConditionalCheckFailedException", "data": { "Name": "Steve", "theVersion": 8 }, ... } ] }
Además, si hay algún campo en el objeto devuelto que hayan cumplimentado otros solucionadores y si la mutación se ha efectuado satisfactoriamente, el objeto no se resuelve cuando se devuelve en la sección error
.
Aplicación de la estrategia personalizada
Si se sigue la estrategia Custom
, el solucionador de DynamoDB de AWS AppSync invoca una función de Lambda para decidir qué hacer a continuación. La función Lambda selecciona una de las siguientes opciones:
-
reject
la mutación. Esto le indica al solucionador de DynamoDB de AWS AppSync que se comporte como si la estrategia configurada fueraReject
y que devuelva un error para la mutación y el valor actual del objeto de DynamoDB, tal como se describe en la sección anterior. -
discard
la mutación. Esto indica al solucionador de DynamoDB de AWS AppSync que no notifique el incumplimiento de la condición y que devuelva el valor en DynamoDB. -
retry
la mutación. Esto le indica al solucionador de DynamoDB de AWS AppSync que vuelva a intentar la mutación con otro documento de mapeo de solicitud.
La solicitud de invocación Lambda
El solucionador de DynamoDB de AWS AppSync invoca la función de Lambda especificada en el lambdaArn
. Se utiliza el mismo service-role-arn
configurado en el origen de datos. La carga de la invocación tiene la siguiente estructura:
{ "arguments": { ... }, "requestMapping": {... }, "currentValue": { ... }, "resolver": { ... }, "identity": { ... } }
Los campos se definen de la siguiente manera:
-
arguments
-
Los argumentos de la mutación de GraphQL. Esto es lo mismo que los argumentos disponibles en el documento de mapeo de solicitudes en
$context.arguments
. -
requestMapping
-
El documento de mapeo de solicitudes de esta operación.
-
currentValue
-
El valor actual del objeto en DynamoDB.
-
resolver
-
Información sobre el solucionador de AWS AppSync.
-
identity
-
Información sobre el intermediario. Se trata de la información de identidad disponible en el documento de mapeo de solicitudes en
$context.identity
.
Un ejemplo completo de la carga:
{ "arguments": { "id": "1", "name": "Steve", "expectedVersion": 1 }, "requestMapping": { "version" : "2017-02-28", "operation" : "PutItem", "key" : { "id" : { "S" : "1" } }, "attributeValues" : { "name" : { "S" : "Steve" }, "version" : { "N" : 2 } }, "condition" : { "expression" : "version = :expectedVersion", "expressionValues" : { ":expectedVersion" : { "N" : 1 } }, "equalsIgnore": [ "version" ] } }, "currentValue": { "id" : { "S" : "1" }, "name" : { "S" : "Steve" }, "version" : { "N" : 8 } }, "resolver": { "tableName": "People", "awsRegion": "us-west-2", "parentType": "Mutation", "field": "updatePerson", "outputType": "Person" }, "identity": { "accountId": "123456789012", "sourceIp": "x.x.x.x", "user": "AIDAAAAAAAAAAAAAAAAAA", "userArn": "arn:aws:iam::123456789012:user/appsync" } }
La respuesta de invocación Lambda
La función de Lambda puede inspeccionar la carga de invocación y aplicar cualquier lógica de negocio para decidir la forma en que el solucionador de DynamoDB de AWS AppSync debe gestionar el error. Existen tres opciones para gestionar el error de comprobación de condición:
-
reject
la mutación. La carga de respuesta de esta opción debe tener esta estructura:{ "action": "reject" }
Esto le indica al solucionador de DynamoDB de AWS AppSync que se comporte como si la estrategia configurada fuera
Reject
y que devuelva un error para la mutación y el valor actual del objeto de DynamoDB, tal como se describe en la sección anterior. -
discard
la mutación. La carga de respuesta de esta opción debe tener esta estructura:{ "action": "discard" }
Esto indica al solucionador de DynamoDB de AWS AppSync que no notifique el incumplimiento de la condición y que devuelva el valor en DynamoDB.
-
retry
la mutación. La carga de respuesta de esta opción debe tener esta estructura:{ "action": "retry", "retryMapping": { ... } }
Esto le indica al solucionador de DynamoDB de AWS AppSync que vuelva a intentar la mutación con otro documento de mapeo de solicitud. La estructura de la sección
retryMapping
depende de la operación de DynamoDB y es un subconjunto del documento de mapeo de solicitudes completo de esa operación.Para
PutItem
, la secciónretryMapping
tiene la siguiente estructura. Para ver una descripción del campoattributeValues
, consulte PutItem.{ "attributeValues": { ... }, "condition": { "equalsIgnore" = [ ... ], "consistentRead" = true } }
Para
UpdateItem
, la secciónretryMapping
tiene la siguiente estructura. Para ver una descripción de la secciónupdate
, consulte UpdateItem.{ "update" : { "expression" : "someExpression" "expressionNames" : { "#foo" : "foo" }, "expressionValues" : { ":bar" : ... typed value } }, "condition": { "consistentRead" = true } }
Para
DeleteItem
, la secciónretryMapping
tiene la siguiente estructura.{ "condition": { "consistentRead" = true } }
No hay forma de especificar otra operación o clave en la que trabajar. El solucionador de DynamoDB de AWS AppSync solo permite reintentos de la misma operación en el mismo objeto. Asimismo, la sección
condition
no permite especificar unconditionalCheckFailedHandler
. Si el reintento fracasa, el solucionador de DynamoDB de AWS AppSync sigue la estrategiaReject
.
A continuación se muestra un ejemplo de función Lambda para tratar una solicitud PutItem
sin éxito. La lógica de negocio examina quién realizó la llamada. Si la realizó jeffTheAdmin
, vuelve a intentar realizar la solicitud, actualizando version
y expectedVersion
desde el elemento actualmente en DynamoDB. De lo contrario, rechaza la mutación.
exports.handler = (event, context, callback) => { console.log("Event: "+ JSON.stringify(event)); // Business logic goes here. var response; if ( event.identity.user == "jeffTheAdmin" ) { response = { "action" : "retry", "retryMapping" : { "attributeValues" : event.requestMapping.attributeValues, "condition" : { "expression" : event.requestMapping.condition.expression, "expressionValues" : event.requestMapping.condition.expressionValues } } } response.retryMapping.attributeValues.version = { "N" : event.currentValue.version.N + 1 } response.retryMapping.condition.expressionValues[':expectedVersion'] = event.currentValue.version } else { response = { "action" : "reject" } } console.log("Response: "+ JSON.stringify(response)) callback(null, response) };
Expresiones de condición de transacción
Las expresiones de condición de transacción están disponibles en las plantillas de mapeo de solicitudes de los cuatro tipos de operaciones en TransactWriteItems
, a saber, PutItem
, DeleteItem
, UpdateItem
y ConditionCheck
.
Para PutItem
, DeleteItem
y UpdateItem
, la expresión de condición de transacción es opcional. Para ConditionCheck
, se requiere la expresión de condición de transacción.
Ejemplo 1
El siguiente documento de mapeo transaccional de DeleteItem
no tiene una expresión de condición. Como resultado, elimina el elemento en DynamoDB.
{ "version": "2018-05-29", "operation": "TransactWriteItems", "transactItems": [ { "table": "posts", "operation": "DeleteItem", "key": { "id": { "S" : "1" } } } ] }
Ejemplo 2
El siguiente documento de mapeo transaccional de DeleteItem
tiene una expresión de condición de transacción que permite que la operación tenga éxito únicamente si el autor de esa publicación es igual a un nombre determinado.
{ "version": "2018-05-29", "operation": "TransactWriteItems", "transactItems": [ { "table": "posts", "operation": "DeleteItem", "key": { "id": { "S" : "1" } } "condition": { "expression": "author = :author", "expressionValues": { ":author": { "S" : "Chunyan" } } } } ] }
Si la comprobación de condición no se realiza correctamente, provocará la excepción TransactionCanceledException
y se devolverá el detalle del error en $ctx.result.cancellationReasons
. Tenga en cuenta que, de forma predeterminada, el elemento anterior de DynamoDB que provocó el error en esa comprobación de condición se devolverá en $ctx.result.cancellationReasons
.
Especificación de una condición
Todos los documentos de mapeo de solicitudes PutItem
, UpdateItem
y DeleteItem
permiten especificar una sección condition
opcional. Si se omite, no se comprobará ninguna condición. Si se especifica, la condición debe ser true para que la operación se lleve a cabo correctamente. ConditionCheck
debe tener una sección condition
sección para especificarla. La condición debe ser verdadera para que toda la transacción se realice correctamente.
Las secciones condition
tienen la siguiente estructura:
"condition": { "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": false }
Los campos siguientes especifican la condición:
-
expression
-
La misma expresión de actualización. Para obtener más información sobre cómo escribir expresiones de condición, consulte la documentación de DynamoDB ContitionExpressions. Este campo debe especificarse.
-
expressionNames
-
Las sustituciones de los marcadores de posición de nombre de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de nombre usado en la expresión, y el valor tiene que ser una cadena que corresponda al nombre de atributo del elemento en DynamoDB. Este campo es opcional y solo debe rellenarse con las sustituciones de los marcadores de posición de nombre de atributo de expresión que se usen en la expresión.
-
expressionValues
-
Las sustituciones de los marcadores de posición de valor de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de valor usado en la expresión y el valor tiene que ser un valor con tipo. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor debe especificarse. Este campo es opcional y solo debe rellenarse con las sustituciones de los marcadores de posición de valor de atributo de expresión que se usen en la expresión.
-
returnValuesOnConditionCheckFailure
-
Especifique si desea recuperar el elemento en DynamoDB cuando se produzca un error en la comprobación de condición. El elemento recuperado estará en
$ctx.result.cancellationReasons[$index].item
, donde$index
es el índice del elemento de solicitud que no ha superado la comprobación de condición. Este valor se establece de forma predeterminada en true.
Proyecciones
Al leer objetos de DynamoDB mediante las operaciones GetItem
, Scan
, Query
, BatchGetItem
y TransactGetItems
, tiene la posibilidad de especificar una proyección para identificar los atributos deseados. La proyección tiene la siguiente estructura, que es similar a los filtros:
"projection" : { "expression" : "projection expression" "expressionNames" : { "#name" : "name", } }
Los campos se definen de la siguiente manera:
expression
-
La expresión de proyección, que es una cadena. Para recuperar un solo atributo, especifique su nombre. Si desea obtener varios atributos, separe sus nombres mediante comas. Para obtener más información sobre la redacción de expresiones de proyección, consulte la documentación relativa a las expresiones de proyección de DynamoDB. Este campo es obligatorio.
-
expressionNames
-
Las sustituciones de los marcadores de posición de nombre de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de nombre utilizado en la
expression
. El valor debe ser una cadena que corresponda al nombre del atributo del elemento en DynamoDB. Este campo es opcional y solo debe rellenarse con las sustituciones de marcadores de posición de nombre de atributo de expresión que se usen en laexpression
. Para obtener más información acerca deexpressionNames
, consulte la documentación de DynamoDB.
Ejemplo 1
El siguiente ejemplo es una sección de proyección para un mapeo de VTL en el que solo los atributos author
y id
se devuelven de DynamoDB:
"projection" : { "expression" : "#author, id", "expressionNames" : { "#author" : "author" } }
sugerencia
Puede acceder a su conjunto de selección de solicitudes de GraphQL mediante $context.info.selectionSetList. Este campo permite enmarcar su expresión de proyección de forma dinámica según sus requisitos.
nota
Al utilizar expresiones de proyección con las operaciones Query
y Scan
, el valor de select
debe ser SPECIFIC_ATTRIBUTES
. Para obtener más información, consulte la documentación de DynamoDB.