條件式流程

本頁內容適用於 ApigeeApigee Hybrid

查看 Apigee Edge 說明文件。

在條件式流程中,只有在流程的條件評估為 true 時,才會執行政策 (與附加至 PreFlow 或 PostFlow 的政策不同,這些政策一律會執行)。本節說明如何建立條件流程。

關於條件式流程

在處理要求和回應期間,每個區隔只會執行一個條件式流程,也就是條件評估結果為 true 的第一個流程。

您可以建立包含 ||(OR) 和 &&(AND) 運算子的條件。不過,根據預設,|| 運算子的優先順序高於 && 運算子。舉例來說,以 A && B || C && D 形式撰寫的條件會評估為 A && (B || C) && D。使用這些運算子時,如要變更優先順序,請務必將運算式加上括號。

下列範例說明使用條件流程的幾種方式。

範例 1

下列 ProxyEndpoint 定義顯示 ProxyEndpoint 對 API Proxy 的任何 HTTP GET 要求執行的條件流程:

<ProxyEndpoint name="default">
  <PreFlow>
    <Request/>
    <Response/>
  </PreFlow>
  <Flows>
    <Flow name="Flow-1">
      <Condition>request.verb="GET"</Condition>
      <Request/>
      <Response/>
    </Flow>
  </Flows>
  <PostFlow>
    <Request/>
    <Response/>
  </PostFlow>
  ...
</ProxyEndpoint>

請注意,條件會參照 request.verb flow 變數。流程變數是具名的參照,可保存與 Apigee 處理的 API 交易相關聯的狀態資訊。Apigee 定義了許多可供參照的狀態變數。

範例 2

如果服務後端提供天氣報告和天氣預報,API 可能會定義兩個對應至這些 API 資源的條件流程:/reports/forecasts。如果 API 呼叫在網址中包含其中一個資源,條件就會評估為 true,並執行附加至條件流程的邏輯。

應用程式開發人員接著會向以下形式的網址提出要求,存取您的資源:

http://myAPIs.myCo.com/weather/reports

或:

http://myAPIs.myCo.com/weather/forecasts

在 API Proxy 中,您可以定義對應特定資源的條件流程:

<ProxyEndpoint name="default">
  <PreFlow>
    <Request/>
    <Response/>
  </PreFlow>
  <Flows>
    <Flow name="Flow-1">
      <Condition>(proxy.pathsuffix MatchesPath "/reports")</Condition>
      <Request/>
      <Response/>
    </Flow>
    <Flow name="Flow-2">
      <Condition>(proxy.pathsuffix MatchesPath "/forecasts")</Condition>
      <Request/>
      <Response/>
    </Flow>
  </Flows>
  <PostFlow>
    <Request/>
    <Response/>
  </PostFlow>
  ...
</ProxyEndpoint>

在本範例中,您會參照 proxy.pathsuffix 流程變數,其中包含用於存取 API Proxy 的網址後置字串部分。然後為每個資源的條件流程附加不同政策。

範例:建立條件式流程

下一個範例:

  • 建立條件流程,僅在要求訊息為 HTTP GET 時執行。
  • 將政策新增至新流程。

新增條件式流程

全新 Proxy 編輯器

如要新增條件流程,請按照下列步驟操作:

  1. 在 Proxy 編輯器中選取「開發」分頁標籤。
  2. 在左側窗格中,依序選取「Proxy endpoints」>「default」

    在左側窗格中,依序選取「Proxy endpoints」>「default」。

    注意:您可能需要在右側窗格中展開視覺化編輯器,才能看到所有元素。 如要這麼做,請按一下並將視覺化編輯器和文字編輯器之間的分隔線稍微向下拖曳。

  3. 按一下「回覆」窗格上方的「+」按鈕。

    新增條件式流程按鈕

  4. 在「Add conditional flow」對話方塊中,選取「Path and verb」,然後在「Path」欄位中,輸入您希望要求路徑包含的路徑字尾,以便執行條件式流程。請參閱上方的範例 2

    新增條件式流程按鈕

    只有在要求是 GET 要求時,才會執行條件流程 (但不適用於 PUTPOST 等)。

    新的流程 (名為 Flow-1) 現在會顯示在「Proxy Endpoint」(Proxy 端點) 窗格中。

    Proxy 端點中顯示的條件流程。

  5. 文字編輯器會顯示新條件流程的 XML 程式碼。

    Proxy 端點中顯示的條件流程。

