Поля распознавателя AWS AppSync Lambda

У меня такой запрос:

query xxx {
   getSomething(id: "id") {
      field1
      field2
   }
}

Есть ли способ получить field1 и field2 в лямбде? Например, чтобы запросить только эти поля в mysql, а не получить их все, чтобы AppSync позже их отбросил.

Я попытался записать все $context в файл VTL сопоставителя запросов, но их там нет. Любые идеи? Кажется глупым не иметь возможности этого сделать. Единственное, что я получаю в лямбде, - это аргумент id.

Спасибо, Михай

как выглядит ваш шаблон отображения ответов. Вы тоже видели это руководство? docs.aws.amazon.com/appsync/latest/devguide/…

Vasileios Lekakis 14.11.2018 05:59

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

Mihai Blaga 14.11.2018 11:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
2
1 520
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Возможно, это не тот ответ, который вы хотели бы услышать, но, как вы заметили, AppSync просто не предоставляет вам доступ к graphql (полям и т. д.).

Единственные два "варианта", которые я могу вам предложить:

  • Разработайте схему запроса так, чтобы вы могли быть более точными при извлечении (например, getThingFromTableA и getThingFromTableB, а не только getThing)
  • Используйте преобразователи полей для дорогостоящего получения полей и используйте вложенные объекты, если они все из одного источника данных (например, { cheapA, cheapB, expensiveA { expensiveTableAThingA, expensiveTableAThingB }, expensiveB }).

n.b. это не такая уж редкость, например Аполлон по умолчанию тоже этого не делает..

Да, я понял. Подумал об использовании преобразователя полей, но это означает, что другая лямбда, даже если она такая же, загорелась еще одна лямбда. Я хотел сделать это с помощью только одной функции. Спасибо

Mihai Blaga 14.11.2018 11:32

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

thomasmichaelwallace 14.11.2018 11:53

Этот упущение со стороны Appsync весьма разочаровывает. Я могу представить себе, например, вычисляемые скалярные поля, которые я бы не хотел вычислять, если бы они не запрашивались. Использование преобразователей уровня поля для этих полей означает дополнительные циклы обращения к источнику данных (например, базе данных) вместе с сериализацией исходного / родительского результата и последующей десериализацией в преобразователях подзапросов. Было бы неплохо иметь доступ ко всему дереву запроса под данным запросом или преобразователем полей, чтобы лямбда имела возможность оптимизировать доступ к БД / вычисление результатов. Например, лациния делает

solussd 27.08.2019 06:00

Эти поля находятся в объекте $context.source. Если вы передадите весь объект $context своей лямбде, вы сможете получить доступ к этим полям в event.source.

Пробовал, но нет. Есть только аргументы

Mihai Blaga 26.11.2018 12:54

AppSync теперь поддерживает получение Информационный объект GraphQL. Вы можете получить список запрашиваемых столбцов из переменной selectionSetList.

Макет объекта Info:

{
    "fieldName": "string",
    "parentTypeName": "string",
    "variables": { ... },
    "selectionSetList": ["string"],
    "selectionSetGraphQL": "string"
}

Пример передачи свойства selectionSetList лямбда-преобразователю:

{
    "version" : "2017-02-28",
    "operation": "Invoke",
    "payload": {
        "arguments": $utils.toJson($ctx.args),
        "selectionSetList": $utils.toJson($ctx.info.selectionSetList),
        "selectionSetGraphQL": $utils.toJson($ctx.info.selectionSetGraphQL)
    }
}

Примечание: Если вы пытаетесь передать selectionSetList, вам нужно конкретно указать на него (как в примере выше). Список будет недоступен, если информационный объект передается напрямую с чем-то вроде $utils.toJson($ctx.info).

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