AppSync 订阅授权问题

AppSync subscription authorization problem

大家好,我是 aws AppSync 和 GraphQl 的新手。我有订阅问题。我想在新 post 被 posted

时实时收到通知

这是我的 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 table 中收到提供的关键元素与架构不匹配的错误 table pk 是 id,我生成了映射模板。 谢谢

感谢您提供信息。

首先,您的订阅字段中根本不需要解析器。您需要向订阅字段添加解析器的唯一原因是在连接时根据调用身份进行授权检查。您无需添加解析器即可进行订阅。要修复它,请从订阅 (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) 
}