2014-04-01 48 views
1

我剛開始使用Apigee。 我想創建一個API代理,它將根據'if'條件調用兩個目標端點。 我已經創建了一個API併爲其添加了資源,但問題在於這種情況下我得到兩個API。 如果thetype =「ABC」目標點應該是目標1 如果thetype =「XYZ」目標點應該是TARGET2 誰能告訴我如何與它進行呢?一個調用兩個不同目標端點的API代理

回答

0

如果您使用的是API代理編輯器UI,那麼你就可以做到以下幾點:

(1)從API代理編輯器工具欄選擇/新資源

然後,您將看到: enter image description here

(2)輸入字段,可選目標URL,輸入對應於該資源的目標URL。

此工具會同時生成該資源,你可以選擇附加特定資源的政策條件的流動。答案

<ProxyEndpoint name="default"> 
    <RouteRule name="Resource-1"> 
     <Condition>(proxy.pathsuffix MatchesPath &quot;/someResource&quot;) and (request.verb = &quot;GET&quot;)</Condition> 
     <HTTPTargetConnection> 
      <URL>http://myAlternateEndpoint</URL> 
     </HTTPTargetConnection> 
    </RouteRule> 
    .... 
+0

您好蘭迪,這種方法會給我兩個API的,但我想有兩個目標端點只有一個API。我不需要兩個資源。 – madhurika

3

檢查出this question

此工具也將添加所需的路由規則,你生成的XML將這個樣子。在那裏列出了查找RouteRules的詳細信息。 ProxyEndpoint documentation也會有所幫助。

你可以完成你正在使用此代碼嘗試:

<RouteRule name="routeToTarget1"> 
    <Condition>thetype == "abc"</Condition> 
    <TargetEndpoint>target1</TargetEndpoint> 
</RouteRule> 
<RouteRule name="routeToTarget2"> 
    <Condition>thetype == "xyz"</Condition> 
    <TargetEndpoint>target2</TargetEndpoint> 
</RouteRule> 

這些RouteRules將按順序進行評估。

請注意,你可能要下RouteRule有沒有條件,這意味着它會一直匹配。當type不等於「abc」或「xyz」時會發生什麼?假設目標1是默認的,你的代碼應該是這樣的:

<RouteRule name="routeToTarget2"> 
    <Condition>thetype == "xyz"</Condition> 
    <TargetEndpoint>target2</TargetEndpoint> 
</RouteRule> 
<RouteRule name="routeToTarget1"> 
    <TargetEndpoint>target1</TargetEndpoint> 
</RouteRule> 
+0

謝謝邁克。 我嘗試了你發送的代碼,但它給我一個錯誤:: 上傳API vmife的文件時出錯。 messaging.config.beans.InvalidBundle。錯誤:[實體:代理,目標未找到:http://url../../;] – madhurika

+0

'類型'這裏是表中的一列。在這裏,我正在爲兩個目標終端創建一個代理API。現在這些目標端點是兩個不同的API。我有一個篩選條件,其在瀏覽器中工作正常API的一個(HTTPS:// URL過濾$ = thtype當量123) 現在我的病情,我是說 thetype == 123,但它無法正常工作。 – madhurika

+0

你是如何填充「thetype」變量的?我相信你知道,但request.queryparam。$ filter(可以通過使用context.getVariable(「request.queryparam。$ filter」)在JavaScript策略中訪問)將具有值「thtype eq 123」(使用你在上面的評論中的例子)。您需要解析該字符串以獲取值123。 –

相關問題