流程呼叫政策

查看 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

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

流程掛鉤名稱。

錯誤參考資料

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
flow.SharedFlowNotFound 500 Either the shared flow does not exist, or the shared flow exists but is not deployed.

Deployment errors

N/A

相關主題