AWS AppSync - DeleteItem не выполняет шаблон сопоставления ответов
При попытке удалить элемент, используя следующее сопоставление запроса:
{
"version" : "2017-02-28",
"operation" : "DeleteItem",
"key" : {
"id": { "S" : "$ctx.args.id"},
"sortKey" : { "S" : "$ctx.args.sortKey"}
}
}
Если элемент существует, он будет обрабатывать результат через шаблон ответа, однако, когда элемент не существует, шаблон ответа никогда не запускается.
Шаблон ответа:
#set($ctx.result.status = "SUCCESS")
#set($ctx.result.message = "This was a success!")
$utils.toJson($ctx.result)
Я знаю, что когда элемент не существует в Динамо, он не будет выполнять никаких действий, но я ожидаю, что он все равно будет обрабатываться через шаблон.
Есть ли что-то, чего мне не хватает, или AppSync не может обработать запрос DeleteItem посредством сопоставления ответов, когда документ не существует?
1 ответ
Это ожидаемое поведение при исполнении используемой версии шаблона (2017-02-28
).
Вы можете переключить версию шаблона отображения запроса на 2018-05-29
и ваш шаблон отображения ответов будет выполнен со следующими характеристиками:
Если результат вызова источника данных
null
, шаблон отображения ответа выполняется.Если вызов источника данных приводит к ошибке, теперь вы должны обработать эту ошибку. Ошибка вызова доступна с помощью
$ctx.error
,Оцененный результат шаблона отображения ответа всегда будет помещен в блок данных ответа GraphQL. Вы также можете поднять или добавить ошибку, используя
$util.error()
а также$util.appendError()
соответственно.
Дополнительная информация https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-changelog.html
Итак, для вашего примера:
{
"version" : "2018-05-29", ## Note the new version
"operation" : "DeleteItem",
"key" : {
"id": { "S" : "$ctx.args.id"},
"sortKey" : { "S" : "$ctx.args.sortKey"}
}
}
и шаблон ответа
#if ( $ctx.error )
$util.error($ctx.error.message, $ctx.error.type)
#end
#set($ctx.result.status = "SUCCESS")
#set($ctx.result.message = "This was a success!")
$utils.toJson($ctx.result)