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

Я создал простой 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
}

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

1 ответ

Решение

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

За кулисами операции GraphQL переводятся в операции DynamoDB PutItem, UpdateItem и DeleteItem.

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

Дополнительные сведения о вариантах использования для каждого из этих условий можно найти в руководстве разработчика 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)"
    }
  ]
Другие вопросы по тегам