Apigee - 在请求期间更改资源名称

时间:2014-06-12 21:17:56

标签: javascript request apigee

作为我的API代理的一部分,我想将名为search的目标资源映射到代理资源超级搜索。 因此,如果我的基本网址是myproxy / v1.2,并且我创建了资源超级搜索,那么我希望修改网址如下

  

MYPROXY / V1.2 /超搜索&安培; apikey = 123

  

MYPROXY / V1.2 /搜索&安培; apikey = 123

从阅读文档herethis question看来,这样做的方法就是在目标端点的预流程中使用JavaScript调出来简单地修改URL通过做

context.targetRequest.url.replace('/super-search', '/search')

不幸的是,URL似乎没有包含资源名称,因此无需替换。

或者我可以做

context.setVariable('target.copy.pathsuffix', false);
context.targetRequest.url += '/search';

但这似乎放弃了我的所有查询参数!

如何只更改目标上的资源名称而不影响请求的其他元素?

2 个答案:

答案 0 :(得分:0)

尝试使用Javascript调用重置目标预流中的目标网址

context.setVariable("target.url",context.getVariable("target.url").replace('/super-search', '/search'));

答案 1 :(得分:0)

好吧 - 好吧,我让它工作了,但这是一个讨厌的黑客。它绕过了Apigee确保目标URL正确编写的所有良好逻辑,我只是​​自己用JavaScript编写它

// Disable copying super-search into the output
context.setVariable('target.copy.pathsuffix', false);

//Build the target url manually: root + /search? + params list
var url = context.getVariable('target.url') + "/search?" + context.getVariable('request.querystring');

//Write the target URL back
context.setVariable('target.url', url);

应该有一种比这更好的方法 - 如果你知道它是什么,请发帖!