2014-06-27 39 views
-1

假設我想創建以下API:定義層次的API周圍的通配符限制工作

/movies/{movieId}/cast 
/movies/{movieId}/crew 
/movies/{movieId}/awards 

在最新版本的Apigee的,通配符不再允許在基本URL。爲了達到上述目的,我們首先創建了一個API代理/movies。然後,我們定義了三個獨立的資源在它之下,每開始一個通配符:

/*/cast 
/*/crew 
/*/awards 

這裏有幾個問題:

  1. 這是一個層次的API結構來定義通配符的唯一途徑?
  2. 有沒有辦法將這些定義爲3個獨立的API代理?

回答

0

假設您使用basepath/movies創建了一個API,然後使用/ movies/jaws/cast。然後,您可以箱子一個預流策略,以提取PATH變量是這樣的:

<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-URI"> 
    <DisplayName>Extract URI</DisplayName> 
    <FaultRules/> 
    <Properties/> 
    <URIPath> 
     <Pattern>/{movieid}/{function}</Pattern> 
    </URIPath> 
</ExtractVariables> 

您現在有兩個變量,一個變量,一個用於實際的服務。現在,你可以爲每個功能的變量功能一個條件流(演員,工作人員,獎勵...),而不是路徑匹配:

<Flow name="Cast"> 
     <Description/> 
     <Request/> 
     <Response> 
      <Step> 
       <FaultRules/> 
       <Name>Assign-cast</Name> 
      </Step> 
     </Response> 
     <Condition>(function = "cast") and (request.verb = "GET")</Condition> 
    </Flow> 

您可能仍然需要做一些魔法來重寫你的目標路徑,但是你的請求代理路徑仍然是/ jaws/cast,但現在你可以運行特定的策略來對抗Jaws的強制轉換請求。

有關條件流配置的更多信息,請參見http://apigee.com/docs/api-services/api/conditions-referencehttp://apigee.com/docs/gateway-services/content/flow-variables-and-conditions

+0

我希望單獨的API代理能夠爲每個代理設置不同的峯值捕獲限制。我認爲用這種方法,那是不可能的,對吧? 另外,如果將有新的子資源,比如'/ */sales',我將不得不更新代理以包含新的條件流。儘可能地避免碰撞修改,這就是爲什麼我問是否可以選擇單獨的代理。 – prits

+0

您可以爲每個條件流添加單獨的峯值捕捉。資源只是Apigee中的條件流(路徑+動詞)。在這種情況下,我們創建資源(變量+動詞)並獲得相同的結果。 –