您正在查看 Apigee Edge 說明文件。
參閱 Apigee X說明文件。 資訊
流程是 API Proxy 的基本構成要素。您可以透過流程設定 API Proxy 執行政策和程式碼的順序,藉此編寫 API 的行為。
如需流程的概念總覽,請參閱「使用流程控管 Proxy 的執行方式」。
本主題將說明如何建立條件式流程,並在高層級別中為流程新增邏輯 (政策)。建立條件的秘訣比本主題介紹更多。詳情請參閱「流程變數總覽」和「含有流程變數的條件」。
將政策附加至流程
Edge 提供多種預先定義的政策,可實施安全性、管理流量及操控訊息。此外,您也可以透過政策新增自訂程式碼,完全自訂訊息處理作業。
例如:
- 將 OAuth 安全性政策附加至 ProxyEndpoint 的要求 PreFlow。由於 ProxyEndpoint 的要求 PreFlow 是管道中的第一個流程,因此如果要求違反安全性政策,您可以立即拒絕。
- 將 JSON 轉換為 XML 的轉換政策附加至 TargetEndpoint 的回應 PostFlow,即可將回應從 JSON 轉換為 XML。
- 將 JavaScript 政策附加至 ProxyEndpoint 的條件式流程,以便執行 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>
在這種設定中,如果 API 代理伺服器收到的 GET 要求含有 .../issue/** 的 URI 模式 (/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 flow 變數。流程變數是一種已命名參照,可保留與 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 代理程式中,您可以定義與特定資源相對應的條件式流程:
<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 時執行。
如要新增條件式流程,請在 API 代理程式建構工具中選取「Develop」分頁標籤。
按一下所需端點的 + 圖示。
您可以使用「新建條件式流程」表單為流程命名,並設定條件。在以下範例中,您會新增簡單的條件,以便評估基底路徑後任何 URI 上 GET
動詞 (而非 PUT
、POST
等) 的 HTTP 要求訊息。
(如要瞭解如何在流程變數和條件中建構條件式陳述式,請參閱相關說明)。
新的流程 (名為「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>
後續步驟
以下主題將詳細說明如何建構條件及使用變數: