У меня такой запрос:
query xxx {
getSomething(id: "id") {
field1
field2
}
}
Есть ли способ получить field1 и field2 в лямбде? Например, чтобы запросить только эти поля в mysql, а не получить их все, чтобы AppSync позже их отбросил.
Я попытался записать все $context в файл VTL сопоставителя запросов, но их там нет. Любые идеи? Кажется глупым не иметь возможности этого сделать. Единственное, что я получаю в лямбде, - это аргумент id.
Спасибо, Михай
Я говорю о запросе, а не об ответе. Шаблон ответа предназначен для изменения ответа, меня интересует получение полей в запросе.





Возможно, это не тот ответ, который вы хотели бы услышать, но, как вы заметили, AppSync просто не предоставляет вам доступ к graphql (полям и т. д.).
Единственные два "варианта", которые я могу вам предложить:
getThingFromTableA и getThingFromTableB, а не только getThing){ cheapA, cheapB, expensiveA { expensiveTableAThingA, expensiveTableAThingB }, expensiveB }).n.b. это не такая уж редкость, например Аполлон по умолчанию тоже этого не делает..
Да, я понял. Подумал об использовании преобразователя полей, но это означает, что другая лямбда, даже если она такая же, загорелась еще одна лямбда. Я хотел сделать это с помощью только одной функции. Спасибо
Звучит как полезная функция, хотя я предполагаю, что, поскольку поля могут быть вложенными, иметь аргументы и тому подобное, это довольно сложный настраиваемый объект для выражения.
Этот упущение со стороны Appsync весьма разочаровывает. Я могу представить себе, например, вычисляемые скалярные поля, которые я бы не хотел вычислять, если бы они не запрашивались. Использование преобразователей уровня поля для этих полей означает дополнительные циклы обращения к источнику данных (например, базе данных) вместе с сериализацией исходного / родительского результата и последующей десериализацией в преобразователях подзапросов. Было бы неплохо иметь доступ ко всему дереву запроса под данным запросом или преобразователем полей, чтобы лямбда имела возможность оптимизировать доступ к БД / вычисление результатов. Например, лациния делает
Эти поля находятся в объекте $context.source. Если вы передадите весь объект $context своей лямбде, вы сможете получить доступ к этим полям в event.source.
Пробовал, но нет. Есть только аргументы
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).
как выглядит ваш шаблон отображения ответов. Вы тоже видели это руководство? docs.aws.amazon.com/appsync/latest/devguide/…