AWS AppSync Lambda 解析器字段

AWS AppSync Lambda resolver fields

我有以下查询:

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

有什么方法可以让我在 lambda 中得到 field1field2 吗?例如,要仅查询 mysql 中的那些字段,而不是让所有这些字段稍后被 AppSync 丢弃。

我尝试在请求映射器 VTL 文件中记录所有 $context,但它们不存在。有任何想法吗?无法做到这一点似乎很愚蠢。我在 lambda 中得到的唯一东西是 id 参数。

谢谢, 米海

这可能不是您想听到的答案,但正如您所发现的,AppSync 根本无法使 graphql(字段或其他)对您可用。

我能给你的仅有的两个“选项”是:

  • 设计您的查询架构,以便您可以更精确地进行提取(例如 getThingFromTableAgetThingFromTableB 而不仅仅是 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).

之类的内容直接传入信息对象,则该列表将不可用