我需要在 API Gateway 方法的主体映射模板中包含请求时间。是否有日期/时间变量或函数?我在模板参考中找不到任何东西。
示例身体映射模板:
Action=SendMessage&MessageBody=$util.urlEncode("{""timestamp"":""TIMESTAMP_HERE"",""body-json"":$input.json('$'),""params"":""$input.params()""}")
我需要在 API Gateway 方法的主体映射模板中包含请求时间。是否有日期/时间变量或函数?我在模板参考中找不到任何东西。
示例身体映射模板:
Action=SendMessage&MessageBody=$util.urlEncode("{""timestamp"":""TIMESTAMP_HERE"",""body-json"":$input.json('$'),""params"":""$input.params()""}")
更新:API Gateway 刚刚添加了两个新的上下文变量http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html
$context.requestTime The CLF-formatted request time (dd/MMM/yyyy:HH:mm:ss +-hhmm).
$context.requestTimeEpoch The Epoch-formatted request time.
API 网关目前不支持此功能。它以前在论坛上被请求过 - https://forums.aws.amazon.com/thread.jspa?messageID=697658&。我们的待办事项中有此功能,但不幸的是,我无法承诺任何时间表。
似乎有一种方法可以从 API Gateway 请求中获取时间戳,但您需要查看X-Ray 文档才能找到它:
Amazon API Gateway 网关将跟踪 ID 添加到名为X-Amzn-Trace-Id的标头中的传入 HTTP 请求。
(...)
trace_id 由三个用连字符分隔的数字组成。例如,1- 58406520 -a006649127e371903a2de979。这包括:
- 版本号,即 1。
- 原始请求的时间,以 Unix 纪元时间为单位,以 8 个十六进制数字表示。例如,2016 年 12 月 2 日上午 10:00(太平洋标准时间)的纪元时间为 1480615200 秒,或十六进制的 58406520。
(...)
只需在模板顶部为您希望它过期的日期设置一个时间值。然后将其作为属性添加到您的项目。例如,如果您希望项目在 60 天后过期,您将添加 5184000 秒。
#set($expireDate = $context.requestTimeEpoch + 5184000)
{
"TableName": "your-table-name",
"Item": {
... other attributes
"expireDate": {"N": "$expireDate"},
}
}