Проблема авторизации подписки AppSync - PullRequest
0 голосов
/ 03 сентября 2018

Привет, я новичок в 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, и я сгенерировал шаблон отображения. Спасибо

1 Ответ

0 голосов
/ 04 сентября 2018

Спасибо за информацию.

Во-первых, вам вообще не нужен распознаватель в поле подписки. Единственная причина, по которой вам нужно добавить распознаватель в поле подписки, - это выполнять проверки авторизации на основе идентификатора вызывающего абонента во время соединения. Вам не нужно добавлять распознаватель, чтобы подписки работали. Чтобы исправить это, удалите распознаватель из поля подписки (Subscription.newPost).

Чтобы решить ваш вариант использования и сделать так, чтобы вы подписывались только на посты с определенным идентификатором, измените поле подписки newPost на newPost(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) 
} 
...