如何在速度模板中为 API 网关中的请求/响应映射添加生成随机 UUID 等功能

Ali*_*Ali 3 templates vtl amazon-web-services aws-lambda aws-api-gateway

我正在为 AWS API 网关创建请求映射模板。在该模板中,我想根据某些条件自定义请求参数并应用运算符。

 #foreach($header in $input.params().header.keySet())
     #if($header=="id")#set($idVal = 
     $util.escapeJavaScript($input.params().header.get($header)))
         #if($idVal.matches("^[0-9a-f]{4}-[0-9A-Z]{3}$"))
             "$header":"$idVal"
         #else
           #set($random = UUID.randomUUID())
          "$header":"$random"
         #end
     #else
Run Code Online (Sandbox Code Playgroud)

例如,在上面基于 if 条件的模板中,我想生成 randomUUID 并添加到标题中。但是当我测试时,id 值设置为空字符串。

如何在速度模板映射 api 网关中使用包和 java 函数支持?另外,请分享对格式良好的模板的任何参考,了解更多信息会非常有用。

Mic*_*bot 7

API Gateway 中使用的 VTL 不能使用您自己的包进行扩展。只能使用内置变量和$util函数

您可能会发现它$context.requestId包含一个适合您的用途的 UUID,对于每个请求都是唯一的。请注意,如果您使用的是 Lambda 集成,则此值与 Lambda 的值不同,context.requestId后者只是巧合地具有相同的名称。

或者,最右边的 33 个字符$context.xrayTraceId应该包含一个 4 字节的时间戳(8 个十六进制数字)+ '-' + 一个 96 位唯一值(24 个十六进制数字),您可以从中构造一个可用的 UUID,并使用一些轻量字符串操作。