Sincronização - AWS AppSync

Sincronização

O documento de mapeamento de solicitação Sync permite recuperar todos os resultados de uma tabela do DynamoDB e, depois, receber apenas os dados alterados desde a última consulta (as atualizações delta). As solicitações Sync só podem ser feitas para fontes de dados versionadas do DynamoDB. Você pode especificar o seguinte:

  • Um filtro para excluir os resultados

  • Quantos itens retornar

  • Token de paginação

  • Quando sua última operação de Sync foi iniciada

O documento de mapeamento Sync possui a seguinte estrutura:

{ "version" : "2018-05-29", "operation" : "Sync", "basePartitionKey": "Base Tables PartitionKey", "deltaIndexName": "delta-index-name", "limit" : 10, "nextToken" : "aPaginationToken", "lastSync" : 1550000000000, "filter" : { ... } }

Os campos são definidos da seguinte forma:

Campos de sincronização

version

A versão de definição do modelo. No momento, somente 2018-05-29 é compatível. Este valor é obrigatório.

operation

A operação do DynamoDB para execução. Para executar a operação do Sync do , isso deve ser definido para Sync. Este valor é obrigatório.

filter

Um filtro que pode ser usado para filtrar os resultados do DynamoDB antes que sejam retornados. Para obter mais informações sobre os filtros, consulte Filtros. Esse campo é opcional.

limit

O número máximo de itens a serem avaliados ao mesmo tempo. Esse campo é opcional. Se omitido, o limite padrão será definido como 100 itens. O valor máximo para esse campo é de 1000 itens.

nextToken

O token de paginação para continuar uma consulta anterior. Isso seria obtido de uma consulta anterior. Esse campo é opcional.

lastSync

O momento, em milésimos de segundos de epoch, no qual a última operação de Sync bem-sucedida foi iniciada. Se especificado, somente os itens que foram alterados após lastSync serão retornados. Este campo é opcional e deve ser preenchido somente depois de recuperar todas as páginas de uma operação inicial de Sync. Se omitido, os resultados da tabela Base serão retornados, caso contrário, os resultados da tabela Delta serão retornados.

basePartitionKey

A chave de partição da tabela Base usada ao realizar uma operação Sync. Esse campo permite que uma operação Sync seja executada quando a tabela utiliza uma chave de partição personalizada. Esse é um campo opcional.

deltaIndexName

O índice usado para a operação Sync. Esse índice é necessário para habilitar uma operação Sync em toda a tabela de armazenamento delta quando a tabela usa uma chave de partição personalizada. A operação Sync será executada no GSI (criado em gsi_ds_pk e gsi_ds_sk). Esse campo é opcional.

Os resultados retornados pela sincronização do DynamoDB são automaticamente convertidos nos tipos primitivos GraphQL e JSON e estão disponíveis no contexto de mapeamento ($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 os modelos de mapeamento da resposta, consulte Visão geral do modelo de mapeamento do resolvedor.

Os resultados possuem a seguinte estrutura:

{ items = [ ... ], nextToken = "a pagination token", scannedCount = 10, startedAt = 1550000000000 }

Os campos são definidos da seguinte forma:

items

Uma lista que contém os itens retornados pela sincronização.

nextToken

Se existirem mais resultados, nextToken conterá um token de paginação que você pode usar em outra solicitação. AWS O AppSync criptografa e ofusca o token de paginação retornado do DynamoDB. Isso impede que os dados da sua tabela sejam divulgados inadvertidamente para o chamador. Além disso, esses tokens de paginação não podem ser usados em diferentes resolvedores.

scannedCount

O número de itens recuperados pelo DynamoDB antes da aplicação de uma expressão de filtro (se houver).

startedAt

O momento, em milésimos de segundos de epoch, no qual a operação de sincronização foi iniciada e você pode armazenar localmente e usar em outra solicitação como seu argumento lastSync. Se um token de paginação foi incluído na solicitação, esse valor será o mesmo que o retornado pela solicitação para a primeira página de resultados.

Exemplo

Veja a seguir um modelo de mapeamento para uma consulta syncPosts(nextToken: String, lastSync: AWSTimestamp) do GraphQL.

Neste exemplo, se lastSync for omitido, todas as entradas na tabela base serão retornadas. Se lastSync for fornecido, somente as entradas na tabela de sincronização delta que foram alteradas desde lastSync serão retornadas.

{ "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)) }