跳到主要内容

Request Transformer Advanced

概述

Request Transformer Advanced 策略允许在 API 请求到达后端之前动态修改请求。该策略通过 five tag operations 提供转换能力,确保请求符合所需的结构:

  • Remove Tag:删除特定的头部、查询参数或主体字段。
  • Rename Tag:在保留字段值的同时更改字段名称。
  • Replace Tag:使用模板、字符串或函数修改现有值。
  • Add Tag:在头部、查询参数或主体中引入新字段。
  • Append Tag:向现有字段添加数据,而不是替换它们。

该策略在将 structuring, securing, and optimizing API 请求转发到后端之前特别有用。

配置详情

参数配置

添加标签后,用户可以使用这些模板作为值:

您可以使用当前请求的任何请求头、查询参数和捕获的 URI 组作为模板来填充支持的配置字段。

  • Request Parameter: 头部
  • Template:
$(headers.<header_name>), $(headers["<Header-Name>"])$(headers["<header-name>"])
  • Request Parameter: 查询字符串
  • Template:
$(query_params.<query-param-name>)$(query_params["<query-param-name>"])
  • Request Parameter: 捕获的 URI
  • Template:
$(uri_captures.<group-name>)$(uri_captures["<group-name>"])
  • Request Parameter: 共享变量
  • Template:
$(shared.<variable-name>)$(shared["<variable-name>"])

要转义模板,请将其放在引号内并传递到另一个模板中。例如:

$('$(something_that_needs_to_escaped)')

Note:  插件在转换之前创建请求头、查询字符串和捕获的 URI 的不可变表。因此,任何在模板中使用的参数的更新或删除不会影响模板的渲染值。

一个完整的 Lambda 示例,用于在头部值前加上“Basic”前缀(如果尚未存在):

Authorization:$((function()
local value = headers.Authorization
if not value then
return
end
if value:sub(1, 6) == "Basic " then
return value -- 已经正确形成
end
return "Basic " .. value -- 添加了正确的前缀
end)())

Note: 尤其是在像上面示例那样的多行模板中,请确保不要添加任何尾随空格或新行。因为这些将位于占位符之外,它们将被视为模板的一部分,因此将附加到生成的值上。环境是沙盒化的,这意味着 Lambda 将无法访问任何库函数,除了字符串方法(如上面示例中的 sub())。

添加 "移除" 标签

  • Function: 从请求中移除一个字段。
  • Configuration Steps:
    • 从下拉菜单中选择 "Remove"
    • 输入要删除的 field name
    • 选择适用的范围 (Headers, Query String, Body)。
    • 点击 Save 应用标签。

添加 "重命名" 标签

  • Function: 在保持其值不变的情况下重命名一个 existing 请求字段。
  • Configuration Steps:
    • 从下拉菜单中选择 "Rename"
    • 输入 current field namenew name
    • 选择适用的范围 (Headers, Query String, Body)。
    • 点击 Save 应用标签。

添加 "替换" 标签

  • Function: 使用 templates, strings, or functions 更改现有字段的值。
  • Configuration Steps:
    • 从下拉菜单中选择 "Replace"
    • 输入要替换的 field name
    • 选择 new value 类型 (Template, String, Function)。
    • 输入 replacement value
    • 选择适用的范围 (Headers, Query String, Body)。
    • 点击 Save 应用标签。

添加 "添加" 标签

  • Function: 在请求中插入一个新字段。
  • Configuration Steps:
    • 从下拉菜单中选择 "Add"
    • 输入 field namenew value
    • 选择 data typeTemplate – 使用预定义的占位符; String – 静态文本; Function – 基于动态逻辑的值。
    • 选择适用的范围 (Headers, Query String, Body)。
    • 点击 Save 应用标签。

添加 "附加" 标签

  • Function: 将额外数据附加到 existing 字段,而不是替换它。
  • Configuration Steps:
    • 从下拉菜单中选择 "Append"
    • 输入 field namedata to append
    • 选择 data type (Template, String, Function)。
    • 选择适用的范围 (Headers, Query String, Body)。
    • 点击 Save 应用标签。

更新标签

  • Function: 允许修改现有标签。
  • Configuration Steps:
    • 在标签表中点击一个 tag
    • update popup 会显示当前标签的详细信息。
    • 修改必要的值(例如,字段名称、新值、数据类型)。
    • 点击 Save 应用更改。
    • 重新部署 API 以确保更改生效。

删除标签

  • Function: 从策略配置中移除现有标签。
  • Configuration Steps:
    • 在标签表中找到 tag
    • 点击标签名称旁边的 (x) icon
    • 会出现一个 confirmation popup
  • 点击 Check 以确认删除。
    • 重新部署 API 以完成删除。