Solución de problemas y errores comunes en AWS AppSync
En esta sección se explican algunos errores comunes y cómo solucionarlos.
Mapeo de clave de DynamoDB incorrecto
Si una operación de GraphQL devuelve el siguiente mensaje de error, puede deberse a que la estructura de la plantilla de mapeo de solicitudes no coincide con la estructura de clave de Amazon DynamoDB:
The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code
Por ejemplo, si la tabla de DynamoDB tiene una clave hash llamada "id"
y la plantilla dice "PostID"
, como en el ejemplo siguiente, se produce el error anterior, ya que "id"
no coincide con "PostID"
.
{ "version" : "2017-02-28", "operation" : "GetItem", "key" : { "PostID" : $util.dynamodb.toDynamoDBJson($ctx.args.id) } }
Falta el solucionador
Si ejecuta una operación de GraphQL, por ejemplo una consulta, y obtiene una respuesta nula, puede ser debido a que no tiene un solucionador configurado.
Por ejemplo, si importa un esquema que define un campo getCustomer(userId:
ID!):
y no ha configurado un solucionador para este campo, cuando se ejecuta una consulta, por ejemplo getCustomer(userId:"ID123"){...}
, recibirá una respuesta como la siguiente:
{ "data": { "getCustomer": null } }
Errores en la plantilla de mapeo
Si la plantilla de mapeo no está configurada correctamente, recibirá una respuesta de GraphQL cuyo valor de errorType
será MappingTemplate
. El campo message
debe indicar dónde se encuentra el problema de la plantilla de mapeo.
Por ejemplo, si la plantilla de mapeo de solicitud no tiene el campo operation
o si el nombre del campo operation
es incorrecto, obtendrá una respuesta similar a la siguiente:
{ "data": { "searchPosts": null }, "errors": [ { "path": [ "searchPosts" ], "errorType": "MappingTemplate", "locations": [ { "line": 2, "column": 3 } ], "message": "Value for field '$[operation]' not found." } ] }
Tipos de retorno incorrectos
El tipo de retorno del origen de datos debe coincidir con el tipo definido para un objeto en el esquema; de lo contrario, es posible que se produzca un error de GraphQL como este:
"errors": [ { "path": [ "posts" ], "locations": null, "message": "Can't resolve value (/posts) : type mismatch error, expected type LIST, got OBJECT" } ]
Por ejemplo, esto podría ocurrir con la siguiente definición de consulta:
type Query { posts: [Post] }
que espera una lista de objetos [Posts]
. Por ejemplo, si tuviera una función Lambda en Node.JS con algo parecido a lo siguiente:
const result = { data: data.Items.map(item => { return item ; }) }; callback(err, result);
Se generaría un error, ya que result
es un objeto. Tendría que cambiar la devolución de llamada a result.data
o modificar el esquema para que no devuelva una lista.
Procesamiento de solicitudes no válidas
Si AWS AppSync no es capaz de procesar y enviar una solicitud (debido a datos incorrectos, como una sintaxis no válida) al solucionador de campos, la carga útil de la respuesta devolverá los datos de los campos con valores establecidos en null
, así como cualquier otro error relevante.