如何使用泛型方法设置带参数的服务URL

时间:2017-01-04 02:32:29

标签: javascript angularjs

我有200多个服务网址。网址格式如下:

serviceURL = DomainName + MethodName + Path;

DomainName& MethodNames是可配置的,路径可能类似于以下格式:

Path = 'A' + '/' + Param1 + '/' + 'B' + '/' + Param2 + '/' + 'C'  + '/'+ Param3;

我的要求是创建一个通用方法,我可以使用参数传递单个URL,并且该URL应相应地设置serviceURL。例如。

Var URL = 'domain1/method1/A/{0}/B/{1}/C/{2}';

GenericMethod(URL, Param1, Param2, Param3){

//in URL domain1 should get replaced by DomainName
// method1 should get replaced by MethodName
//path URL {0} {1} {2} get replaced by params

}

有没有人遇到任何这样的要求/需要?

欢迎提出建议。

由于

3 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的问题,但如果我这样做了,那么你可以做这样的事情。

function getPath(URL, Param1, Param2, Param3){
    return URL.replace('{0}', Param1).replace('{1}', Param2).replace('{2}', Param3);
}

$http.get(getPath(URL, Param1, Param2, Param3));

最好使用执行此操作的方法创建服务。

答案 1 :(得分:0)

你可以使用arguments变量(在每个JS函数中都可用)和一点Regex来实现:

function getServiceRequestURL(serviceURL) {

    var requestURL = serviceURL;

    for(var i = 1; i <= arguments.length; i++) {
        requestURL = requestURL.replace(new RegExp('\\{' + (i-1) + '\\}', 'gi'), arguments[i]);
    }

    return requestURL

}

这样做是让所有参数都超过serviceURL并将{0}标记替换为传递给函数的实际参数。无论给定的参数数量如何,这都适用于任何规模的服务URL。

答案 2 :(得分:0)

最简单的方法是使用正则表达式:

SELECT SUM(cost) as cost
FROM cartItems c JOIN
     (SELECT 1 as itemNumber UNION ALL
      SELECT 1 UNION ALL 
      SELECT 2
     ) i
     ON i.itemNumber = c.itemNumber;

或者通过向GenericMethod({domain:&#39; myDomain&#39;,param1:&#39; myParam1&#39;})提供参数哈希而不是列表来更加通用,然后迭代键

但是,这样的方法会在其他独立服务之间添加隐式依赖关系,并且将来某些新服务可能需要不同的URL方案,因此在大型应用程序中,URL方案通常不会超出常规范围以防止额外的耦合。 / p>