將資料傳入及傳出後端服務
當 API 用戶端向部署在 API Gateway 的 API 提出要求時,用戶端可以將下列任何或所有資訊做為要求的一部分傳遞:
- 要求標頭
- 查詢參數
- 表單資料
- XML 或 JSON 酬載
- 要求路徑
在建構 API 要求的回應時,後端服務可以將資料傳回 API 用戶端,包括:
- 回應標頭
- XML 或 JSON 酬載
本文說明如何將這項資料傳入及傳出後端服務。
要求資料如何傳遞至後端服務?
API 用戶端要求中的所有資料都會原封不動地傳遞至後端服務。接著,後端服務會剖析要求資料,做為處理要求的一部分。
回應資料如何傳回給 API 用戶端?
後端服務回應中收到的所有資料,都會原封不動地傳遞至 API 用戶端。接著,API 用戶端會處理回應中傳回的任何資料。
要求網址如何傳遞至後端服務?
用於向後端服務發出要求的網址,是由 x-google-backend 擴充功能控管。本節說明設定後端服務網址的選項。
在 OpenAPI 規格中設定後端服務位址和路徑
在用來建立 API 設定的 OpenAPI 規格中,您可以使用 x-google-backend 擴充功能指定後端服務的網址。舉例來說,您可以在表單中指定後端服務:
| 後端 | x-google-backend |
|---|---|
| Cloud Run functions | x-google-backend: address: https://GCP_REGION-PROJECT_ID.cloudfunctions.net/hello |
| Cloud Run | x-google-backend: address: https://[TAG---]SERVICE_NAME-PROJECT_NUMBER.REGION.run.app |
| App Engine 標準環境 | x-google-backend: address: https://PROJECT_ID.appspot.com |
在這些範例中:
- GCP_REGION 指定已部署後端的 Google Cloud 區域。
- PROJECT_ID 指定 Google Cloud 專案 ID。
- TAG 是您要求 Cloud Run 修訂版本時的選用流量標記。另請參閱 Cloud Run 說明文件中的「確定性網址」。
- SERVICE_NAME 是 Cloud Run 服務的名稱。
- PROJECT_NUMBER 是 Google Cloud 專案編號。
- REGION 是區域名稱,例如
us-west1。
此外,OpenAPI 規格中的 path 參數會指定 API 支援的端點或資源。您可以指定絕對路徑,或使用路徑參數的路徑:
| 路徑 | 含參數的路徑 |
|---|---|
paths: /hello: |
paths:
/hello/{name}: |
從 API 要求產生後端服務網址
API Gateway 處理 API 用戶端的要求時,會接收 API 用戶端傳送的要求網址,並將其轉換為用來向後端服務提出要求的網址。這項轉譯作業的具體執行方法取決於您採用的路徑轉譯策略。
x-google-backend 擴充功能的 path_translation 選項支援兩種路徑轉譯策略:
APPEND_PATH_TO_ADDRESS:將用戶端要求中的資源路徑附加至x-google-backend擴充功能的address網址,藉此產生後端服務網址。大多數後端服務都會使用
APPEND_PATH_TO_ADDRESS,因為這表示後端會收到與 API 用戶端指定的資源路徑相同的路徑。CONSTANT_ADDRESS:如x-google-backend擴充功能的address網址所定義,後端服務網址為固定值。如果用戶端要求包含資源路徑,系統會使用查詢參數將資源路徑新增至後端服務網址。Cloud Run 函式通常會使用這個方法。
例如:
APPEND_PATH_TO_ADDRESSaddress:https://PROJECT_ID.appspot.com- 不含 OpenAPI 路徑參數:
- OpenAPI 路徑:
/hello - API 用戶端要求資源路徑:
/hello - 後端服務要求網址:
https://PROJECT_ID.appspot.com/hello
- OpenAPI 路徑:
- 含有 OpenAPI 路徑參數:
- OpenAPI 路徑:
/hello/{name} - API 用戶端要求資源路徑:
/hello/Dave - 後端服務要求網址:
https://PROJECT_ID.appspot.com/hello/Dave
- OpenAPI 路徑:
CONSTANT_ADDRESSaddress:https://GCP_REGION-PROJECT_ID.cloudfunctions.net/hello- 不含 OpenAPI 路徑參數
- OpenAPI 路徑:
/hello - API 用戶端要求資源路徑:
/hello - 後端服務要求網址:
https://GCP_REGION-PROJECT_ID.cloudfunctions.net/hello
- OpenAPI 路徑:
- 含有 OpenAPI 路徑參數
- OpenAPI 路徑:
/hello/{name} - API 用戶端要求資源路徑:
/hello/Dave - 後端服務要求網址:
https://GCP_REGION-PROJECT_ID.cloudfunctions.net/hello?name=Dave
- OpenAPI 路徑:
設定 path_translation
設定 path_translation (設定 x-google-backend 的一部分):
x-google-backend: address: https://GCP_REGION-PROJECT_ID.cloudfunctions.net/hello path_translation: [ APPEND_PATH_TO_ADDRESS | CONSTANT_ADDRESS ]`
path_translation 的預設值取決於您在 OpenAPI 規格中設定 x-google-backend 的位置:
x-google-backend用於 OpenAPI 規格的頂層時,path_translation的預設值為APPEND_PATH_TO_ADDRESS。x-google-backend用於 OpenAPI 規格的操作層級時,path_translation的預設值為CONSTANT_ADDRESS。