2014-07-11 78 views
1

我有一個API代理,需要能夠修改最終目標URL的路徑組件。這似乎相當簡單,如果有一個爲整個代理定義的目標端點URL,但我們正在使用TargetServer和VirtualHosts,顯然是在TargetEndpoint PreFlow後分配的Apigee - 使用目標服務器時修改目標路徑

我在目標端點PreFlow中有一個JS函數並獲取未指定的JS當我嘗試修改context.targetRequest.path時出錯。嘗試在Proxy PreFlow期間修改傳入代理的路徑部分也失敗。

傾銷targetRequest值給出:?

  1. 主機=空
  2. 路徑=/V2/CAT1/CAT2 /參數= ......
  3. URL =等同於道路!

,我已經能夠「成功」修改唯一的變數是targetRequest.url實現我的目標,但要做到這一點我必須將整個事情,包括這是不知道的協議和主機我!

任何人都知道如何做到這一點?我基本上想修改路徑替換「/?」只有「?」

感謝

回答

1

您還可以通過利用PathServer與TargetServer一起使用Path元素將其設置在目標端點上:

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

注TargetServerABC必須使用以下these steps一個TargetServer創建。

+0

感謝迭戈的存在可行的解決方案,這讓我的解決方案。我把proxy.pathsuffix(我想要的變種修改第一名)的調整值到我自己的變量和應用,要在TargetServer的「路徑」如你所說。也很關鍵被設置'target.copy.pathsuffix = FALSE'以防止也被施加原始(壞)pathsuffix。 – John

0

似乎與操縱target.path(有一個bug報告Apigee這個開放)的問題。

目前的解決方法是使用AssignVariable塊重寫整個URI的AssignMessage政策無論是在:

<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); 
+0

我很欣賞的答覆,但我注意到,我可以將完整的URL,但是這不是給TargetServers/VirtualHosts – John