【问题标题】:AWS AppSync Lambda Resolver Get Query Return TypeAWS AppSync Lambda 解析器获取查询返回类型
【发布时间】:2021-04-21 15:40:30
【问题描述】:

在 AWS AppSync 中,我有一个 Lambda 解析器。解析器处理多个查询,例如getUser、getUsers、getClient 等。Lambda 函数如何获取 AppSync GraphQL 架构中定义的查询返回类型?

返回类型在 AppSync GraphQL 架构查询部分定义:

type Query {
    getClient(_id: ID!): Client
    getUser(_id: ID!): User
    getUsers(): UserConnection
}

对于查询 getUser,lambda 事件变量包含以下内容:

"info": {
    "parentTypeName": "Query",
    "selectionSetList": [
        "_id",
        "email"
    ],
    "selectionSetGraphQL": "{\n  _id\n  email\n}",
    "fieldName": "getUser",
    "variables": {
        "id": "5c42109b2eb8ed82c8862532"
    }
},
"stash": {}

使用 AWS 开发工具包,我可以调用 AppSync API 方法 getIntrospectionSchema,但它不返回任何查询或突变——只返回所有类型的数组。

我也可以调用getResolver方法,但它不返回字段返回类型。

var appsync = new AWS.AppSync();
var params = {
    apiId: 'xxxxx',
    fieldName: 'getUser',
    typeName: 'Query',
};
const data = await appsync.getResolver(params).promise();

Response:
dataSourceName:'myLambdaDatasource'
fieldName:'getUser'
kind:'UNIT'
requestMappingTemplate:null
resolverArn:'arn:.../types/Query/resolvers/getUser'
responseMappingTemplate:null
typeName:'Query'

【问题讨论】:

    标签: aws-appsync


    【解决方案1】:

    作为一种解决方法(并且因为我使用 AWS CDK 创建 AppSync API),我可以通过管道解析器请求映射模板将变量注入数据源 Lambda 函数。这并不理想,因为我们需要模拟发送到直接 Lambda 解析器(可能会改变)的变量。目前,这个 VTL 有效:$util.toJson($ctx)

    api.addQuery(`get${objectTypeName}`, new ResolvableField({
        returnType: objectType.attribute(),
        args: { id: appsync.GraphqlType.id({ isRequired: true }) },
        dataSource,
        pipelineConfig: [],
        requestMappingTemplate: appsync.MappingTemplate.fromString(`
            $util.qr($ctx.stash.put("myVariable", "myValue"))
            {
                "version" : "2017-02-28",
                "operation": "Invoke",
                "payload": $util.toJson($ctx)
            }
        `)
    }));
    

    变量在 Lambda 事件参数中可用,即 event.stash.myVariable

    "stash": {
        "myVariable": "myValue"
    }
    

    【讨论】:

      猜你喜欢
      • 2019-02-04
      • 2019-04-16
      • 2020-02-12
      • 2020-01-02
      • 2019-09-24
      • 1970-01-01
      • 2020-12-05
      • 2018-12-22
      • 1970-01-01
      相关资源
      最近更新 更多