2014-06-12 25 views
-1

作为我的API代理的一部分,我想将称为搜索的目标资源映射到代理资源超级搜索。 所以,如果我的基本URL是MYPROXY/1.2,我创建资源超级搜索,然后我想的网址,以作如下修改Apigee - 请求期间更改资源名称

MYPROXY/V1.2 /超级搜索& apikey = 123

MYPROXY/V1.2 /搜索& apikey = 123

看来,从阅读文档here,并且this question,即要做到这一点的方式是简单地修改与JavaScript中的URL做

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

不幸的是召唤出的目标端点的预流但是,URL似乎没有包含资源名称,所以没有什么可替代的。

或者我可以做

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

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

如何在不影响请求的其他元素的情况下更改目标上的资源名称?

回答

0

OK - 以及我得到它的工作,但它是一个肮脏的黑客。它绕过所有漂亮的逻辑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); 

应该有做的比这更好的方式 - 如果你知道这是什么是,请发布!

0

尝试使用JavaScript调用出重置在靶预流的目标URL -

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

谢谢@Sudhee,但这不起作用,因为target.url不包含资源名称。在这种情况下,target.url是 'myproxy/v1.2' 所以替换不做任何事情 – Tadhg