Graphql 放大和AppSync不更新来自多个来源的突变数据

Graphql 放大和AppSync不更新来自多个来源的突变数据,graphql,amazon-dynamodb,aws-appsync,amplify,Graphql,Amazon Dynamodb,Aws Appsync,Amplify,我一直在尝试从以下位置与AppSync/GraphQL交互: Lambda-创建(工作)更新(不更改数据) Angular-已收到创建/更新订阅,但对象为null 角度-欺骗更新(不更改数据) AppSync控制台-欺骗更新(不更改数据) 职位: 答复: { "data": { "updateAsset": { "id": "b34d3aa3-fbc4-48b5-acba-xxxxxxxxxx&qu

我一直在尝试从以下位置与AppSync/GraphQL交互:

  • Lambda-创建(工作)更新(不更改数据)
  • Angular-已收到创建/更新订阅,但对象为null
  • 角度-欺骗更新(不更改数据)
  • AppSync控制台-欺骗更新(不更改数据)
职位:

答复:

{
  "data": {
    "updateAsset": {
      "id": "b34d3aa3-fbc4-48b5-acba-xxxxxxxxxx",
      "owner": "51b691a5-d088-4ac0-9f46-xxxxxxxxxxx",
      "description": "Edit Edit from AppSync"
  }
}
每次发送查询时,DynamoDB中的版本都会自动递增。但描述仍与最初设置的相同

模式上的身份验证规则-

@auth(
    rules: [
        { allow: public, provider: apiKey, operations: [create, update, read] },
        { allow: private, provider: userPools, operations: [read, create, update, delete] }
        { allow: groups, groups: ["admin"], operations: [read, create, update, delete] }
    ])
目前在前端,我正在作弊,只是在收到一个空订阅事件后请求数据。但正如我所说,我似乎只能设置任何数据一次,然后我就不能更新它

任何见解都值得赞赏

更新:我甚至决定尝试一个DeleteAsset语句,它不会删除,但会更新版本

我想下一个明智的做法可能是要么建立一个新的环境,要么尝试在一个新的账户中建立这个环境

更新:我有一个工作原理,这与冲突检测/拒绝有关。当我试图通过AppSync direct删除时,我遭到拒绝。从我的角度来看,我只是拿回记录,没有删除


在API上添加额外的身份验证后,我记得它询问了冲突解决方案,我选择了“自动合并”。在

进一步回顾之后,我会记录发生了什么,希望它能帮助其他人

已创建
放大添加api
这让我经历了一个巫师。我使用了现有的Cognito用户池,因为我没有预见到以后需要从S3触发器(Lambda函数)调用此API

现在需要授予从Lambda到AppSync/GraphQL API的
apiKey
或最好是IAM访问权限,我执行了
放大更新API
,并添加了额外的身份验证设置。 这问我如何解决冲突,因为不止一个来源可以编辑数据。因为我只是在条款和条件上点击“同意”,很少阅读手册;我选择了“自动合并”。。听起来不错吧

因此,如果您阅读了精细打印,对表所做的编辑将被拒绝,因为我们现在有了需要通过的_版本(Int),以便AutoMerge可以决定是否接受您的更改。 它还在DynamoDB跟踪版本中创建一个额外的数据存储表。因此,为了正确处理这个策略,您需要扩展您的模式,以包括
\u version
,而不仅仅是
id
或您选择使用的任何主键

另请注意:如果删除,则会将
\u delete
Bool设置为true。这实际上仍然会返回到UI,因此现在您的初始查询需要过滤(或不过滤)已删除的记录

确定我也不需要这个。我不想使用数据存储(至少现在不想),因此:我在API中的transform.conf.json中找到了违规者。在执行GraphQL中的
amplify update api之后,我选择了“为整个api禁用数据存储”,它去掉了ConflictHandler和ConflictDetection


这也刺激了我的Angular 11订阅创建/更新,因为创建的附加值打破了预期的模型。更不用说因无变化而产生的平背为空。

你救了我一天。非常感谢你!
@auth(
    rules: [
        { allow: public, provider: apiKey, operations: [create, update, read] },
        { allow: private, provider: userPools, operations: [read, create, update, delete] }
        { allow: groups, groups: ["admin"], operations: [read, create, update, delete] }
    ])