Логика сервера мутаций AppSync GraphQL в резольверах - PullRequest
0 голосов
/ 17 октября 2018

У меня возникли проблемы с поиском хороших источников для выяснения того, как правильно добавить проверку на стороне сервера в мои мутации AppSync GraphQL.

По сути, я использовал панель инструментов AWS для определения своей схемы AppSync, поэтому у меня были таблицы DynamoDBсоздан для меня, плюс несколько базовых преобразователей, настроенных для данных.

Нет, мне нужно добиться следующего:

  1. У меня есть игрок с inventory и gold
  2. Игрок вызывает purchaseItem мутацию с item_id
  3. Как только эта мутация вызвана, мне нужно выполнить несколько проверок в резольвере, т.е. проверить, существует ли item_id в таблице «Items» связанной DynamoDB,проверьте, достаточно ли у игрока золота, снова в таблице «Игроки» соответствующего DynamoDB, если это так, запишите в таблицу Players DynamoDB, добавив предмет в свой инвентарь и новое вычтенное количество золота.

Я считаю,Наиболее эффективный способ добиться этого, который приведет к меньшим затратам и задержке, - это использовать язык шаблонов Apache Velocity для AppSync?

Было бы здоровоНапример, это показывает, как запрашивать / записывать в DynamoDB, обрабатывать ошибки и правильно разрешать мутации.

Ответы [ 2 ]

0 голосов
/ 16 августа 2019

На что вы хотите взглянуть, это на конвейерные резолверы: https://docs.aws.amazon.com/appsync/latest/devguide/pipeline-resolvers.html

Да, для этого требуется VTL (шаблон скорости)

, который позволяет выполнять чтение, запись, проверку,и все, что вы хотели бы использовать VTL.В основном вы объединяете входные и выходные данные в следующий шаблон и выполняете требуемый процесс.

Вот сообщение Medium, показывающее, как это сделать:

https://medium.com/@dabit3/intro-to-aws-appsync-pipeline-functions-3df87ceddac1

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

0 голосов
/ 20 октября 2018

Для записи в DynamoDB с VTL используйте следующий учебник

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

{
"version" : "2017-02-28",
"operation" : "PutItem",
"key" : {
    "noteId" : { "S" : "${context.arguments.noteId}" },
    "userId" : { "S" : "${context.identity.sub}" }
},
"attributeValues" : {
    "title" : { "S" : "${context.arguments.title}" },
    "content": { "S" : "${context.arguments.content}" }
}
}

Для запроса:

{ "version" : "2017-02-28",
"operation" : "Query",
"query" : {
    ## Provide a query expression. **
    "expression": "userId = :userId",
    "expressionValues" : {
        ":userId" : {
            "S" : "${context.identity.sub}"
        }
    }
},
## Add 'limit' and 'nextToken' arguments to this field in your schema to implement pagination. **
"limit": #if(${context.arguments.limit}) ${context.arguments.limit} #else 20 #end,
"nextToken": #if(${context.arguments.nextToken}) "${context.arguments.nextToken}" #else null #end
 }

Это основано на шаблоне Paginated Query.

...