條件式流程

本頁適用於 ApigeeApigee Hybrid

查看 Apigee Edge 說明文件。

在條件式流程中,只有在流程條件評估為 true 時,系統才會執行政策 (相較於一律會執行的 PreFlow 或 PostFlow 附加政策)。本節說明如何建立條件式流程。

關於條件式流程

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

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

範例 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 代理程式中,您可以定義與特定資源相對應的條件式流程:

<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 代理程式的網址後置字串。接著,您可以為每個資源的條件式流程附加不同的政策。

範例:建立條件式流程

以下是另一個範例:

  • 建立條件式流程,僅在要求訊息為 HTTP GET 時執行。
  • 為新動態饋給新增政策。

新增條件式流程

全新 Proxy 編輯器

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

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

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

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

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

    新增條件式流程按鈕

  4. 在「新增條件式流程」對話方塊中,選取「路徑和動詞」,然後在「路徑」欄位中輸入您希望出現在要求路徑中的路徑後置字串,以便執行條件式流程。請參閱上方的範例 2

    新增條件式流程按鈕

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

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

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

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

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

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

將政策附加至流程

您已建立條件式流程,現在可以為其附加政策。下一個範例會在流程中新增配額政策,限制 API Proxy 在一段時間內允許的要求訊息數量:

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

    按一下「要求」窗格中「流程 1」旁的加號按鈕。

  5. 在「Add policy step」對話方塊中,按一下「Select existing policy」欄位,然後選取「Quota-1」
  6. 按一下「新增」。

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

「Request」窗格顯示新的流程和配額政策。

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

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

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

傳統 Proxy 編輯器

如要新增條件式流程,請在 API 代理程式建構工具中選取「Develop」分頁標籤。

Proxy Builder 的「Develop」分頁

按一下所需端點中的

新增條件式流程按鈕

您可以使用「新建條件式流程」表單為流程命名,並設定條件。在以下範例中,您會新增簡單的條件,以便評估基底路徑後任何 URI 上 GET 動詞 (而非 PUTPOST 等) 的 HTTP 要求訊息。

在「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>

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

在導覽器選單中,以「issue」為名的條件式流程範例會醒目顯示,且「流程」窗格會顯示「步驟」按鈕。

在「新增步驟」窗格中,系統會使用「Quota」政策類型和「Quota-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 代理程式收到 GET 要求,且 URI 模式為 .../issue/** (/issue/ 與最後一個正斜線後的 URI 中的任何內容),系統就會對該 API 呼叫強制執行配額。

後續步驟

以下主題將進一步說明如何建構條件和使用變數: