如何配置WSO2以自动替换API网址?

时间:2015-03-19 17:03:49

标签: wso2 uri sequence wso2carbon wso2-am

我在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

有没有办法解决这个问题?我猜测应该使用一个序列,但我不知道这是正确的方法还是我试图重新发明轮子。

2 个答案:

答案 0 :(得分:0)

您可以使用中介扩展[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

答案 1 :(得分:0)

最简单的方法是使用标头介体添加X-Forwarded-Host标头,如下所示:

<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都能够正确解析主机