我有以下查询:
query xxx {
getSomething(id: "id") {
field1
field2
}
}
我有什么办法可以获取field1
和field2
的lambda吗?例如,仅查询mysql中的那些字段,而不是获取所有这些字段以供稍后由AppSync丢弃。
我尝试将所有$context
记录在请求映射器VTL文件中,但它们不存在。有任何想法吗?无法做到这一点似乎很愚蠢。我在lambda中唯一得到的是id
参数。
谢谢, 密海
答案 0 :(得分:3)
这可能不是您想听到的答案,但是由于您发现AppSync根本无法使graphql(字段或其他)可用。
我唯一可以给你的两个“选项”是:
getThingFromTableA
和getThingFromTableB
而不只是getThing
){ cheapA, cheapB, expensiveA { expensiveTableAThingA, expensiveTableAThingB }, expensiveB }
),则使用嵌套对象。n.b。并非罕见,例如Apollo doesn't by default either。
答案 1 :(得分:2)
AppSync现在支持获取GraphQL Info object。您可以从selectionSetList变量中获取请求的列的列表。
信息对象的布局:
{
"fieldName": "string",
"parentTypeName": "string",
"variables": { ... },
"selectionSetList": ["string"],
"selectionSetGraphQL": "string"
}
将selectionSetList属性传递给lambda解析器的示例:
{
"version" : "2017-02-28",
"operation": "Invoke",
"payload": {
"arguments": $utils.toJson($ctx.args),
"selectionSetList": $utils.toJson($ctx.info.selectionSetList),
"selectionSetGraphQL": $utils.toJson($ctx.info.selectionSetGraphQL)
}
}
注意::如果您试图传递selectionSelectList,则需要专门引用它(如上例所示)。如果直接用$utils.toJson($ctx.info)
之类的信息对象传递信息对象,则该列表将不可用。
答案 2 :(得分:0)
这些字段位于return
对象中。如果将整个$context.source
对象传递给lambda,则可以访问$context