首页 > 其他分享 >利用Kong 的 request-transformer 插件重写 URL

利用Kong 的 request-transformer 插件重写 URL

时间:2022-10-28 20:32:21浏览次数:85  
标签:插件 code URL transformer uri item branch jkf

1.背景介绍

需求是将 URL:www.abc.com/api/item/111 重写成 www.xyz.com/open/item/itemdetail?id=111。且域名不变,不能发生302跳转。

2.request-transformer

request-transformer 是 Kong 官方的插件,允许修改重写用户的请求,还可以使用正则表达式匹配 URL 并将匹配到的字符串保存在变量中,然后使用模板将变量转换成用户的请求。

简而言之就是重写用户的请求,包括 URL,args,headers,methods 等等。

github项目地址:​​ request-transformer github​

3.配置方法

kong 版本为2.2,konga 版本为0.14.9

3.1需求一

将URL:/v4/jkf/branch/qrcode&code=100006 重写为 /v4/jkf/branch/qrcode?code=100006。也就是将&转换为?

一、首先配置 Service 和 Route。具体配置方法参考​​1204-使用Kong和Konga管理微服务和API​​。主要关心 Route 中的 Path 设置。

/v4/jkf/branch/qrcode\&code=(?<code>\d+)

该PATH表示:

  • 匹配 /v4/jkf/branch/qrcode&code=任意长度数字
  • 正则\d表示匹配数字,并且将匹配到的数字保存为code变量
  • \&表示转义 URL 中的$符号

关闭 route 中的 script path 可选项

二、在该 route 下添加 request-transformer 插件,表示该插件只应用到此条 route 。并且配置插件参数

curl -X POST http://localhost:8001/routes/21292565-e7ae-40ff-a465-f449c16b7819/plugins \
--data "name=request-transformer" \
--data "config.replace.uri=/jkf/branch/qrcode" \
--data "config.add.querystring=code:\$(uri_captures.code)"

对于上面的命令行解释如下:

  • 21292565-e7ae-40ff-a465-f449c16b7819就是刚才创建的路由 ID
  • config.replace.uri 表示将 route 匹配到的 PATH 重写为/jkf/branch/qrcode
  • onfig.add.querystring 表示给 URL 添加 args 参数
  • code:\$(uri_captures.code) 参数名是 code,uri_captures.code 表示获取 route 的 PATH 中 code 变量的值,由于命令行 shell 环境关系,所以要在变量符号$前进行转义。

Konga 的操作如下:

利用Kong 的 request-transformer 插件重写 URL_图形界面设置

利用Kong 的 request-transformer 插件重写 URL_request-transfo插件_02

三:最后重启 kong 服务并验 

curl -X GET https://www.myj.com.cn/v4/jkf/branch/qrcode\&code\=100006

3.2需求二

将/api/item/111 重写为/open/item/itemdetail?id=111

将URL后面的数字拼接到 id 的值,作为参数拼接成 URL 后,传递给后端

1、添加 Service 和 Routes,Routes 的 PATH 部分如下:

#该PATH只匹配/api/item/数字格式的 URL,并且将\d+正则匹配到的数字保存为变量 id
/api/item/(?<id>\d+)$

2、添加和配置插件

curl -X POST http://localhost:8001/routes/38fce1b7-2a36-42cb-9619-f30539889137/plugins \
--data "name=request-transformer" \
--data "config.replace.uri=/open/item/itemdetail" \
--data "config.add.querystring=id:\$(uri_captures.id)"

4.rewrite 参考配置

server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;

# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;

server_name _;

location / {
try_files $uri $uri/ =404;
}

resolver 119.29.29.29;
set $upstream_baidu http://www.baidu.com;
location /baidu {
rewrite ^/baidu(.*) /$1 break;
proxy_pass $upstream_baidu;
}

set $upstream_bing http://www.bing.com;
location /bing {
rewrite ^/bing(.*) /$1 break;
proxy_pass $upstream_bing;
}
}


标签:插件,code,URL,transformer,uri,item,branch,jkf
From: https://blog.51cto.com/waringid/5803062

相关文章

  • YeYuan-2021-AgentFormer-AgentAwareTransformers for Socio-Tempolar Multi-Agent Fo
    #AgentFormer:Agent-AwareTransformersforSocio-TemporalMulti-AgentForecasting#paper1.paper-info1.1MetadataAuthor::[[YeYuan]],[[XinshuoWeng]],......
  • url.indexOf is not a function ,使用jquery load()出现错误
    https://blog.csdn.net/cvper/article/details/79150566问题:在使用jquery3.3.1版本时,写了如下测试代码:<script>$(window).load(function(){console.log("justates......
  • Kubenetes 安装网络插件(calico)
    简介Calico是Kubernetes生态系统中另一种流行的网络选择。虽然Flannel被公认为是最简单的选择,但Calico以其性能、灵活性而闻名。Calico的功能更为全面,不仅提供主机和pod之......
  • VS2022关于ClaudiaDE插件设置背景图片不生效问题
    博主使用的是VS2022,在安装了ClaudiaDE插件后想修改wallpaper的壁纸   结果修改后没有反应最后去GitHub上将ClaudiaDE的版本修改后就成功了......
  • KubeVela 插件指南:轻松扩展你的平台专属能力
    作者:姜洪烨KubeVela插件(addon)可以方便地扩展KubeVela的能力。正如我们所知,KubeVela是一个微内核高度可扩展的平台,用户可以通过模块定义(Definition)[1]扩展KubeVela的系......
  • KubeVela 插件指南:轻松扩展你的平台专属能力
    作者:姜洪烨KubeVela插件(addon)可以方便地扩展KubeVela的能力。正如我们所知,KubeVela是一个微内核高度可扩展的平台,用户可以通过模块定义(Definition)[1]扩展KubeVel......
  • libcurl之文件上传阿里云
    结构顺序如下:配置请求头->数据准备->初始化libcurl->设置libcurl属性->设置请求头->执行libcurl->释放libcurl 部分执行源码:typedefstruct_DUMP_PROCESS_INFO{......
  • url路由
    构建项目mkdirbysms&&cdbysmsdjango-adminstartprojectconfig.config包下的settings.py中编写如下ALLOWED_HOSTS=['127.0.0.1','localhost']创建......
  • 【leetcode插件】使用
    快捷键如图中的文档注释中的类,没有快捷键可以一次性取消,如果一行一行删又太费事,我们可以用这个方法。光标放在这里,按下Alt+鼠标左键,就可以对多行进行删除,简单方便。......
  • Vscode自动生成文件注释和函数注释插件使用指南
    一、插件安装插件名:koroFileHeade插件安装二、插件配置打开配置文件添加配置//函数注释CTRL+ALT+T"fileheader.cursorMode":{"Fu......