Graphql 放大和AppSync不更新来自多个来源的突变数据
我一直在尝试从以下位置与AppSync/GraphQL交互: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
- 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] }
])