访问解析器映射模板中的请求字段

时间:2019-07-05 09:31:20

标签: graphql aws-appsync

例如,当我们请求GraphQL查询时,

query GetPost {
  singlePost(id: 123) {
    id
    title
  }
}

,我们已经在AWS AppSync(请求映射模板)中配置了Lambda解析器,

{
        "version" : "2017-02-28",
        "operation" : "Invoke",
        "payload": {
          "resolve": "singlePost",
          "query": $utils.toJson($context.arguments)
        }
}

允许我们定义传递给lambda处理程序的事件对象。

对于上述示例,我们的Lambda处理程序将通过事件event进行调用,其中event.payload.query.id == 123等。

根据the docs $context对象包括,

{
   "arguments" : { ... },
   "source" : { ... },
   "result" : { ... },
   "identity" : { ... },
   "request" : { ... }
}

{code}

也就是说,文档中没有提及我可以在哪里访问GraphQL查询的请求字段

对于前一个示例,这些字段将对应于["id", "title"]

在我需要解析一些嵌套属性的情况下,例如通过昂贵的操作,例如对象的标签阵列SQL连接,如果我可以检查此嵌套属性是否真正被请求,那将是有益的。

此问题与How to get requested fields inside GraphQL resolver?有关,但是与GraphQL实现graphql-tools和AppSync不同。

3 个答案:

答案 0 :(得分:3)

文档已更新,AWS在上下文中添加了一个新字段“ info”,您可以访问以下字段名称:

{
    "version" : "2017-02-28",
    "operation" : "Invoke",
    "payload": {
      "resolve": "$ctx.info.fieldName",
      "query": $utils.toJson($context.arguments)
    }
}

您可以在此处参考文档:

https://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference.html#aws-appsync-resolver-context-reference-info

答案 1 :(得分:1)

不幸的是,这实际上不是AppSync今天支持的。但是,这是我们从其他客户那里听到的要求,我将这篇文章用作+1,以使其在以后的版本中优先处理。

答案 2 :(得分:0)

现在有一个 $context.info.selectionSetList 字段,其中包含请求的字段名称。 official docs 提供了一个示例并解释了一些有关接口和别名的特殊用例。