控管 Proxy 與資料流的執行方式

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

任何應用程式設計模型皆包含控制處理流程的方法。在 API 中 則這樣就得在流程中完成如要進入流程,您可以新增邏輯、條件陳述式、錯誤處理機制, 依此類推您可以使用流程來控制發生的行為和時間。

流程在 API 要求處理路徑中是連續的階段。當您新增 Proxy 邏輯時 例如驗證 API 金鑰,您可以將邏輯新增為流程指定序列的步驟。 定義條件以指定是否執行邏輯時,您需要新增條件至 資料流

以下流程設定範例定義了 VerifyAPIKey 政策的流程 如果傳入要求路徑的結尾為 /,且要求的 HTTP,就會執行 動詞為 GET

<Flow name="Get Food Carts">
    <Description>Get Food Carts</Description>
    <Request>
        <Step>
            <Name>Verify-API-Key</Name>
        </Step>
    </Request>
    <Condition>(proxy.pathsuffix MatchesPath "/") and (request.verb = "GET")</Condition>
</Flow>

資料流的 <Name> 元素會顯示 Verify-API-Key 值 使用 XML 將其他位置設定的政策加入 Proxy 中,例如:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key">
    <DisplayName>Verify API Key</DisplayName>
    <Properties/>
    <APIKey ref="request.header.x-api-key"/>
</VerifyAPIKey>

設計流程執行序列

您為資料流建立結構後,就能讓邏輯沿著 預先處理路徑

決定要新增邏輯的位置時,您必須先選擇要將其新增至 Proxy 端點,或是 目標端點API Proxy 會在與 Proxy 的 與 Proxy 後端目標互動的用戶端 (Proxy 端點) 以及選用的程式碼 (如果有的話) (目標端點)。

這兩個端點都包含流程,如下所述:

端點類型 說明 支援的流程
ProxyEndpoint 包含最接近用戶端的 API Proxy 流程。提供邏輯執行的位置 呼叫用戶端的時間。 PreFlow、條件式流程、PostFlow、PostClientFlow
TargetEndpoint 包含最靠近後端資源的 API Proxy 流程。提供邏輯的位數 為要求做好準備,然後處理來自後端資源的回應 PreFlow、條件式流程、PostFlow

請使用 XML 設定流程,指定發生什麼情況與發生順序。下列 插圖:顯示如何在 Proxy 端點和目標中依序排序流程 端點:

從 HTTP 用戶端透過 Proxy 端點傳遞至後端目標端點的要求,到達 HTTP 服務。每個要求和回應面板都會顯示前後流程、條件式流程和後流程。此外,我們也提供 Proxy 端點和目標端點的範例。

Proxy 端點和目標端點都含有可安排在 下列順序:

位置 流程類型 說明
1 PreFlow

如果需要先確保特定程式碼先執行再執行其他程式碼,就相當實用 會發生什麼事

如果 PreFlow 位於目標端點,則 PreFlow 會在 Proxy 端點 PostFlow。

2 條件式流程

條件邏輯的位置。這個字串會在 PreFlow 後方與 PostFlow。

每個區隔只能執行一個條件流程,也就是符合條件的第一個流程 會傳回 true。這意味著您可以執行一個條件式流程作為 每個項目:
  • ProxyEndpoint 的要求管道
  • TargetEndpoint 的要求管道
  • ProxyEndpoint 的回應管道
  • TargetEndpoint 的回應管道
3 PostFlow

需要記錄資料及傳送通知,告知發生事件時發生的情況 等。這個外掛程式能在條件式流程和 PreFlow 後執行。

如果 PostFlow 在 Proxy 端點中,且有目標端點,則 Proxy 端點 PostFlow 會在目標端點 PreFlow 之前執行。

4 PostClientFlow (僅限 Proxy 流程) 將回應傳回用戶端後,記錄訊息的流程。

執行程式碼 首先使用 PreFlow

如果您需要確保特定程式碼先執行再執行其他動作,PreFlow 就非常實用 會發生什麼事

PreFlow 在 Proxy 端點中非常適合用於驗證用戶端的程式碼 限制來自用戶端的流量在目標端點中,它會準備傳送要求給 PreFlow 適合用於準備傳送要求的第一步。

例如,通常不希望服務超出配額的用戶端。目的地: 符合這些需求,您會在 PreFlow 區段加入安全性和配額政策。如此一來 您不必擔心在之後的條件式流程中無法評估的條件。 在這個流程中,政策一律會先執行,再進行其他處理。

下列範例中,在處理 條件式流程

<PreFlow name="MyPreFlow">
    <Request>
        <Step>
            <Name>Spike-Arrest</Name>
        </Step>
        <Step>
            <Name>Quota</Name>
        </Step>
    </Request>
    <Response/>
