

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Uso de resolvedores locais no AWS AppSync
<a name="tutorial-local-resolvers-js"></a>

O AWS AppSync permite que você use fontes de dados compatíveis (AWS Lambda, Amazon DynamoDB ou Amazon OpenSearch Service) para executar diversas operações. No entanto, em determinados cenários, uma chamada para uma fonte de dados compatível pode não ser necessária.

É aí que o resolvedor local se torna útil. Em vez de chamar uma fonte de dados remota, o resolvedor local apenas **encaminhará** o resultado do manipulador de solicitação para o manipulador de resposta. A resolução do campo não deixará o AWS AppSync.

Os resolvedores locais são úteis em uma infinidade de situações. O caso de uso mais popular é a publicação de notificações sem acionar uma chamada da fonte de dados. Para demonstrar esse caso de uso, vamos criar um aplicativo pub/sub no qual os usuários possam publicar e assinar mensagens. Esse exemplo utiliza *Assinaturas*, portanto se não estiver familiarizado com *Assinaturas*, siga o tutorial [Dados em tempo real](aws-appsync-real-time-data.md).

## Criação do aplicativo pub/sub
<a name="create-the-pub-sub-application-js"></a>

Primeiro, crie uma API GraphQL em branco escolhendo a opção **Design do zero** e configurando os detalhes opcionais ao criar sua API GraphQL.

Em nosso aplicativo pub/sub, os clientes podem assinar e publicar mensagens. Cada mensagem publicada inclui um nome e dados. Adicione-o ao esquema:

```
type Channel {
	name: String!
	data: AWSJSON!
}

type Mutation {
	publish(name: String!, data: AWSJSON!): Channel
}

type Query {
	getChannel: Channel
}

type Subscription {
	subscribe(name: String!): Channel
		@aws_subscribe(mutations: ["publish"])
}
```

Depois, vamos anexar um resolvedor ao campo `Mutation.publish`. No painel **Resolvedores** próximo ao painel **Esquema**, encontre o tipo `Mutation`, o campo `publish(...): Channel` e clique em **Anexar**.

Crie uma fonte de dados *Nenhum* e nomeie-a como *PageDataSource*. Anexe-a ao seu resolvedor.

Adicione a implementação do seu resolvedor usando o seguinte trecho:

```
export function request(ctx) {
  return { payload: ctx.args };
}

export function response(ctx) {
  return ctx.result;
}
```

Certifique-se de criar o resolvedor e salvar as alterações feitas.

## Enviar e assinar mensagens
<a name="send-and-subscribe-to-messages-js"></a>

Para que os clientes recebam mensagens, primeiro eles devem assinar uma caixa de entrada.

No painel **Consultas**, execute a assinatura `SubscribeToData`:

```
subscription SubscribeToData {
    subscribe(name:"channel") {
        name
        data
    }
}
```

 O assinante receberá mensagens sempre que a mutação `publish` for invocada, mas somente quando a mensagem for enviada para a assinatura `channel`. Vamos tentar isso no painel **Consultas**. Enquanto sua assinatura ainda estiver em execução no console, abra outro console e execute a seguinte solicitação no painel **Consultas**:

**nota**  
Estamos usando strings JSON válidas neste exemplo.

```
mutation PublishData {
    publish(data: "{\"msg\": \"hello world!\"}", name: "channel") {
        data
        name
    }
}
```

O resultado será semelhante a este:

```
{
  "data": {
    "publish": {
      "data": "{\"msg\":\"hello world!\"}",
      "name": "channel"
    }
  }
}
```

Acabamos de demonstrar o uso de resolvedores locais, publicando uma mensagem e recebendo-a sem sair do serviço AWS AppSync.