Сделать параметры запроса необязательными в IBM API Connect

Привет, мы используем IBM Api Connect в качестве шлюза для наших api, я не могу понять, как сделать параметры запроса необязательными, я попытался сделать это в разделах DESIGN и ASSEMBLE в IBM api connect, но не повезло.

это мой конечный URL, который я хочу вызвать www.testdomain.products / getProducts? param1 = "" & param2 = "" & param3 = ""

здесь все параметры являются необязательными, я даю этот URL-адрес как

www.testdomain.products / getProducts? param1 = $ (request.parameters.param1) & param2 = $ (request.parameters.param2) & param3 = $ (request.parameters.param3)

в одном случае использования я передаю только param1 и хочу, чтобы окончательный URL был построен только с param1, но это то, что я вижу

www.testdomain.products / getProducts? param1 = "значение" & param2 = & param3 =

что я должен сделать, чтобы URL-адрес был построен только с значениями, которые я передаю, например

www.testdomain.products / getProducts? param1 = "значение"


person Vinay Vullakula    schedule 15.11.2018    source источник
comment
Имеет ли это какое-то отношение к IBM MQ?   -  person JoshMc    schedule 15.11.2018
comment
Когда вы говорите, что вам не повезло, что это значит? Вы вызвали API, но он пожаловался на отсутствие параметров запроса? Или что?   -  person Matt Hamann    schedule 16.11.2018
comment
Привет, Мэтт, извини, я не совсем понял свой вопрос, я обновил вопрос.   -  person Vinay Vullakula    schedule 16.11.2018


Ответы (2)


Похоже, вы просто хотите проксировать строку запроса? В этом случае вы можете использовать $ (target-url) $ (request.search) в качестве URL-адреса вызова.

person Brendon S    schedule 16.06.2020

Этого можно достичь, создав динамический целевой URL с помощью сценария, а не задав статический URL серверной службы в действии invoke / Proxy.

Раздел сборки

Получите действие GatewayScript перед вызовом

var targetUrl = "www.testdomain.products/getProducts?";
var input_param1 = apim.getvariable('request.parameters.param1');
var input_param2 = apim.getvariable('request.parameters.param2');


if(input_param1 !==null || input_param1 !="" || input_param1 != undefined ){
    targetUrl = targetUrl.concat("param1="+input_param1))
}
if(input_param2 !==null || input_param2 !="" || input_param2 != undefined ){
    if(targetUrl.indexOf('param1') > 0){
        targetUrl = targetUrl.concat('&')
    }
    targetUrl = targetUrl.concat("param2="+input_param2))
}

apim.setvariable('target-url',targetUrl)

Invoke / Proxy - используйте это $(target-url)

Могут быть некоторые проблемы с синтаксисом, но мы можем добиться этого, используя описанный выше способ. Спасибо!

person Srikanth Pragallapati    schedule 28.11.2018
comment
Привет, Срикант ... спасибо ... решение, которое я реализовал, заключалось в добавлении $ (request.querystring) к моему URL-адресу, например: www.testdomain.products / getProducts? $ (Request.querystring) в INVOKE, все параметры настроены для путь в разделе дизайна не обязательны - person Vinay Vullakula; 28.11.2018
comment
Если он работает нормально, то не беспокойтесь. иначе вы можете следовать описанному выше подходу. Спасибо. - person Srikanth Pragallapati; 29.11.2018
comment
Привет, Srikanth, у меня есть еще один вопрос .. Я разместил в другом потоке stackoverflow.com/questions/53539822/ .. - person Vinay Vullakula; 29.11.2018
comment
Привет, Винай, поделился некоторым ответом, полученным от сообщества IBM, надеюсь, что это поможет вам. Проголосуйте за ответ, если он был вам полезен - person Srikanth Pragallapati; 03.12.2018