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)
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:
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.