Доступ к запрошенным полям в шаблоне сопоставления преобразователя

Например, когда мы запрашиваем запрос GraphQL,

query GetPost {
  singlePost(id: 123) {
    id
    title
  }
}

и мы настроили преобразователь Lambda в AWS AppSync, шаблон сопоставления запросов,

{
    "version": "2017-02-28",
    "operation": "Invoke",
    "payload": {
        "resolve": "singlePost",
        "query": $utils.toJson($context.arguments)
    }
}

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

В приведенном выше примере наш обработчик Lambda будет вызываться с событием event, где event.payload.query.id == 123 или тому подобное.

Согласно документы объект $context включает в себя:

{
    "arguments" : { ... },
    "source" : { ... },
    "result" : { ... },
    "identity" : { ... },
    "request" : { ... }
}

Тем не менее, в документации не упоминается, где я могу получить доступ к запрошенным полям запроса GraphQL..

В первом примере эти поля будут соответствовать ["id", "title"].

В случае, если мне нужно разрешить некоторые вложенные свойства, например. массив тегов объекта через дорогостоящую операцию, например. соединение SQL, было бы полезно, если бы я мог проверить, действительно ли запрошено это вложенное свойство.

Этот вопрос относится к Как получить запрошенные поля внутри преобразователя GraphQL?, однако он отличается от реализации GraphQL graphql-tools vs AppSync.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
6
0
1 032
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

На самом деле это не то, что AppSync сегодня поддерживает, к сожалению. Однако это запрос, который мы услышали от других клиентов, и я буду использовать этот пост как +1, чтобы определить его приоритет для будущего выпуска.

Есть ли обновление по этой функции? Это то, что ЗНАЧИТЕЛЬНО уменьшит раздувание шаблонов сопоставления в нашем приложении.. я не видел никаких текущих разговоров об этой функции.

LMulvey 06.09.2019 17:41

Документ был обновлен, AWS добавила новое поле info в контекст, вы можете получить доступ к имени поля, как показано ниже:

{
    "version" : "2017-02-28",
    "operation" : "Invoke",
    "payload": {
      "resolve": "$ctx.info.fieldName",
      "query": $utils.toJson($context.arguments)
    }
}

Вы можете обратиться к документу здесь:

https://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference.html#aws-appsync-resolver-context-reference-info

info.fieldName — это поле в parent, которое запрашивается для разрешения этого преобразователя, а не массив имен полей, запрашиваемых в конечном объекте, который запрашивает исходный вопрос.
CodingWithSpike 14.12.2020 21:33

Теперь есть поле $context.info.selectionSetList, которое включает запрошенные имена полей. официальные документы предоставляет пример и объясняет некоторые специальные варианты использования интерфейсов и псевдонимов.

Обратите внимание, что при использовании $utils.toJson() в context.info значения, возвращаемые selectionSetList, по умолчанию не сериализуются. См. также github.com/aws-amplify/amplify-cli/issues/4869

Yves M. 28.01.2022 16:01

Другие вопросы по теме