如何在 API 网关中为请求/响应映射添加速度模板中生成随机 UUID 等功能
Posted
技术标签:
【中文标题】如何在 API 网关中为请求/响应映射添加速度模板中生成随机 UUID 等功能【英文标题】:How to add functions like generating random UUID in velocity template for request/response mapping in API gateway 【发布时间】:2019-08-01 08:32:17 【问题描述】:我正在为 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
例如上面的模板中基于if条件我想生成randomUUID并添加到header中。但是当我测试时, id 值设置为空字符串。
如何在velocity模板映射api网关中使用包和java函数支持?另外,请分享对格式良好的模板的任何参考,这对了解更多信息非常有用。
【问题讨论】:
【参考方案1】:API Gateway 中使用的 VTL 不能使用您自己的包进行扩展。只能使用built-in variables and $util
functions。
您可能会发现$context.requestId
包含一个适合您用途的 UUID,对于每个请求都是唯一的。请注意,如果您使用的是 Lambda 集成,则此值与 Lambda 的 context.requestId
不同,后者只是巧合地具有相同的名称。
或者,$context.xrayTraceId
最右边的 33 个字符应该包含一个 4 字节时间戳(8 个十六进制数字)+“-”+一个 96 位唯一值(24 个十六进制数字),您可以从中构造一个可用的 UUID,其中包含一些灯串操作。
【讨论】:
$context.requestId
是 AWS 博客中提到的哈希键:aws.amazon.com/blogs/compute/…【参考方案2】:
你不能使用包,但你可以使用$util helpers
例如,您可以使用$util.autoId()
来生成您的 UUID。
【讨论】:
以上是关于如何在 API 网关中为请求/响应映射添加速度模板中生成随机 UUID 等功能的主要内容,如果未能解决你的问题,请参考以下文章
如何从动态列表中为 Vue 中的 API 响应创建列表渲染 JSON?