如何在WSO2 API Manager中替换请求URL的特定路径段?
在WSO2 API Manager中实现路径部分重写的方案
针对你需要将mywso2:8243/example/v1/tag/{tagName}格式的请求转发到myserver:8080/process/tag/v1/{tagName}的需求,可通过以下步骤实现:
1. 创建基础API
在WSO2 APIM Publisher控制台新建API:
- 上下文(Context)设为
/example/v1 - API版本设为
v1 - 名称等其他信息按需填写
2. 定义通用资源
在API的“Resources”页面添加资源:
- 方法:选择
GET和POST(可分别添加或选“ANY”覆盖所有方法) - 资源路径:设为
/tag/{tagName}({tagName}作为路径变量,匹配test、anothertest这类动态值)
3. 配置后端端点
进入“Endpoints”页面,添加一个HTTP/HTTPS类型的端点:
- 端点地址设为
http://myserver:8080/process/tag/v1/(注意末尾保留斜杠,后续路径变量会自动拼接)
4. 构建路径重写入站序列
在API的“Sequences”页面创建入站序列,用于修改请求路径:
<sequence xmlns="http://ws.apache.org/ns/synapse" name="TagPathRewriteSequence"> <!-- 提取路径中的tagName变量,并重写URI --> <rewrite> <rewriteURI uri-template="/process/tag/v1/{uri.var.tagName}"/> </rewrite> <send/> </sequence>
如果需要兼容更多动态路径场景,也可以用正则截取的方式:
<sequence xmlns="http://ws.apache.org/ns/synapse" name="TagPathRewriteSequence"> <!-- 截取/tag/之后的路径部分 --> <property name="REST_URL_POSTFIX" expression="fn:substring-after(get-property('REST_URL_POSTFIX'), '/tag/')"/> <!-- 重写为目标路径 --> <rewrite> <rewriteURI uri-template="/process/tag/v1/{get-property('REST_URL_POSTFIX')}"/> </rewrite> <send/> </sequence>
5. 关联序列到资源
回到“Resources”页面,编辑已创建的/tag/{tagName}资源:
- 在“In Sequence”下拉框中选择刚才创建的
TagPathRewriteSequence - 保存配置
6. 发布并验证
将API发布到Store,订阅后使用测试工具(如APIM Store的Test功能、Postman)发送请求:
- 调用
GET mywso2:8243/example/v1/tag/test,验证后端是否收到GET myserver:8080/process/tag/v1/test - 调用
POST mywso2:8243/example/v1/tag/anothertest,验证后端是否收到对应POST请求
内容的提问来源于stack exchange,提问作者EnricoNiccoli
相关产品推荐
相关产品推荐

