流程呼叫政策

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

使用流程摘要政策呼叫從 API Proxy 或其他 API Proxy 的共用流程 共用流程

在共用流程中,您可以建立一系列步驟,以便在執行階段重複使用 例如減少干擾這些步驟是以政策形式實作,如同在 API Proxy 中。流程摘要政策 可讓您從 API Proxy 和其他共用流程叫用共用流程。 運作方式與傳統程式設計語言中的函式呼叫類似。

  • 舉例來說,假設您建立了一個共用流程,提供下列安全性功能: API 金鑰驗證、OAuth 權杖驗證和規則運算式防護。這個共用流程 代表您檢查傳入要求的慣例。 您可以透過 Flow 摘要 政策,叫用來自多個 API Proxy 的共用流程。
  • 如要從共用流程中呼叫其他共用流程,您可以在共用的 流程
,瞭解如何調查及移除這項存取權。

範例

驗證共用流程中的 API 金鑰

在此範例中,共用流程可用來執行常見的安全性相關工作。這裡的 共用流程會驗證 API 金鑰API Proxy 和其他共用流程可以使用「流程摘要」 政策對這個共用流程進行呼叫。

下列共用流程定義包含會執行的 Verify-API-Key 政策 在 API Proxy 中透過資料流呼叫政策呼叫共用流程時。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SharedFlow name="default">
    <Step>
        <Name>Verify-API-Key</Name>
    </Step>
</SharedFlow>

上述共用流程中的 VerifyAPIKey 政策會擷取鍵/值並 進行驗證

<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key">
    <DisplayName>Verify API Key</DisplayName>
    <APIKey ref="request.queryparam.apikey"/>
</VerifyAPIKey>

在 API Proxy 中,使用下列流程呼叫政策會呼叫上述共用流程,以便 驗證 API 金鑰verify-apikey-shared 共用流程組合 (未顯示在這裡) 以 APIProxy 組合設定 Proxy 的方式設定共用流程。

<FlowCallout async="false" continueOnError="false" enabled="true" name="Auth-Flow-Callout">
    <DisplayName>Auth Flow Callout</DisplayName>
    <SharedFlowBundle>verify-apikey-shared</SharedFlowBundle>
</FlowCallout>

將參數傳遞至共用流程

本範例說明如何將參數從資料流政策傳遞至 共用流程在這裡,資料流呼叫政策會呼叫共用流程,以便執行常見的 字串處理函式。共用流程包含用來串連輸入內容的 JavaScript 或/或小寫。流程摘要政策定義的參數會指定 字串輸入內容、輸出內容,以及如何處理輸入內容

  1. String-Handler 資料流呼叫政策會呼叫共用流程。 傳遞參數,指定儲存共用流程輸出內容的變數、什麼是共用流程 要使用的作業,以及要使用的輸入項目 (這裡是字串常值,但也可以是 流程變數)。Parameter 元素會指定變數的名稱和值 建立執行階段共用流程可擷取這些變數,並在自己的程式碼中使用。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <FlowCallout async="false" continueOnError="false" enabled="true" name="String-Handler">
      <DisplayName>String Handler</DisplayName>
      <Parameters>
        <Parameter name="input">Gladys Kravitz</Parameter>
        <Parameter name="operations">concatenate tolowercase</Parameter>
        <Parameter name="outputVariable">string.handler.output</Parameter>
      </Parameters>
      <SharedFlowBundle>StringHandler</SharedFlowBundle>
    </FlowCallout>
    
  2. 以下 default 共用流程包含 SharedStringFunctions JavaScript 政策,此政策會在透過資料流呼叫政策呼叫共用流程時執行。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <SharedFlow name="default">
      <Step>
        <Name>SharedStringFunctions</Name>
      </Step>
    </SharedFlow>
  3. 在共用流程中,下列 SharedStringFunctions JavaScript 政策 指定 SharedStringFunctions.js JavaScript 檔案以及要執行的程式碼。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="SharedStringFunctions">
      <DisplayName>SharedStringFunctions</DisplayName> <Properties/>
      <ResourceURL>jsc://SharedStringFunctions.js</ResourceURL>
    </Javascript>
  4. 以下 JavaScript (SharedStringFunctions.js) 將從 SharedStringFunctions JavaScript 政策。這個指令碼會從 透過流程摘要政策 Parameter 元素建立的變數。

    // Input value from the calling API proxy.
    var handledString = context.getVariable("input");
    // Variable to use for output from this script.
    var outputVariable = context.getVariable("outputVariable");
    // A space-separated list of things to do to the input string.
    // Convert to lower case to handle unintentional capitals in configuration.
    var operation = context.getVariable("operations").toLowerCase();
    
    // If "lowercase" was given as an operation, convert the input to lowercase.
    if (operation.includes("tolowercase")) {
        handledString = handledString.toLowerCase();
    }
    
    // If "concatenate" was given as an operation, concatenate the input.
    if (operation.includes("concatenate")) {
        handledString = handledString.replace(/\s+/g, '');
    }
    // Assign the resulting string to the output variable specified by
    // the calling API proxy.
    context.setVariable(outputVariable, handledString);
  5. 執行作業從 JavaScript 政策回推到共用流程,再流回 來源 API Proxy 中的流程呼叫政策。

元素參照

以下為這項政策可設定的元素和屬性:

<FlowCallout async="false" continueOnError="false" enabled="true" name="Flow-Callout-1">
    <DisplayName>Custom label used in UI</DisplayName>
    <SharedFlowBundle>thereferencedsharedflowbundle</SharedFlowBundle>
