Apigee - 使用targetserver时修改目标路径

时间:2014-07-11 16:48:44

标签: proxy apigee

我有一个API代理,需要能够修改最终目标URL的路径组件。在整个代理有一个已定义的目标端点URL的情况下,这似乎相当简单,但我们使用的是TargetServers和VirtualHosts,它们显然是在TargetEndpoint PreFlow之后分配的

我在Target Endpoint PreFlow中有一个JS函数,当我尝试修改context.targetRequest.path时,得到了未指定的JS错误。在Proxy PreFlow期间尝试修改传入代理的路径部分也失败。

转储targetRequest的值会产生:

  1. 主机=空
  2. 路径= / V2 / CAT1 / CAT2 /?PARAM = ......
  3. url =与路径相同!
  4. 我能够“成功”修改的唯一变量是targetRequest.url来实现我的目标,但要做到这一点我必须分配整个事情,包括我不知道的协议和主机!< / p>

    任何人都知道如何做到这一点?我本质上想修改替换“/?”的路径只是“?”

    由于

2 个答案:

答案 0 :(得分:1)

您还可以通过利用Path元素和TargetServer来设置目标端点:

<TargetEndpoint>
    ...
    <HTTPTargetConnection>
        <LoadBalancer>
            <Server name="TargetServerABC"/>
        </LoadBalancer>        
        <Path>/v1/YourPathHere/json.ws?{flow.company.queryparams}</Path>
    </HTTPTargetConnection>
</TargetEndpoint>

注意TargetServerABC需要是使用以下these steps创建的TargetServer。

答案 1 :(得分:0)

操作target.path似乎存在问题(在Apigee中有一个错误报告打开)。

目前的解决方法是使用AssignVariable块在AssignMessage策略中重写整个URI:

<AssignVariable>
    <Name>target.url</Name>
    <Value>http://example.com/mypath?param=value&variable={apigee.variable}</Value>
    <Ref/>
</AssignVariable>

或者您可以使用context.setVariable函数在Javascript中执行此操作:

context.setVariable("target.url", mycompleteurl);