跳到主要内容

Request Transformer

概述

请求转换器策略是一种入站策略,它允许在将传入的 HTTP 请求转发到上游服务之前动态修改这些请求。这包括以下功能:

  • 移除或添加头部、查询字符串和主体参数。
  • 重命名或替换特定的请求字段。
  • 使用模板或静态值应用转换逻辑。

这在将 API 适配到遗留系统、添加或掩盖敏感信息,或支持不断发展的 API 合同等场景中非常有用。

Kong Gateway 按以下顺序处理请求转换:

  1. 移除
  2. 重命名
  3. 替换
  4. 添加
  5. 附加

配置详情

用户界面提供动态配置输入。您可以通过单击绿色加号图标添加多个转换行。

支持的转换类型

Field Format Description
config.remove.headersx-remove-header移除指定的头部。
config.remove.querystringparam1,param2移除特定的查询参数。
config.remove.bodyparam1,param2移除特定的表单字段。
config.rename.headersold:new重命名一个头部。
config.rename.querystringold:new重命名一个查询参数。
config.rename.bodyold:new重命名一个主体字段。
config.replace.headerskey:value替换头部值。
config.replace.querystringkey:value替换查询参数值。
config.replace.bodykey:value替换主体字段值。
config.add.headerskey:value添加一个新头部。
config.add.querystringkey:value添加一个新查询参数。
config.add.bodykey:value添加一个新表单字段。
config.append.headerskey:value附加到现有的头部值。
config.append.querystringkey:value附加到现有的查询参数值。
config.append.bodykey:value附加到现有的主体参数值。
  • 如果字段的值包含逗号,请使用数组表示法,而不是逗号分隔的字符串。
例如,headers[1]=h1:v1
  • x-forwarded-* 头部(由 Nginx 添加)无法通过此插件进行修改。
  • 对于所有配置类型,列表项必须遵循 "key:value" 格式或 "old:new" 用于重命名。

模板

您可以使用模板动态注入来自传入请求的值:

头部:

${headers.<header_name>}

查询:

${query_params.<param_name>}

URI 捕获:

${uri_captures.<group_name>}

共享:

${shared.<variable_name>}

您甚至可以在模板中使用 Lua 表达式,如下所示:

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())

示例

基本请求转换

通过删除一个头部、重命名一个主体字段和添加一个查询参数来转换传入请求:

{
"name": "request-transformer",
"config": {
"remove": {
"headers": ["x-remove-header"],
"body": ["formparam-toremove"],
"querystring": ["qs-toremove"]
},
"rename": {
"body": ["param-old:param-new"]
},
"add": {
"querystring": ["new-param:some_value"],
"headers": ["x-new-header:some_value"]
}
}
}

通过 Kong 管理 API 启用

curl -X POST [http://localhost:8001/services/{serviceName}/plugins](http://localhost:8001/services/%7BserviceName%7D/plugins) \
--data "name=request-transformer" \
--data "config.add.body=new-field:defaultvalue"

在一个请求中附加和删除

curl -X POST [http://localhost:8001/services/example-service/plugins](http://localhost:8001/services/example-service/plugins) \
--data "name=request-transformer" \
--data "config.append.headers=h1:v2,h2:v1" \
--data "config.remove.body=p1"

使用 URI 捕获模板

--data "config.add.headers=x-user-id:${uri_captures['user_id']}"

多个头部(作为数组)

--data "config.add.headers[1]=h1:v1" \
--data "config.add.headers[2]=h2:v1"

此插件具有高度灵活性,并在弥合客户期望与上游 API 规范之间的差异中发挥着关键作用。

有关使用该策略的更多说明和高级示例,请参阅本指南:请求转换器 - 插件 | Kong 文档