</FlowCallout>

&lt;FlowCallout&gt;屬性

<FlowCallout async="false" continueOnError="false" enabled="true" name="Flow-Callout-1">

下表說明所有政策父項元素的共同屬性:

屬性 說明 預設 存在必要性
name

政策的內部名稱。name 屬性的值可以 包含英文字母、數字、空格、連字號、底線和半形句號。此值不能 超過 255 個半形字元

視需要使用 <DisplayName> 元素,為政策加上標籤: 管理使用者介面 Proxy 編輯器,使用不同的自然語言名稱。

不適用 必填
continueOnError

如果設為「false」,系統會在政策失敗時傳回錯誤。這是可預期的情況 大多數政策的行為

如果設為 true,即使政策已發生,流程執行作業仍會繼續執行 失敗。

false 選用
enabled

如要強制執行政策,請設為 true

設為 false 即可停用政策。這項政策不會 仍會強制執行 政策。

true 選用
async

此屬性已淘汰。

false 已淘汰

&lt;DisplayName&gt;元素

name 屬性外,一併使用 管理 UI Proxy 編輯器,使用不同的自然語言名稱。

<DisplayName>Policy Display Name</DisplayName>
預設

不適用

如果省略這個元素,政策的 name 屬性值會是

存在必要性 選用
類型 字串

&lt;SharedFlowBundle&gt;元素

指定要呼叫的共用流程名稱。此元素的值應與 指定 SharedFlowBundle 元素的名稱屬性值。

<SharedFlowBundle/>

在最簡單的範例中,您將所呼叫共用流程的名稱指定為此值。 元素。也就是說,這個元素的值必須與共用流程的 name 相同 屬性值。

<SharedFlowBundle>Shared-Flow-Name</SharedFlowBundle>
 
預設 不適用
外觀狀態

必填。

類型 不適用

屬性

無。

&lt;Parameter&gt;元素

指定要做為變數 (或值來源) 傳遞的參數和值 (或值來源),並傳遞到此項目所呼叫的共用流程中 政策。

使用參數時,您可以指定 會傳遞到政策呼叫的共用流程。這在概念上類似於指定 參數。與函式參數一樣,Flow 摘要 參數的值可以 會因共用流程呼叫的情境而異。

只有在共用流程執行期間,流程摘要參數才會顯示。

語法

這個元素可與下列任一語法格式搭配使用。請注意 使用常值,您指定的值格式將取決於 也可以使用

<!- A literal value in an attribute. --/>
<Parameter name="parameter-name" value='parameter-value' />
<!- A reference to a variable in an attribute. --/>
<Parameter name="parameter-name" ref='source-variable-name' />
<!- A literal value in the element content. --/>
<Parameter name="parameter-name">parameter-value</Parameter>
<!- An reference to an attribute in the element content. --/>
<Parameter name="parameter-name">{source-variable-name}</Parameter>

範例

這個String-Handler資料流呼叫政策傳遞參數,用於指定 儲存共用流程的輸出內容以及要使用的輸入內容。Parameter 元素 指定要建立執行階段的變數名稱和值。共用流程可擷取 並在自己的程式碼中使用這些變數

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FlowCallout async="false" continueOnError="false" enabled="true" name="String-Handler">
  <DisplayName>String Handler</DisplayName>
  <Parameters>
    <Parameter name="input">Gladys Kravitz</Parameter>
    <Parameter name="outputVariable">string.handler.output</Parameter>
  </Parameters>
  <SharedFlowBundle>StringHandler</SharedFlowBundle>
</FlowCallout>
預設 不適用
外觀狀態

必填。

類型 不適用

屬性

屬性 說明 預設 存在必要性 類型
名稱 要使用這個參數建立的執行階段變數名稱。 無。 必填。 字串
參考資料

變數包含要在執行階段使用的值。如果您 。

無。 選填。 字串
要使用這個參數建立的執行階段變數中的值。如果符合以下情況,請省略這個屬性: 您指定了應該為值來源的變數名稱。 無。 選填。 字串

&lt;Parameters&gt;元素

指定要以變數形式傳遞的 &lt;Parameter&gt; 元素組合,該元素會傳遞給此項目呼叫的共用流程。 政策。

語法

<Parameters>
  <Parameter name="parameter-name" value='parameter-value' />
</Parameters>
預設 不適用
外觀狀態

選填。

類型 不適用

屬性

無。

結構定義

流程變數

流程變數會根據 HTTP 在執行階段啟用政策和流程的動態行為 標頭、郵件內容或流程背景資訊。如要進一步瞭解流程變數,請參閱 變數參考資料

變數 說明

apigee.edge.sharedflow.name

範圍:在共用流程執行期間
類型:字串
權限:讀取

共用流程的名稱屬性值。

apigee.edge.flowhook.name

範圍:執行附加至流程的共用流程時 吊人胃口的情節片段。
類型:字串
權限:讀取

流程掛鉤名稱。

錯誤參考資料

本節說明當這項政策觸發錯誤時,傳回的錯誤代碼和錯誤訊息,以及 Edge 設定的錯誤變數。如果您開發的錯誤規則來處理錯誤,請務必瞭解這些資訊。詳情請參閱「政策錯誤須知」和「處理錯誤」。

執行階段錯誤

執行政策時,可能會發生這些錯誤。

錯誤代碼 HTTP 狀態 原因 修正
flow.SharedFlowNotFound 500 共用流程不存在,或是共用流程已存在但尚未部署。

部署錯誤

不適用

相關主題