查看 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 端點和目標中依序排序流程 端點:
Proxy 端點和目標端點都含有可安排在 下列順序:
位置 | 流程類型 | 說明 |
---|---|---|
1 | PreFlow |
如果需要先確保特定程式碼先執行再執行其他程式碼,就相當實用 會發生什麼事 如果 PreFlow 位於目標端點,則 PreFlow 會在 Proxy 端點 PostFlow。 |
2 | 條件式流程 |
條件邏輯的位置。這個字串會在 PreFlow 後方與 PostFlow。
每個區隔只能執行一個條件流程,也就是符合條件的第一個流程
會傳回 true。這意味著您可以執行一個條件式流程作為
每個項目:
|
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 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>
如要進一步瞭解錯誤處理機制,請參閱處理錯誤。