Как создать дочерние распознаватели GraphQL с помощью Lambda

#aws-lambda #graphql #aws-appsync

Вопрос:

Я пытаюсь создать мутацию, которая вызывает дочерний распознаватель в дополнение к родительскому распознавателю, если отправляется необязательный параметр.

Я использую AWS AppSync для отправки своих запросов в Lambda. AppSync создает и отправляет AppSyncEvent в мой распознаватель файл, который выглядит примерно так:

 {
"info": {
        "parentTypeName": "Mutation",
        "selectionSetList": [
            ...
        ],
        "selectionSetGraphQL": "...",
        "fieldName": "updateUser",
        "variables": {}
    }
}
 

Это событие передается в мою лямбда-функцию, где на основе fieldName и parentTypeName я вызываю свою updateUser функцию.

У меня есть схема ниже

 schema {
  query: Query
  mutation: Mutation
}

type Query {
  getUser(id: ID!): User
}

type Mutation {
  updateUser(name: String, email: String, bookRead: BookReadInput): User
}

type User {
   name: String
   email: String
   booksRead: [Book]
}

type Book {
   title: String
   author: String
}

type BookReadInput {
   title: String
   author: String
}
 

Я хочу, чтобы, если мутация будет передана bookRead , он знал, что нужно вызвать дочерний распознаватель, называемый addBook дополнительно для обычного updateUser распознавателя.

Я видел различные статьи о реализации дочерних распознавателей, но я не могу понять, как они могут работать с лямбда и как работают мои распознаватели.

Ответ №1:

Лямбда-код может проверить список выбора и решить, что делать с полями ввода BookReadInput. Видишь https://aws.amazon.com/blogs/mobile/appsync-and-the-graphql-info-object/

Вы также можете использовать распознаватели конвейеров, чтобы сначала обновить пользователя, а затем добавить книгу.

Я не думаю, что есть способ автоматизировать это. Вам нужно настроить его, так или иначе.

Комментарии:

1. SelectionSetList не будет работать для мутации, если только вы не потребуете, чтобы при обновлении книг вам всегда приходилось возвращать книги. Если его нужно настроить, я думаю, я могу просто проверить event.arguments, чтобы узнать, была ли отправлена книга.