Uso de solucionadores locales en AWS AppSync
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.
Creación de la aplicación pub/sub
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
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.