</PreFlow>

建造 在條件式流程中,有條件地執行程式碼

在 PreFlow 和 PostFlow 之間,您可以有條件地執行流程。如此一來 您有機會設定多個邏輯序列,但只想根據下列原則執行一個 Proxy 狀態如果您可以在 PreFlow 或 PostFlow 且不需要任何條件 (換句話說,只有一個路徑通過端點的路徑 支援)。

每個流程都會指定一種條件,測試不同的狀態值。這樣即使 根據條件執行分支版本舉例來說,您可能只想將 XML 轉換為 JSON 要求應用程式在行動裝置上執行時。

在這裡,只有在要求是 GET 要求,且 /issue/** 的 URI 模式 (/問題/ 且在最後一個結尾加上 URI 中的任何內容) 斜線)。

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

如要指定條件,請使用流程變數。如需進一步瞭解如何在條件中使用變數, 請參閱含有流程變數的條件

如需在條件中使用模式比對的範例,請參閱模式比對

有程式碼 使用 PostFlow 在核心邏輯後執行

PostFlow 是執行端點核心邏輯之後、 端點處理作業PostFlow 會在條件式流程和 PreFlow 後執行。

PostFlow 是記錄一些資料、傳送發生通知通知的好地方。 轉換回應訊息格式等等。

在以下範例中,名為 SetResponseHeaders 的 AssignMessage 政策會將標頭 Apigee Edge 傳送回應給用戶端前 就會收集回應訊息

<PostFlow>
    <Response>
        <Step>
            <Name>SetResponseHeaders</Name>
        </Step>
    </Response>
 </PostFlow>

在用戶端收到使用 PostClientFlow 的 Proxy 回應後,執行程式碼

PostClientFlow 可包含以下政策:

* 資料流呼叫政策只能呼叫本身符合 要求加入 PostClientFlow (意即僅包含相容政策)。

如果您納入流程,PostClientFlow 會是最後一個要執行的流程,並在 都會傳送至用戶端

PostClientFlow 適用於最終記錄。您也可以記錄回應訊息的開始和結束時間戳記。

以下範例是附加 MessageLogging 政策的 PostClientFlow,

    ...
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
    <PostClientFlow>
        <Request/>
        <Response>
            <Step>
                <Name>Message-Logging-1</Name>
            </Step>
        </Response>
    </PostClientFlow>
    ...

影片:請觀看這部短片,瞭解如何建立 PostClientFlow 。

如需詳細資訊,請參閱:

在流程中新增邏輯

將邏輯新增至 Proxy 時,請將政策新增至 Proxy 流程。就像 流程會依序執行 (PreFlow、Flow,而 PostFlow),如本主題所述, 流程的內容會依序執行

以下流程設定範例參照了三項政策 (在 自己的 XML 檔案)。Verify-API-Key 參照的政策會在 Remove-API-Key 參照的政策;後面都會加上 Quota

<Flow name="Get Food Cart Menus">
    <Description>Get Food Cart Menus</Description>
    <Request>
        <Step>
            <Name>Verify-API-Key</Name>
        </Step>
        <Step>
            <Name>Remove-API-Key</Name>
        </Step>
        <Step>
            <Name>Quota</Name>
        </Step>
    </Request>
    <Condition>(proxy.pathsuffix MatchesPath "/") and (request.verb = "GET")</Condition>
</Flow>

Apigee Edge 主控台會以一列圖示的形式呈現政策,每列圖示上都有一個圖示 每個物件都會是政策的參照

Apigee Edge 主控台會以一列圖示呈現這類政策,其中每個圖示都代表政策。要求路徑中顯示的圖示包括:驗證 API 金鑰、移除 API 金鑰及配額

偵錯流程

Apigee Edge Trace 工具提供以圖形呈現方式,方便您查看 API Proxy 中的邏輯 會在要求結束後執行工具會說明要求與回應之間的處理程序。這項服務 並未具體說明 PreFlow、條件流程與 PostFlow。

如要進一步瞭解追蹤 Proxy,請參閱「使用追蹤記錄工具」。

處理流程中的錯誤

您可以在 API Proxy 中的多個位置提出錯誤,包括從流程中提出。

以下範例為來自目標端點中 PreFlow 的回應標準,其他 也就是在收到後端目標的回應時立即執行的程式碼。 在此範例中,如果目標的回應不為 200 (成功),就會引發錯誤。

<PreFlow name="PreFlow">
    <Response>
        <Step>
            <Name>RaiseFault</Name>
            <Condition>(response.status.code GreaterThan "200")</Condition>
        </Step>
    </Response>
</PreFlow>

如要進一步瞭解錯誤處理機制,請參閱處理錯誤