【问题标题】:Apigee - Change resource name during requestApigee - 在请求期间更改资源名称
【发布时间】:2014-08-03 08:23:46
【问题描述】:

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

myproxy/v1.2/super-search&apikey=123

myproxy/v1.2/search&apikey=123

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

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

不幸的是,该 URL 似乎不包含资源名称,因此没有什么可替换的。

我也可以这样做

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

但这似乎删除了我所有的查询参数!

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

【问题讨论】:

    标签: javascript request apigee


    【解决方案1】:

    尝试使用 Javascript 调用在 Target Pre-flow 中重置目标 URL -

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

    【讨论】:

    • 感谢@Sudhee,但这不起作用,因为 target.url 不包含资源名称。在这种情况下,target.url 是myproxy/v1.2,所以替换什么都不做
    【解决方案2】:

    好的 - 我得到了它的工作,但这是一个讨厌的黑客。它绕过了 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);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多