AWS AppSync Lambda 解析器字段
AWS AppSync Lambda resolver fields
我有以下查询:
query xxx {
getSomething(id: "id") {
field1
field2
}
}
有什么方法可以让我在 lambda 中得到 field1
和 field2
吗?例如,要仅查询 mysql 中的那些字段,而不是让所有这些字段稍后被 AppSync 丢弃。
我尝试在请求映射器 VTL 文件中记录所有 $context
,但它们不存在。有任何想法吗?无法做到这一点似乎很愚蠢。我在 lambda 中得到的唯一东西是 id
参数。
谢谢,
米海
这可能不是您想听到的答案,但正如您所发现的,AppSync 根本无法使 graphql(字段或其他)对您可用。
我能给你的仅有的两个“选项”是:
- 设计您的查询架构,以便您可以更精确地进行提取(例如
getThingFromTableA
和 getThingFromTableB
而不仅仅是 getThing
)
- 使用字段解析器获取昂贵的字段,如果这些都来自同一数据源,则使用嵌套对象(例如
{ cheapA, cheapB, expensiveA { expensiveTableAThingA, expensiveTableAThingB }, expensiveB }
)。
n.b。它并不少见,例如 Apollo doesn't by default either.
这些字段在 $context.source
对象中。如果您将整个 $context
对象传递给您的 lambda,您将能够访问 event.source
中的那些字段
AppSync 现在支持获取 GraphQL Info object. You can get the list of requested columns from the 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)
}
}
注意:如果您尝试传递 selectionSetList,则需要特别引用它(如上例所示)。如果使用 $utils.toJson($ctx.info)
.
之类的内容直接传入信息对象,则该列表将不可用
我有以下查询:
query xxx {
getSomething(id: "id") {
field1
field2
}
}
有什么方法可以让我在 lambda 中得到 field1
和 field2
吗?例如,要仅查询 mysql 中的那些字段,而不是让所有这些字段稍后被 AppSync 丢弃。
我尝试在请求映射器 VTL 文件中记录所有 $context
,但它们不存在。有任何想法吗?无法做到这一点似乎很愚蠢。我在 lambda 中得到的唯一东西是 id
参数。
谢谢, 米海
这可能不是您想听到的答案,但正如您所发现的,AppSync 根本无法使 graphql(字段或其他)对您可用。
我能给你的仅有的两个“选项”是:
- 设计您的查询架构,以便您可以更精确地进行提取(例如
getThingFromTableA
和getThingFromTableB
而不仅仅是getThing
) - 使用字段解析器获取昂贵的字段,如果这些都来自同一数据源,则使用嵌套对象(例如
{ cheapA, cheapB, expensiveA { expensiveTableAThingA, expensiveTableAThingB }, expensiveB }
)。
n.b。它并不少见,例如 Apollo doesn't by default either.
这些字段在 $context.source
对象中。如果您将整个 $context
对象传递给您的 lambda,您将能够访问 event.source
AppSync 现在支持获取 GraphQL Info object. You can get the list of requested columns from the 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)
}
}
注意:如果您尝试传递 selectionSetList,则需要特别引用它(如上例所示)。如果使用 $utils.toJson($ctx.info)
.