您正在查看 Apigee Edge 說明文件。
前往 Apigee X 說明文件。info
向 API Proxy 發出要求時,您可以根據 API Proxy 的設定方式傳送下列任何或所有資訊:
- 要求標頭
- 查詢參數
- 表單資料
- XML 或 JSON 酬載
- 資源 URI
根據預設,要求中的所有資料都會從 ProxyEndpoint 傳遞至 TargetEndpoint,且不會有所變更。因此,當 TargetEndpoint 向後端伺服器發出要求時,會將原始要求中的所有資訊傳遞至後端服務。
Edge 從後端服務收到的回應也是如此。根據預設,在回應中收到的所有資料都會以未經修改的形式傳遞至發出要求的應用程式。
請問要求資料如何傳送至後端伺服器?
下圖為 API Proxy 定義:
針對這個 API Proxy:
- API Proxy 虛擬主機:"default"
- 虛擬主機定義的網域:「http://myOrg-prod.apigee.net」
- Proxy 基礎路徑:「/v1/weather」
- 由路由規則指定的 TargetEndpoint:「default」
- 目標網址:「http://weather.yahooapis.com」
用戶端應用程式使用下列 curl
指令,向 API Proxy 發出 GET
要求:
curl -X GET http://myOrg-prod.apigee.net/v1/weather/forecastrss?w=12797282
請注意,這項要求包含資源「forecastrss」和一個查詢參數 w
。Edge 會剖析要求,如下所示,並將要求的部分指派給流程變數:
{request.verb} {proxy.basepath}/{proxy.pathsuffix}?{request.querystring}
流程變數會設定下列值:
request.verb
:「GET」proxy.basepath
:「/v1/weather」proxy.pathsuffix
:「預測者」request.querystring
:「w=12797282」
接著,TargetEndpoint 會使用要求中的資訊,向後端服務提出要求:
{request.verb} {target.basepath}/{proxy.pathsuffix}?{request.querystring}
請注意,要求中指定的資源和查詢參數會自動納入對後端伺服器的要求中。從 TargetEndpoint 的定義中,要求會採用以下形式:
curl -X GET http://weather.yahooapis.com/forecastrss?w=12797282
就像查詢參數一樣,您在 API 代理要求中加入的任何標頭或表單參數都會傳遞至後端伺服器。舉例來說,假設您下方的要求包含標頭:
curl -X GET -H 'Content-type:application/xml' http://myOrg-prod.apigee.net/v1/weather/forecastrss?w=12797282
或透過下方表單提出要求,以便納入標頭和表單資料:
curl -X POST -H "Content-type:application/json" -d \ '{"email" : "janetutorialxml@example.com", "firstName" : "Jane", "lastName" : "Tutorial", "userName" : "jtutorialxml" }' \ http://myOrg-prod.apigee.net/v1/register/user
在兩個範例中,標頭和表單資料都會以未經變更的形式傳遞至後端服務。標頭會以 request.headers.count
和 request.headers.names
等流程變數表示。表單資料會以 request.formparam.count
和 request.formparam.names
等流程變數表示。
回應資料如何傳回?
根據預設,Edge 從回應中的後端服務收到的所有資料,都會直接傳遞至產生要求的應用程式。如上所述,要求在回應中傳回的資料可透過 Edge 上的流程變數存取。詳情請參閱流程變數參考資料。
存取 API Proxy 中的請求和回應資料
在許多情況下,您都會希望先修改要求資料,再將資料傳送至後端伺服器。例如:
- 移除 Edge 用來驗證要求的安全性資訊。後端服務不需要這項資訊。
- 新增要傳送至後端服務的資料,例如追蹤使用者或收集數據分析。
- 根據要求資料有條件地處理要求。舉例來說,API Proxy 可以有多個 TargetEndpoints。要求使用的 TargetEndpoint 取決於要求資料。接著,您可以先從要求中刪除這些資料,再傳送至後端服務。
回應中的資料也是如此。在處理回應的過程中,API 代理程式可能會先修改資料,再傳回給要求的應用程式。
存取要求訊息
您可以使用政策存取及變更要求訊息的部分內容。這些部分包括:
- 標頭
- 查詢參數
- 表單參數
- 來源 IP 位址
- HTTP 訊息主體
在一般流程中,一旦要求處理完畢,Proxy 就會將轉換後的要求傳送至目標。
政策可以檢查要求變數,然後根據這些變數的內容轉換或拒絕要求。政策會設定適當的變數來轉換要求,例如與要求標頭相對應的變數。
存取回應訊息
政策可使用適用於回應訊息的變數存取訊息元件,包括標頭、查詢參數、表單參數、來源 IP 位址、HTTP 訊息主體等等。
代理程式會接收回應訊息,然後根據回應中評估的條件,套用一系列政策,藉此修改或轉換回應。
政策可檢查回應變數,然後根據這些變數的內容轉換或拒絕要求。政策會設定適當的變數來轉換回應,例如與回應標頭相對應的變數。
存取流程變數的常見政策
Edge 定義了幾項政策,可用於處理要求和回應資料。這些政策包括:
- AssignMessage 政策:在 API Proxy 流程中建立或修改 HTTP 要求或回應訊息。並建立及填入新的流程變數。
- ExtractVariables 政策:從訊息中擷取內容,包括標頭、URI 路徑、酬載和查詢參數,以便在條件陳述式中使用。然後,政策會將文字模式套用至郵件內容,並在找到符合的內容時設定指定變數。
- JSON 轉 XML 政策和 XML 轉 JSON 政策:將訊息從 JavaScript Object Notation (JSON) 轉換為可延伸標記語言 (XML) 格式,或反之。
- JavaCallout 政策、JavaScript 政策、PythonScript 政策、RegularExpressionProtection 政策:這些政策可讓您編寫指令碼,存取包含要求和回應資料的流程變數。