您可以視需要編輯「條件」元素。請參閱「在流程中加入邏輯」。

將政策附加至流程

條件流程建立完成後,您就能將政策附加至該流程。下一個範例會將配額政策新增至流程,限制 API Proxy 在一段時間內允許的要求訊息數:

  1. 在左側窗格中,按一下「政策」右側的「+」按鈕。
  2. 在「建立政策」對話方塊中,點按「選取政策類型」欄位,然後向下捲動至「流量管理」,並選取「配額」
  3. 按一下「建立」,建立政策。
  4. 在「Request」窗格中,按一下「Flow-1」旁邊的「+」按鈕。

    在「要求」窗格中,按一下「Flow-1」旁的加號按鈕。

  5. 在「新增政策步驟」對話方塊中,按一下「選取現有政策」欄位,然後選取「Quota-1」
  6. 按一下「新增」

「要求」窗格現在會顯示流程和附加政策「Quota-1」

要求窗格顯示新流程和配額政策。

文字編輯器現在會顯示一個步驟,其中包含 XML 的 Flow-1 元素中的 Quota-1 政策:

XML 中顯示的條件式流程和配額政策

完成這項設定後,系統就會對 GET 要求強制執行配額政策。 其他類型的要求不會計入配額政策中的要求數量上限。

傳統 Proxy 編輯器

如要新增條件式流程,請在 API Proxy 建構工具中選取「開發」分頁。

Proxy 建立工具的「開發」分頁

在所需端點中按一下

新增條件式流程按鈕

您可以在「New Conditional Flow」(新增條件式流程) 表單中命名流程,並設定條件。在下列範例中,您會新增簡單的條件,評估要求訊息的 HTTP 是否為 GET 動詞 (而非 PUTPOST 等),且位於基本路徑後的任何 URI。

在「New Conditional Flow」(新增條件式流程) 窗格中,流程會命名為 Flow-1,並設定條件類型、路徑和動詞。

(瞭解如何在含有流程變數的條件中建構條件陳述式)。

新的流程 (名為 Flow-1) 現在會顯示在「導覽器」選單中。

醒目顯示 Flow-1

現在請觀察 ProxyEndpoint 的 XML 設定。在「Navigator」選單中選取「Flow-1」

您會看到下列設定。

<PreFlow name="PreFlow">
    <Request/>
    <Response/>
</PreFlow>
<Flows>
  <Flow name="Flow-1">
    <Request/>
    <Response/>
    <Condition>(proxy.pathsuffix MatchesPath "/**") and (request.verb = "GET")</Condition>
  </Flow>
</Flows>
<PostFlow name="PostFlow">
  <Request/>
  <Response/>
</PostFlow>

建立條件式流程後,即可附加至政策。選取流程後,按一下要求或回應圖表中的「+ Step」圖示,即可在流程中新增或加入現有政策。

在「Navigator」選單中,系統會醒目顯示名為「issue」的條件式流程範例,而「Flow」窗格中會顯示「Step」按鈕。

在「新增步驟」窗格中,系統會建立新的政策例項,政策類型為「配額」,顯示名稱為「配額-2」。

將政策附加至所選流程後,API Proxy 就只會針對傳送至該流程 URI 和動詞組合的要求,強制執行配額政策。舉例來說,如果您將政策附加至要求中的 learn 流程,文字編輯器中會產生下列 XML:

<ProxyEndpoint name="default">
...
   <Flow name="issue">
        <Description/>
        <Request>
            <Step>
                <Name>Quota-2</Name>
            </Step>
        </Request>
        <Response/>
        <Condition>(proxy.pathsuffix MatchesPath "/issue/**") and (request.verb = "GET")</Condition>
    </Flow>
...
</ProxyEndpoint>

在這個設定中,如果 API 代理程式收到 URI 模式為 .../issue/**GET 要求 (URI 中 /issue/ 後方有任何內容,且最後一個正斜線後方有任何內容),系統就會對該 API 呼叫強制執行配額。

後續步驟

如要進一步瞭解如何建構條件和使用變數,請參閱下列主題: