如何配置 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 将能够正确解析主机