AWS AppSync - DeleteItem не выполняет шаблон сопоставления ответов - PullRequest
0 голосов
/ 26 февраля 2019

При попытке удалить элемент, используя следующее сопоставление запроса:

{
  "version" : "2017-02-28",
  "operation" : "DeleteItem",
  "key" : {
      "id": { "S" : "$ctx.args.id"},
      "sortKey" : { "S" : "$ctx.args.sortKey"}
  }
}

Если элемент существует, он будет обрабатывать результат через шаблон ответа, однако, когда элемент не существует, шаблон ответа никогда не будетrun.

Шаблон ответа:

#set($ctx.result.status = "SUCCESS")
#set($ctx.result.message = "This was a success!")
$utils.toJson($ctx.result)

Я знаю, что когда элемент не существует в Dynamo, он не будет выполнять никаких действий, но я ожидаю, что он все равно будет обрабатываться через шаблон.

Есть ли что-то, чего мне не хватает, или AppSync не может обработать запрос DeleteItem посредством сопоставления ответов, когда документ не существует?

1 Ответ

0 голосов
/ 26 февраля 2019

Это ожидаемое поведение при исполнении используемой версии шаблона (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#aws-appsync-resolver-mapping-template-version-2018-05-29

Итак, для вашего примера:

{
  "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)
...