转换 api 网关中的速度模板以使用 AWS CDK 在打字稿中传递

Converting velocity template in api gateway to be passed in typescript with AWS CDK

我正在使用带有 AWS CDK 的打字稿为 api 网关生成一个 cloudFormation 模板。我有一个 Apache Velocity 模板可以帮助我转换响应。当我使用打字稿创建 API 网关时。我怎样才能从代码本身传递模板。我需要在需要字符串的 responseTemplates in IntegrationOptions 接口中传递我的模板。我一直无法找到任何合理的方法将其转换为字符串。

{
    "sellableQuantity": $inputRoot.quantity),
    "reservedQuantity": $inputRoot.reservedQuantity)
    "marketplaceInventories": [
        #foreach( $marketplaceInventory in $inputRoot.marketplaceInventories) )
            {
                "sellableQuantity": $marketplaceInventory.sellableQuantity,
                "marketplaceAttributes": {
                    #set( $marketplaceAttributes = $marketplaceInventory.marketplaceAttributes )
                    "marketplaceName": "$marketplaceAttributes.marketplaceName",
                    "channelName": "$marketplaceAttributes.channelName"
                }
            }
            #if( $foreach.hasNext ) , #end
        #end
    ] 
}

你的问题确实是"How do I define a long string without worrying about escaping special characters in javascript?"

我认为 javascript template literal 是最好的选择,因为它让你不用担心转义或行继续。在您的字符串周围使用反引号和 String.raw 可以确保您定义的内容将被逐字传递:

let myVelocityTemplate = String.raw`{
    "sellableQuantity": $inputRoot.quantity),
    "reservedQuantity": $inputRoot.reservedQuantity)
    "marketplaceInventories": [
        #foreach( $marketplaceInventory in $inputRoot.marketplaceInventories) )
            {
                "sellableQuantity": $marketplaceInventory.sellableQuantity,
                "marketplaceAttributes": {
                    #set( $marketplaceAttributes = $marketplaceInventory.marketplaceAttributes )
                    "marketplaceName": "$marketplaceAttributes.marketplaceName",
                    "channelName": "$marketplaceAttributes.channelName"
                }
            }
            #if( $foreach.hasNext ) , #end
        #end
    ] 
}`

java中,很简单:

private GraphQLApi CreateGraphQLApi(String API_NAME) {
    return GraphQLApi.Builder.create(this, API_NAME + "_AppSyncApi")
            .name(API_NAME.concat("_AppSyncApi"))
            .schemaDefinitionFile(Constants.SCHEMA_PATH)
            .build();
}

您可以传递架构路径并让 cdk 加载和部署资源。

我认为 typescript API 与其他语言是一对一的