本頁適用於 Apigee 和 Apigee Hybrid。
總覽
IntegrationCallout 政策可讓您執行具有 API 觸發條件的應用程式整合。不過,您必須先執行 SetIntegrationRequest 政策,才能執行整合作業。SetIntegrationRequest 政策會建立要求物件,並將該物件做為流程變數提供給 IntegrationCallout 政策。要求物件包含整合詳細資料,例如 API 觸發器名稱、整合專案 ID、整合名稱,以及在 SetIntegrationRequest 政策中設定的其他詳細資料。IntegrationCallout 政策會使用要求物件的流程變數來執行整合作業。您可以設定 IntegrationCallout 政策,將整合執行回應儲存在流程變數中。
如果您想在 Proxy 流程中執行整合,IntegrationCallout 政策就很實用。或者,您也可以指定整合端點做為目標端點,藉此執行整合,而無需設定 IntegrationCallout 政策。詳情請參閱 IntegrationEndpoint。
這項政策是可擴充的政策,視您的 Apigee 授權而定,使用這項政策可能會產生費用或使用量影響。如要瞭解政策類型和使用相關性,請參閱「政策類型」。
<IntegrationCallout>
指定 IntegrationCallout 政策。
預設值 | 不適用 |
是否必要? | 必填 |
類型 | 複雜類型 |
上層元素 | N/A |
子元素 |
<DisplayName> <AsyncExecution> <Request> <Response> |
下表概略說明 <IntegrationCallout>
的子元素:
子元素 | 是否必要 | 說明 |
---|---|---|
<DisplayName> |
選用 | 政策的自訂名稱。 |
<AsyncExecution> |
選用 | 指定整合作業是否必須以同步或非同步模式執行。 |
<Request> |
必填 | 包含由 SetIntegrationRequest 政策建立的 request 物件的流程變數。 |
<Response> |
選用 | 用於儲存整合回應的流程變數。 |
<IntegrationCallout>
元素使用以下語法:
語法
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <IntegrationCallout continueOnError="[true|false]" enabled="[true|false]" name=POLICY_NAME> <DisplayName>POLICY_DISPLAY_NAME</DisplayName> <AsyncExecution>BOOLEAN_ASYNC_EXECUTION</AsyncExecution> <Request clearPayload="[true|false]">REQUEST_FLOW_VARIABLE_NAME</Request> <Response>RESPONSE_FLOW_VARIABLE_NAME</Response> </IntegrationCallout>
範例
以下範例顯示 IntegrationCallout 政策定義:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <IntegrationCallout continueOnError="false" enabled="true" name="Integration-Callout"> <DisplayName>Integration-Callout-1</DisplayName> <AsyncExecution>true</AsyncExecution> <Request clearPayload="true">my_request_flow_var</Request> <Response>my_response_flow_var</Response> </IntegrationCallout>
這個元素包含下列所有政策都適用的屬性:
屬性 | 預設 | 是否必要? | 說明 |
---|---|---|---|
name |
不適用 | 必要 |
政策的內部名稱。 您可以選擇使用 |
continueOnError |
false | 選用 | 將其設為 false ,即可在政策失敗時傳回錯誤。這是大多數政策的預期行為。將其設為 true ,即使政策失敗,流程執行作業仍會繼續進行。另請參閱:
|
enabled |
是 | 選用 | 設為 true 即可強制執行政策。設為 false 即可關閉政策。即使政策仍附加至流程,系統也不會強制執行這項政策。 |
async |
false | 已淘汰 | 此屬性已淘汰。 |
子元素參照
本節將說明<IntegrationCallout>
的子元素。
<DisplayName>
除了 name
屬性之外,您也可以在管理 UI 代理程式編輯器中使用其他更自然的名稱標記政策。
<DisplayName>
元素適用於所有政策。
預設值 | 不適用 |
是否必要? | (非必要) 如果省略 <DisplayName> ,系統會使用政策的 name 屬性值。 |
類型 | 字串 |
上層元素 | <PolicyElement> |
子元素 | 無 |
<DisplayName>
元素使用以下語法:
語法
<PolicyElement> <DisplayName>POLICY_DISPLAY_NAME</DisplayName> ... </PolicyElement>
範例
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
<DisplayName>
元素沒有屬性或子項元素。
<AsyncExecution>
指定執行整合作業的模式。您可以同步或非同步執行整合作業。
如果設為 true
,整合作業會以非同步方式執行。如果設為 false
,整合作業會以同步方式執行。
- 非同步模式:當執行整合作業的要求到達端點時,端點會立即傳回整合執行 ID,但會在
<ScheduleTime>
元素指定的時間開始執行整合作業。如果您尚未設定<ScheduleTime>
元素,系統會立即排程執行整合作業。即使整合作業已排定立即執行,可能仍會在幾秒後才開始執行。當整合作業開始執行時,會發生以下兩件事:- 整合會傳回 HTTP
200 OK
狀態碼,以便呼叫端繼續處理。 - IntegrationCallout 政策完成。
- 整合會傳回 HTTP
- 同步模式:當執行整合作業的要求到達端點時,端點會立即開始執行整合作業,並等待回應。執行作業的時間上限為 2 分鐘。執行作業完成後,端點會傳回包含執行 ID 和其他回應資料的回應。
預設值 | false |
是否必要? | 選用 |
類型 | 布林值 |
上層元素 |
<IntegrationCallout> |
子元素 | 無 |
<AsyncExecution>
元素使用以下語法:
語法
<AsyncExecution>BOOLEAN</AsyncExecution>
範例
以下範例將非同步執行作業設為 true
:
<AsyncExecution>true</AsyncExecution>
<Request>
指定流程變數,其中包含由 SetIntegrationRequest 政策建立的要求物件。IntegrationCallout 政策會將這個要求物件傳送至 Application Integration,以便執行整合。
預設值 | 不適用 |
是否必要? | 必填 |
類型 | 字串 |
上層元素 |
<IntegrationCallout> |
子元素 | 無 |
<Request>
元素使用以下語法:
語法
<Request clearPayload="true">FLOW_VARIABLE_NAME</Request>
範例
以下範例指定要求物件可在 my_request_flow_var
流程變數中使用:
<Request clearPayload="true">my_request_flow_var</Request>
下表說明 <Request>
的屬性:
屬性 | 是否必要 | 類型 | 說明 |
---|---|---|---|
clearPayload |
選用 | 布林值 | 指定在傳送執行整合作業的要求後,是否應從記憶體中清除要求物件。
如果未指定此屬性,預設值為 |
<Response>
指定用於儲存整合作業回應的流程變數。
如果未指定此元素,政策會將回應儲存在 integration.response
流程變數中。
預設值 | integration.response |
是否必要? | 選用 |
類型 | 字串 |
上層元素 |
<IntegrationCallout> |
子元素 | 無 |
您可以透過 integration.response.content
或 flow_variable.content
存取整合作業的輸出內容。<Response>
元素使用以下語法:
語法
<Response>FLOW_VARIABLE_NAME</Response>
範例
以下範例會將整合執行作業的回應儲存在 my_response_flow_var
流程變數中:
<Response>my_response_flow_var</Response>
錯誤代碼
本節說明這項政策觸發錯誤時,Apigee 設定的錯誤代碼、錯誤訊息和錯誤變數。如果您要開發錯誤處理規則,則必須提供這項資訊。如需更多資訊,請參閱「關於政策錯誤的相關資訊」和「處理錯誤」。
執行階段錯誤
政策執行時可能會發生這些錯誤。
錯誤代碼 | HTTP 狀態 | 原因 |
---|---|---|
entities.UnresolvedVariable |
500 |
如果 Apigee 無法解析 integration.project.id 或 integration.name 變數,就會發生這個錯誤。 |
steps.integrationcallout.ExecutionFailed |
500 |
如果後端目標服務傳回 HTTP 錯誤狀態 (例如
|
steps.integrationcallout.NullRequestVariable |
500 |
如果 <Request> 中指定的流程變數為空值,就會發生此錯誤。 |
steps.integrationcallout.RequestVariableNotMessageType |
500 |
如果 Request 元素指定的資料流變數不是 message 類型,就會發生這項錯誤。 |
steps.integrationcallout.RequestVariableNotRequestMessageType |
500 |
如果 Request 元素指定的資料流變數不是「Request message」類型,就會發生這項錯誤。 |
messaging.adaptors.http.filter.GoogleTokenGenerationFailure |
500 |
這類錯誤可能會因服務帳戶設定錯誤而發生。可能的原因包括:
|
錯誤變數
每當政策發生執行錯誤時,Apigee 就會產生錯誤訊息。您可以在錯誤回應中查看這些錯誤訊息。很多時候,系統產生的錯誤訊息可能與產品情境無關。您可能會根據錯誤類型自訂錯誤訊息,讓訊息更有意義。
如要自訂錯誤訊息,您可以使用錯誤規則或 RaiseFault 政策。如要瞭解錯誤規則和 RaiseFault 政策的差異,請參閱 FaultRules 與 RaiseFault 政策。您必須在錯誤規則和 RaiseFault 政策中使用 Condition
元素檢查條件。Apigee 會提供每項政策專屬的錯誤變數,而錯誤變數的值會在政策觸發執行階段錯誤時設定。您可以使用這些變數,檢查特定錯誤情況並採取適當行動。如要進一步瞭解如何檢查錯誤條件,請參閱「建構條件」。
下表說明這項政策的特定錯誤變數。
變數 | 地點 | 範例 |
---|---|---|
fault.name |
fault.name 可與「執行階段錯誤」表格中列出的任何錯誤相符。
錯誤名稱是錯誤代碼的最後一個部分。 |
fault.name Matches "UnresolvedVariable" |
IntegrationCallout.POLICY_NAME.failed |
POLICY_NAME 是擲回錯誤的政策的使用者指定名稱。 | IntegrationCallout.integration-callout-1.failed = true |
相關主題
如要進一步瞭解應用程式整合功能,請參閱「應用程式整合功能總覽」