Для чего используется входной параметр $ condition в мутации GraphQL, сгенерированной AWS Amplify CLI?

#graphql #aws-appsync #graphql-mutation #graphql-codegen

#graphql #aws-appsync #graphql-мутация #graphql-codegen

Вопрос:

Я сгенерировал простой GraphQL API на AWS AppSync (используя CLI) из этой модели:

 type WalletProperty @model {
    id: ID!
    title: String!
}
  

Это привело к появлению мутаций CreateWalletProperty, UpdateWalletProperty и DeleteWalletProperty, похожих на это:

   mutation CreateWalletProperty(
    $input: CreateWalletPropertyInput!
    $condition: ModelWalletPropertyConditionInput    <<<<<<<<<<<<  what is this for?
  ) {
    createWalletProperty(input: $input, condition: $condition) {
      id
      title
      createdAt
      updatedAt
    }
  }
  

и схема для условия является:

 input ModelWalletPropertyConditionInput {
  title: ModelStringInput
  and: [ModelWalletPropertyConditionInput]
  or: [ModelWalletPropertyConditionInput]
  not: ModelWalletPropertyConditionInput
}
  

Учитывая, что мне всегда приходится вводить обязательный ввод $, для чего нужен параметр $ condition?

Комментарии:

1. не помечено остроумие ! , тогда не обязательно / не требуется … необязательный параметр для фильтрации затронутых строк / элементов

2. @xadm, спасибо. Я только что протестировал его, и, похоже, он применяется вместе с входным параметром. Учитывая, что $input уже является обязательным, я не могу придумать вариант использования, в котором это действительно имеет смысл или может быть применено?

3. не для создания, а для обновления …

Ответ №1:

В моем случае, приведенном выше, GraphQL поддерживается таблицей DynamoDB;

За кулисами операции GraphQL преобразуются в операции PutItem, updateItem и DeleteItem DynamoDB.

Для этих операций манипулирования данными DynamoDB API позволяет вам указать выражение условия, чтобы определить, какие элементы следует изменить. Если выражение условия принимает значение true, операция завершается успешно; в противном случае операция завершается неудачей.

Вы можете прочитать больше о вариантах использования для каждого из этих условий в руководстве по разработке AWS Condition Expressions DynamoDB

На уровне мутации GraphQL, только если запись удовлетворяет условию, мутация будет продолжена. В противном случае мутация недопустима и возвращается исключение ConditionalCheckFailedException:

 "errors": [
    {
      "path": [
        "deleteWalletProperty"
      ],
      "data": null,
      "errorType": "DynamoDB:ConditionalCheckFailedException",
      "errorInfo": null,
      "locations": [
        {
          "line": 12,
          "column": 3,
          "sourceName": null
        }
      ],
      "message": "The conditional request failed (Service: DynamoDb, Status Code: 400, Request ID: E3PR9OM6M5J1QBHKNT8E4SM1DJVV4KQNSO5AEMVJF66Q9ASUAAJG, Extended Request ID: null)"
    }
  ]