您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
資料流是 API Proxy 的基本構成要素。資料流可讓您設定 API Proxy 執行政策與程式碼的順序,藉此編寫 API 的行為。
如需流程的概念總覽,請參閱控管 Proxy 透過資料流執行的方式。
本主題說明如何建立條件式流程,以及如何為高階資料流新增邏輯 (政策)。建立條件的技巧比本主題提到的更多。詳情請參閱流程變數總覽和含有流程變數的條件。
將政策附加至資料流
Edge 提供許多不同類型的預先定義的政策,可讓您實作安全性、管理流量及操控訊息。此外,政策還可讓您新增自己的自訂程式碼,完全自訂訊息處理作業。
例如:
- 將 OAuth 安全性政策附加至 ProxyEndpoint 的要求 PreFlow。由於 ProxyEndpoint 的要求 PreFlow 是管道的第一個流程,因此如果要求違反安全性政策,您可以立即拒絕要求。
- 將 JSON 轉換為 XML 轉換政策至 TargetEndpoint 的回應 PostFlow,以便將回應從 JSON 轉換為 XML。
- 將 JavaScript 政策附加至 JavaScript ,以執行 JavaScript 程式碼來處理要求
建立條件式流程後,即可附加政策。選取流程後,按一下要求或回應圖表中的「+ 步驟」圖示,將新的或現有政策新增至流程。
將政策附加至所選流程,即可設定 API Proxy,只針對對該流程 URI 和動詞組合提出的要求,強制執行配額政策。舉例來說,如果您將政策附加至要求中的 learn 流程,則 Proxy 編輯器的程式碼檢視會產生下列 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>
在這項設定中,如果 GET 要求傳入 API Proxy,且 URI 模式為 .../issue/** (/issue/ 在最後一個正斜線後方的任何 URI) 中,系統會對該 API 呼叫強制執行配額。
條件式流程簡介
系統一律會執行 PreFlow 或 PostFlow 附加的所有政策。不過,只有在資料流的條件評估結果為 true 時,系統才會執行條件式流程中的政策。
處理要求和回應時,每個區隔只會執行一個條件式流程,也就是條件評估結果為 true 的第一個流程。這表示您可以在下列各個步驟中,執行一個條件式流程:
- ProxyEndpoint 的要求管道
- TargetEndpoint 的要求管道
- ProxyEndpoint 的回應管道
- TargetEndpoint 的回應管道
影片:觀看短片,進一步瞭解條件式流程。
舉例來說,下列 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 流程變數。流程變數已命名的參照,會保留與 Edge 處理的 API 交易相關聯的狀態資訊。Edge 會定義許多可參照的狀態變數。
符合 REST 樣式的服務是一系列 API 資源。API 資源是一個 URI 路徑片段,用於識別開發人員可透過呼叫 API 存取的部分實體。舉例來說,如果您的服務後端提供天氣預報和天氣預報,您的 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 時才會執行的流程。
如要新增條件式流程,請在 API Proxy 建構工具中選取「開發」分頁標籤。
請按一下所需端點中的「+」圖示。
「新增條件式流程」表單可讓您為流程命名並設定條件。在以下範例中,您在基本路徑之後新增一個簡單的條件,以便評估任何 URI 中 GET
動詞的要求訊息 HTTP (與 PUT
、POST
等不同)。
(瞭解如何在「流程變數和條件」中建構條件陳述式)。
名為「Flow-1」Flow-1的新流程現在會顯示在「Navigator」選單中。
現在請觀察 ProxyEndpoint 的 XML 設定。選取「Navigator」Flow-1選單中的「Flow-1」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>
後續步驟
下列主題詳細說明瞭建構條件及使用變數: