Я не настолько в WSO2 ESB , и у меня есть следующая ситуация, с которой нужно разобраться. Я пытаюсь объяснить это в деталях.
У меня есть ESB проект, содержащий некоторые REST API . Эти REST API реализуют концепцию HATEOAS . На практике я просто добавляю ссылку на возвращенные ресурсы. Я делаю это с помощью посредника сценариев, который манипулировал JESON, прежде чем вернуть его, в моих API у меня есть что-то вроде этого:
<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 :
newEl.rel = "market_details";
newEl.href = "http://XXX.YYY.ZZZ.KKK:8280/market_details/" + el.market_id;
newEl.type = "GET";
Я не знаю, является ли это более аккуратным решением, но оно работает нормально, и в настоящее время я не могу его извинить.
Проблема в том, что я жестко кодирую URL-адрес href в предыдущем JavaScript, который манипулирует моим JSON.
Теперь у меня есть 2 среды: одна для DEV и другая для PROD. И у меня много API. Я знаю, что могу просто выполнить поиск и замену строк (я ищу URL-адрес XXX.YYY.ZZZ.KKK , заменяя его URL-адресом PROD перед развертыванием в PROD).
Но я думаю, что это абсолютно грязное и ужасное решение.
Итак: что может быть более аккуратным решением?
Моя идея:
Я создаю новую последовательность, которая содержит свойство current_env , в котором я задаю URL-адрес среды.
Я включаю эту последовательность в начале каждого ESB файла, содержащего определение моего API.
Я извлекаю значение этого свойства в свой посредник script и использую его для создания ссылки HATEOAS .
Может быть, это довольно приличное решение? Или существует какой-то лучший способ сделать это? (может быть, значение, подобное этому, может храниться в другом месте, отличном от последовательности? Я действительно не знаю)