如何配置 WSO2 自动替换 API url?
How can I configure WSO2 to automatically replace API urls?
我在 http://my_internal_api.com
上有一个 API 运行,我在 https://mywso2:8280/my_api
上用 WSO2 公开它。
一切正常,但 REST API 在 json 中发出 url 属性,这些属性针对原始服务器 url.
示例:
检索联系信息时,我得到一个 JSON 对象:
[{contact_id: 1, url: contact_url}, {}]
这个contact_url
的形式是:http://my_internal_api.com/contacts/1
应该是:https://mywso2:8280/my_api/contacts/1
有办法解决吗?我猜应该使用序列,但我不知道这是正确的方法还是我正在重新发明轮子。
您可以使用中介扩展 [1] 添加输出序列。找到所有出现的 "my_internal_api.com" 并替换为 "mywso2:8280"。要替换有效载荷中的字符串,您可以使用脚本中介.
<script language="js">
var payload = mc.getPayloadXML().toString();
<property name="PAYLOAD" value="payload"/>
var changedPayload = payload.replace(/http:\/\/my_internal_api.com/, mc.getProperty('apiURL'));
var xml = new XML(newPayLoad);
mc.setPayloadXML(xml);</script>
1.https://docs.wso2.com/display/AM180/Adding+Mediation+Extensions
最简单的方法是使用 header 中介添加一个 X-Forwarded-Host header,像这样:
<sequence name="WSO2AM--Ext--In">
<header name="X-Forwarded-Host"
scope="transport"
expression="get-property('transport','Host')"/>
<header name="X-Forwarded-Proto" scope="transport" value="https"/>
</sequence>
这样,大多数 API 将能够正确解析主机
我在 http://my_internal_api.com
上有一个 API 运行,我在 https://mywso2:8280/my_api
上用 WSO2 公开它。
一切正常,但 REST API 在 json 中发出 url 属性,这些属性针对原始服务器 url.
示例: 检索联系信息时,我得到一个 JSON 对象:
[{contact_id: 1, url: contact_url}, {}]
这个contact_url
的形式是:http://my_internal_api.com/contacts/1
应该是:https://mywso2:8280/my_api/contacts/1
有办法解决吗?我猜应该使用序列,但我不知道这是正确的方法还是我正在重新发明轮子。
您可以使用中介扩展 [1] 添加输出序列。找到所有出现的 "my_internal_api.com" 并替换为 "mywso2:8280"。要替换有效载荷中的字符串,您可以使用脚本中介.
<script language="js">
var payload = mc.getPayloadXML().toString();
<property name="PAYLOAD" value="payload"/>
var changedPayload = payload.replace(/http:\/\/my_internal_api.com/, mc.getProperty('apiURL'));
var xml = new XML(newPayLoad);
mc.setPayloadXML(xml);</script>
1.https://docs.wso2.com/display/AM180/Adding+Mediation+Extensions
最简单的方法是使用 header 中介添加一个 X-Forwarded-Host header,像这样:
<sequence name="WSO2AM--Ext--In">
<header name="X-Forwarded-Host"
scope="transport"
expression="get-property('transport','Host')"/>
<header name="X-Forwarded-Proto" scope="transport" value="https"/>
</sequence>
这样,大多数 API 将能够正确解析主机