es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mapeo de respuesta del resolvedor de consulta de esquema de AWS AppSync.

Después de realizar una mutación de creación, espero obtener todo el objeto de respuesta como se muestra en https://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference.html

Pero todo lo que logro obtener es el id generado automáticamente (parte del esquema) que es de tipo uuid.

A continuación se muestra mi esquema y asignación de respuesta:

Esquema: –

type Apple{
    id: ID!
    type: String
    price: Float
}

Mutación utilizada: –

mutation MyMutation {

updateApple(input: {id: "0a9aa23f-3017-4b67-8dcd-354ef8f609d8", type: "green", price: 10.5}) {
    id
  }
}

type Mutation {
updateApple(input: UpdateAppleInput!): Apple
}

input UpdateAppleInput {
id: ID!
type: String
price: Float!
}



Plantilla de asignación de respuesta que devuelve solo el id Levanta un error de campo de GraphQL en caso de un error de invocación del origen de datos if($ctx.error) $utils.error($ctx.error.message, $ctx.error.type) end $utils.toJson($utils.rds.toJsonObject($ctx.result)[1][0]) Respuesta de ejemplo a continuación (Espero el objeto "Apple" actualizado):

{
“data”: {
“updateApple”: {
“id”: “0b8bb23f-5613-4b67-8dcd-354ef8f617r5”
}
}
}
“`

Estoy consultando el ejemplo dado en: https://docs.aws.amazon.com/appsync/latest/devguide/tutorial-rds-resolvers.html#run-queries
Y específicamente necesito el objeto Apple completo como respuesta cuando realizo mutaciones de creación o actualización.

EDIT 1: La siguiente plantilla de respuesta funciona bien con una consulta. ¿Por qué no funciona con una mutación? :

$utils.toJson($utils.rds.toJsonObject($ctx.result)

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que la plantilla de mapeo de respuesta que estás utilizando actualmente solo devuelve el campo “id” del objeto Apple actualizado. Para obtener el objeto completo actualizado como respuesta, debes modificar tu plantilla de mapeo de respuesta en consecuencia.

    Una posible forma de hacer esto es utilizando el objeto “ctx.stash” proporcionado por AWS AppSync. Este objeto “stash” se puede utilizar para almacenar datos entre funciones del pipeline o resolvers del pipeline. En tu caso, puedes almacenar el objeto Apple actualizado en el objeto “stash” y luego devolverlo como respuesta.

    Aquí tienes un ejemplo de plantilla de mapeo de respuesta que debería funcionar para tu mutación de actualización:

    # Generar un error de campo GraphQL en caso de un error en la invocación del datasource
    # if($ctx.error)
    #     $utils.error($ctx.error.message, $ctx.error.type)
    # end
    
    # Almacenar el objeto Apple actualizado en el objeto stash
    $util.qr($ctx.stash.put("updatedApple", $utils.rds.toJsonObject($ctx.result)[1][0]))
    
    # Devolver el objeto Apple completo actualizado como respuesta
    $utils.toJson($ctx.stash.get("updatedApple"))
    

    La plantilla anterior primero almacena el objeto Apple actualizado en el objeto “stash” utilizando la función “ctx.stash.put”. Luego, devuelve el objeto completo actualizado como respuesta recuperándolo del objeto “stash” utilizando la función “ctx.stash.get”.

    Ten en cuenta que es posible que debas ajustar la plantilla de mapeo de respuesta según el formato de los datos devueltos por tu fuente de datos RDS. La plantilla anterior asume que el objeto Apple actualizado se devuelve como el segundo elemento en la segunda fila de la respuesta de la fuente de datos.

Comments are closed.