嗨,我是AWS AppSync和GraphQl的新手。我的订阅有问题。我想在发布新帖子时实时获得通知
这是我的graphql模式``
type Mutation {
addPost(
id: ID!,
author: String!,
title: String,
contennt: String,
url: String
): Post!
updatePost(
id: ID!,
author: String!,
title: String,
content: String,
ups: Int!
): Post!
deletePost(id: ID): Post!
}
type Post {
id: ID!
author: String!
title: String!
url: String
content: String
ups: Int!
}
type Query {
allPost: [Post]
getPost(id: ID!): Post
}
type Subscription {
newPost: Post
@aws_subscribe(mutations: ["addPost"])
}
schema {
query: Query
mutation: Mutation
subscription: Subscription
}
``
这是我对潜艇的查询:
subscription NewPostSub{
newPost{
__typename
title
content
author
url
}
}
我收到错误消息,提示提供的关键元素与模式不匹配,在dynamodb表中pk为id,我生成了映射模板。 谢谢
答案 0 :(得分:0)
感谢您的信息。
首先,您的订阅字段上根本不需要解析器。您需要在订阅字段中添加解析程序的唯一原因是根据连接时的呼叫身份进行授权检查。您无需添加解析程序即可使订阅生效。要解决此问题,请从订阅(Subscription.newPost
)字段中删除解析器。
要解决您的用例并使其成为仅使用特定ID的帖子,请将您的newPost
订阅字段更改为newPost(id: ID!)
。当您进行订阅查询时,提供一个id
,该订阅将仅获得具有该ID的订阅突变所返回的推送信息。这是AppSync中的一项功能,当您将参数添加到订阅字段时,参数相等性检查会自动进行。
其次,将其粘贴到注释中,当前您具有Mutation.addPost
的请求映射模板:
{
"version" : "2017-02-28",
"operation" : "PutItem",
"key" : {
$util.dynamodb.toDynamoDBJson($ctx.args.id)
"id": $util.dynamodb.toDynamoDBJson($util.autoId()),
},
"attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args)
}
有一个错字,应该是这样:
{
"version" : "2017-02-28",
"operation" : "PutItem",
"key" : {
"id": $util.dynamodb.toDynamoDBJson($util.autoId()),
},
"attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args)
}