

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.

# Uso de solucionadores locales en AWS AppSync
<a name="tutorial-local-resolvers-js"></a>

AWS AppSync le permite utilizar orígenes de datos compatibles (AWS Lambda, Amazon DynamoDB o Amazon OpenSearch Service) para realizar diversas operaciones. Sin embargo, en determinados casos, es posible que no sea necesario realizar una llamada a un origen de datos admitido.

Aquí es donde un solucionador local es útil. En lugar de llamar a un origen de datos remoto, el solucionador local simplemente **reenvía** los resultados del controlador de solicitudes al controlador de respuestas. La resolución de campo no sale de AWS AppSync.

Los solucionadores locales son útiles en una gran cantidad de situaciones. El caso de uso más habitual consiste en publicar notificaciones sin activar una llamada de origen de datos. Para demostrar este caso de uso, vamos a crear una aplicación pub/sub en la que los usuarios puedan publicar mensajes y suscribirse a ellos. Este ejemplo utiliza *suscripciones*, de modo que si no está familiarizado con las *suscripciones*, puede seguir el tutorial de [datos en tiempo real](aws-appsync-real-time-data.md).

## Creación de la aplicación pub/sub
<a name="create-the-pub-sub-application-js"></a>

Primero, cree una API de GraphQL vacía con la opción **Diseñar desde cero** y configure los detalles opcionales al crear la API de GraphQL.

En nuestra aplicación pub/sub, los clientes pueden suscribirse y publicar mensajes. Cada mensaje publicado incluye un nombre y datos. Añada lo siguiente al 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"])
}
```

A continuación, asociaremos un solucionador al campo `Mutation.publish`. En el panel **Solucionadores** situado junto al panel **Esquema**, busque el tipo `Mutation`, después el campo `publish(...): Channel` y, a continuación, haga clic en **Asociar**.

Cree un origen de datos de tipo *Ninguno* y asígnele el nombre *PageDataSource*. Asócielo al solucionador.

Añada su implementación del solucionador mediante el siguiente fragmento de código:

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

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

Asegúrese de crear el solucionador y guardar los cambios realizados.

## Envíe y suscríbase a mensajes
<a name="send-and-subscribe-to-messages-js"></a>

Para que los clientes reciban mensajes, primero deben estar suscritos a una bandeja de entrada.

En el panel **Consultas**, ejecute la suscripción `SubscribeToData`:

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

 El suscriptor recibirá mensajes siempre que se invoque la mutación `publish`, pero solo cuando el mensaje se envíe a la suscripción `channel`. Probemos esto en el panel **Consultas**. Mientras la suscripción siga ejecutándose en la consola, abra otra consola y ejecute la siguiente solicitud en el panel **Consultas**:

**nota**  
En este ejemplo, utilizamos cadenas JSON válidas.

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

El resultado tendrá este aspecto:

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

Acabamos de demostrar el uso de solucionadores locales publicando un mensaje y recibiéndolo sin salir del servicio de AWS AppSync.