#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)"
}
]