Graphql AppSync订阅授权问题

Graphql AppSync订阅授权问题,graphql,aws-appsync,graphql-subscriptions,Graphql,Aws Appsync,Graphql Subscriptions,嗨,我是aws AppSync和GraphQl的新手。我在订阅方面有问题。我想在发布新帖子时得到实时通知 这是我的graphql模式`` type Mutation { addPost( id: ID!, author: String!, title: String, contennt: String, url: String ): Post! updatePost( id:

嗨,我是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
}
``
以下是我对SUB的查询:

subscription NewPostSub{
  newPost{
    __typename
    title
    content
    author
    url
  }
}
我得到一个错误,提供的关键元素与模式不匹配,在dynamodb表中,pk是id,我生成了映射模板。 谢谢你

谢谢你提供的信息

首先,在订阅字段上根本不需要解析程序。您需要将解析程序添加到订阅字段的唯一原因是在连接时基于调用标识执行授权检查。您无需添加解析程序即可使订阅生效。要修复此问题,请从subscription.newPost字段中删除冲突解决程序

要解决您的用例并使其仅订阅具有特定id的帖子,请将newPost订阅字段更改为newPostid:id!。当您进行订阅查询时,请提供一个id,该订阅将仅获取由具有该id的订阅服务器返回的推送帖子。这是AppSync中的一项功能,当您将参数添加到订阅字段时,参数相等性检查会自动进行

第二,当您将其粘贴到注释中时,您当前拥有用于Mutation.addPost的请求映射模板:

有一个打字错误,应该是这样的:

{ 
  "version" : "2017-02-28", 
  "operation" : "PutItem", 
  "key" : { 
    "id": $util.dynamodb.toDynamoDBJson($util.autoId()), 
  }, 
  "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) 
} 

我需要更多的信息来帮助。请您提供突变的请求和响应映射模板。addPost突变。如果您在Subscription.newPost字段上有解析器,也请提供这些解析器。订阅查询不应该关心您的DynamoDB模式,所以我怀疑这个错误实际上是由变异引起的。如果您有更多信息,请告诉我。这里是addPost突变的请求:{version:2017-02-28,operation:PutItem,key:{$util.dynamodb.toDynamoDBJson$ctx.args.id:$util.dynamodb.toDynamoDBJson$util.autoId,},attributeValue:$util.dynamodb.toMapValuesJson$ctx.args}这里是响应:$util.toJson$ctx.result这里是订阅:{version:2017-02-28,operation:GetItem,key:{id:$util.dynamodb.toDynamoDBJson$ctx.args.id,}}}}这里是响应:$util.toJson$ctx.result谢谢@mparisgree!你能为未来的观众标记这个问题的答案吗。
{ 
  "version" : "2017-02-28", 
  "operation" : "PutItem", 
  "key" : { 
    "id": $util.dynamodb.toDynamoDBJson($util.autoId()), 
  }, 
  "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) 
}