Для чего нужен входной параметр $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)"
}
]