PutItem
O documento de mapeamento de solicitação PutItem permite a você orientar a função do DynamoDB do AWS AppSync a realizar uma solicitação PutItem ao DynamoDB. Além disso, permite especificar:
-
A chave do item no DynamoDB
-
O conteúdo completo do item (composto por
keyeattributeValues) -
Condições para que a operação seja bem-sucedida
A solicitação PutItem tem a seguinte estrutura:
type DynamoDBPutItemRequest = { operation: 'PutItem'; key: { [key: string]: any }; attributeValues: { [key: string]: any}; condition?: ConditionCheckExpression; customPartitionKey?: string; populateIndexFields?: boolean; _version?: number; };
Os campos são definidos da seguinte forma:
Campos PutItem
-
operation -
A operação do DynamoDB para execução. Para executar a operação
PutItemdo DynamoDB, ela deve ser definida comoPutItem. Este valor é obrigatório. -
key -
A chave do item no DynamoDB. Os itens do DynamoDB podem ter uma única chave de hash ou uma chave de hash e uma chave de classificação, dependendo da estrutura da tabela. Para obter mais informações sobre como especificar um "valor digitado", consulte Sistema de tipo (Mapeamento de solicitação). Este valor é obrigatório.
-
attributeValues -
O restante dos atributos do item a ser colocado no DynamoDB. Para obter mais informações sobre como especificar um "valor digitado", consulte Sistema de tipo (Mapeamento de solicitação). Esse campo é opcional.
-
condition -
Uma condição para determinar se a solicitação deve ser bem-sucedida ou não, com base no estado do objeto que já está no DynamoDB. Se nenhuma condição for especificada, uma solicitação
PutItemsubstitui qualquer entrada existente para esse item. Para obter mais informações sobre as condições, consulte Expressões de condição. Este valor é opcional. -
_version -
Um valor numérico que representa a versão conhecida mais recente de um item. Este valor é opcional. Esse campo é usado para Detecção de conflitos e só é compatível com fontes de dados versionadas.
customPartitionKey-
Quando ativado, esse valor de string modifica o formato dos registros
ds_pkeds_skusados pela tabela de sincronização delta quando o versionamento é ativado (para obter mais informações, consulte Detecção e sincronização de conflitos no Guia do desenvolvedor do AWS AppSync). Quando ativado, o processamento da entradapopulateIndexFieldstambém é ativado. Esse campo é opcional. populateIndexFields-
Um valor booleano que, quando ativado com
customPartitionKey, cria novas entradas para cada registro na tabela de sincronização delta, especificamente nas colunasgsi_ds_pkegsi_ds_sk. Para obter mais informações, consulte Detecção e sincronização de conflitos no Guia do desenvolvedor do AWS AppSync. Esse campo é opcional.O item gravado no DynamoDB é automaticamente convertido nos tipos primitivos GraphQL e JSON e está disponível no resultado do contexto (
context.result).
O item gravado no DynamoDB é automaticamente convertido nos tipos primitivos GraphQL e JSON e está disponível no resultado do contexto (context.result).
Para obter mais informações sobre a conversão de tipo do DynamoDB, consulte Sistema de tipo (mapeamento da resposta).
Para obter mais informações sobre resolvedores de JavaScript, consulte Visão geral de resolvedores de JavaScript.
Exemplo 1
O exemplo a seguir é um manipulador de solicitação de função para uma mutação GraphQL : updateThing(foo: String!, bar: String!, name: String!, version:
Int!).
Se nenhum item com a chave especificada existir, ele será criado. Se já existir um item com a chave especificada, ele será substituído.
import { util } from '@aws-appsync/utils'; export function request(ctx) { const { foo, bar, ...values} = ctx.args return { operation: 'PutItem', key: util.dynamodb.toMapValues({foo, bar}), attributeValues: util.dynamodb.toMapValues(values), }; }
Exemplo 2
O exemplo a seguir é um manipulador de solicitação de função para uma mutação GraphQL : updateThing(foo: String!, bar: String!, name: String!, expectedVersion:
Int!).
Esse exemplo verifica se o item que está atualmente no DynamoDB tem o campo version definido como expectedVersion.
import { util } from '@aws-appsync/utils'; export function request(ctx) { const { foo, bar, name, expectedVersion } = ctx.args; const values = { name, version: expectedVersion + 1 }; let condition = util.transform.toDynamoDBConditionExpression({ version: { eq: expectedVersion }, }); return { operation: 'PutItem', key: util.dynamodb.toMapValues({ foo, bar }), attributeValues: util.dynamodb.toMapValues(values), condition, }; }
Para obter mais informações sobre a API PutItem do DynamoDB, consulte a Documentação da API do DynamoDB.