我如何才能在 2 个不同的环境中正确处理某些 WSO2 ESB REST API 的部署? (目前包含硬编码的 HATEOAS link)

How can I correctly handle the deploy of some WSO2 ESB REST API in 2 differents environments? (containing, at the moment, hardcoded HATEOAS link)

我不太喜欢WSO2 ESB,我有以下情况需要处理。我尽量详细解释一下。

我有一个 ESB 项目,其中包含一些 REST APIs。这些 REST APIs 实现了 HATEOAS 概念。实际上,我只是将 link 添加到 returned 资源中。我正在使用在 return 之前操纵 JESON 的脚本中介来做到这一点,在我的 APIs 中,我有这样的东西:

<script language="js">
<![CDATA[
    var log = mc.getServiceLog();
    function checkForNull(value) {
        if (value instanceof Object && "@nil" in value) {
            return null;
        }

        return value;
    }

    log.info("----------- COMMODITY DETAILS JS SCRIPT START --------------------");
    // Strange workaround for getting JSON Payload. getPayloadJSON returned null. 
    var pl_string = mc.getProperty("JSONPayload"); 
    var payload = JSON.parse(pl_string);
    log.info("PAYLOAD STRING: " + pl_string);

    // Create new response:          
    var response = payload.Commodity.Commodity;
    log.info("RESPONSE: " + JSON.stringify(response));

    // Convert array of markets into required HATEOS format
    var markets = new Array();

    // Convert array of markets into required HATEOS format:
    for (i = 0; i < response.markets.el.length; ++i) {
        log.info("MARKET " + i);
        var el = response.markets.el[i];

        var newEl = new Object();

        newEl.market_id = el.market_id;
        newEl.market_name = el.market_name;

        // Convert null values:
        newEl.region = checkForNull(el.region);
        newEl.province = checkForNull(el.province);
        newEl.city = checkForNull(el.city);
        newEl.district = checkForNull(el.district);
        newEl.town = checkForNull(el.town);
        newEl.village = checkForNull(el.village);


        newEl.rel = "market_details";
        newEl.href = "http://XXX.YYY.ZZZ.KKK:8280/market_details/" + el.market_id;
        newEl.type = "GET";

        markets.push(newEl);
    }

    response.markets = markets;

    log.info("RESPONSE AFTER checkForNull(): " + JSON.stringify(response));

    // Put payload back:
    mc.setPayloadJSON(response);
    log.info("----------- COMMODITY DETAILS JS SCRIPT END --------------------");
]]>
</script>

正如您在此脚本调解器中看到的,我正在添加 HATEOAS link:

    newEl.rel = "market_details";
    newEl.href = "http://XXX.YYY.ZZZ.KKK:8280/market_details/" + el.market_id;
    newEl.type = "GET";

我不知道它是否是更简洁的解决方案,但它工作正常,目前我无法更改它。

问题是我正在将 href URL 硬编码到之前的 JavaScript 中来操纵我的 JSON.

现在我有 2 个环境:一个用于 DEV,另一个用于 PROD。我有很多 API。我知道我可以简单地进行字符串搜索和替换(我搜索 XXX.YYY.ZZZ.KKK DEV URL 在部署之前将其替换为 PROD URL在产品中)。

但我认为这是一个绝对肮脏和可怕的解决方案。

那么:有什么更好的解决方案?

我的想法是:

这可能是一个相当不错的解决方案吗?或者存在一些更好的方法来做到这一点? (也许像这样的值可以存储在不同于序列的其他地方?我真的不知道)

在脚本中介或代码中提及 URL 是一种不好的做法,而不是遵循这种方法,您可以在本地条目中添加 URL,获取序列中的值,然后然后附加脚本中介程序,因此在这种情况下,无论何时部署 CAR 文件,都将具有通用代码,并且所有动态工件都可以在本地整体中提及。