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