使用流程變數

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

概念上來說,流程變數是指可在政策或政策中存取的物件 公用程式 (例如追蹤工具)。可讓您保留與 Apigee Edge 已處理的 API 交易。

什麼是流程變數?

流程變數存在於 API Proxy 流程中,可在 API 中追蹤狀態 透過具名變數追蹤軟體程式狀態的方式進行交易。流程變數存放區 資訊,例如:

  • 要求應用程式傳送的 IP 位址、標頭、網址路徑和酬載
  • 系統資訊,例如 Edge 收到要求的日期和時間
  • 執行政策時衍生的資料。舉例來說,如果政策執行 OAuth 權杖,Edge 建立流程變數,用來保存要求名稱等資訊 應用程式。
  • 目標系統回應的相關資訊

有些變數為「內建」並在收到 API 要求時自動填入 已收到。這些物件在整個 API 交易中都可使用。您也可以自行建立 使用 AssignMessage 政策或 JavaScript、Node.js 與 Java 程式碼。

如您所見,變數具有範圍和可存取位置,部分取決於 是在 API Proxy 流程中建立一般來說,建立變數後 稍後在 API 交易流程中執行的所有政策和程式碼。

如何使用流程變數?

流程變數用於政策條件流程

  • 政策可以從流程變數中擷取狀態並使用這些變數來執行 這些研究有助於我們找出 能引導後續作業的標準

    舉例來說,VerifyJWT 政策可擷取要驗證的權杖 流程變數,然後對其執行驗證再舉一個例子 JavaScript 政策可擷取流程變數,並將 這些變數。

  • 條件式流程可以參照流程變數,藉此引導 API 流程 有類似切換陳述式在程式設計中的運作方式

    舉例來說,傳回錯誤的政策只有在特定流量變數為 設定。最後,您可以在 Node.js 目標應用程式中取得並設定流程變數。

以下舉例說明各種情境中變數的使用方式。

政策中的流程變數

部分政策將適用 做為輸入內容

舉例來說,下列 AssignMessage 政策需要 資料流變數 client.ip 的值,並放入要求標頭中 呼叫 My-Client-IP。如果新增至 request 流程,這項政策會設定標頭 傳遞至後端目標如果已在 response 流程中設定,系統就會傳送標頭 返回用戶端應用程式。

<AssignMessage name="set-ip-in-header">
    <AssignTo createNew="false" transport="http" type="request">request</AssignTo>
    <Set>
        <Headers>
            <Header name="My-Client-IP">{client.ip}</Header>
        </Headers>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

另一個例子是,執行配額政策時,系統會填入幾個資料流變數 以及政策相關值。其中一個變數是 呼叫 ratelimit.my-quota-policy.used.count (其中 my-quota-policy 是 您感興趣的配額政策的名稱)。

您稍後可能會執行條件式流程 註明「如果目前配額數量低於上限的 50%,介於上午 9 點到下午 5 點之間, 強制執行不同的配額這個條件可能會視目前配額數量的值而定 並位於名為 system.time 的資料變數上,這是內建 Edge 的其中一個變數 變數。

條件式中的流程變數 流程

條件式流程 評估流程變數,並讓 Proxy 動態行為。通常會使用條件 來變更流程、步驟和轉送規則的行為。

這裡有個條件式流程 Proxy 流程步驟中變數 request.verb 的值。在這種情況下 要求動詞為 POST,系統會執行 VerifyAPIKey 政策。這是在容器中執行的常見模式 API Proxy 設定。

<PreFlow name="PreFlow">
    <Request>
        <Step>
            <Condition>request.verb equals "POST"</Condition>
            <Name>VerifyApiKey</Name>
        </Step>
    </Request>
</PreFlow>

您可能會好奇,request.verb 等變數是在哪裡? client.ipsystem.time的來源是建立例項時 填入值?協助您瞭解變數的建立時機和建立時間 請參閱瞭解流程變數 範圍

透過 JavaScript 呼叫的 JavaScript 程式碼中的流程變數 政策

透過 JavaScript 政策,您可以從 API Proxy 流程。這項政策執行的 JavaScript 會使用 Apigee JavaScript 物件模型 可讓您自訂程式碼存取權,來要求、回應和結構定義物件 執行程式碼的 API Proxy 流程。舉例來說,以下程式碼會設定回應標頭 值為從流程變數 target.name 中取得的值。

context.setVariable("response.header.X-Apigee-Target", context.getVariable("target.name"));

使用 JavaScript 讀取及設定變數的技術類似 透過 AssignMessage 政策 (如先前所示) 運作。這只是透過另一種方式 Edge 上有什麼不同請特別注意,JavaScript 政策執行的是 JavaScript 可存取 API Proxy 流程中現有且位於「範圍」的所有流程變數。

Node.js 程式碼中的流程變數

透過要求 apigee-access 模組,您可以設定及存取 部署至 Edge 的 Node.js 程式碼中

以下提供簡單的範例,名為 custom.foo 的變數設為值 Bar。設定完畢後,任何政策或其他程式碼都能使用這個新的變數 會出現於 Proxy 流程中發生的請求。

var http = require('http');
var apigee = require('apigee-access');

http.createServer(function (request, response) {
  apigee.setVariable(request, "custom.foo", "Bar");
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World\n');
}).listen(8124);

console.log('Server running at http://127.0.0.1:8124/');

如要進一步瞭解如何使用 apigee-access 處理變數,請參閱「在 Node.js 中存取流程變數」。

瞭解流程變數範圍

變數範圍與流程或整體「生命週期」有關API Proxy 的 呼叫。

以視覺化方式呈現 API Proxy 的流程

如要瞭解流程變數範圍,請務必瞭解或以視覺化方式呈現訊息 透過 API Proxy 流程API Proxy 包含一系列訊息處理步驟 形成流程Proxy 流程的每個步驟都會評估 Proxy 流程中 並決定後續行動過程中,Proxy 可能會執行政策程式碼,或執行 條件式分支的結果。

下圖說明這個流程序列。請注意這些流程的組成 四個主要區隔:ProxyEndpoint request、TargetEndpoint request、 TargetEndpoint 回應和 ProxyEndpoint 回應

在我們繼續透過 這個主題

變數範圍與 Proxy 流程的關係

如前所述,一旦可以視覺化呈現訊息透過 Proxy 傳送的方式, 即可開始瞭解變數範圍所謂的範圍,指的是 Proxy 流程生命週期的時間點 在變數首次執行個體化時觸發

舉例來說,如果將政策附加至 ProxyEndpoint 要求區隔,該政策無法存取任何 將範圍限定為 TargetEndpoint 要求區段。原因是目標端點 流程的要求區段尚未執行,因此 API Proxy 沒有機會 則會填入該範圍內的變數

下表列出完整的變數範圍集,並指出何時在 Proxy 中 以及可用的流程

變數範圍 這些變數的填入位置
Proxy 要求 ProxyEndpoint 要求區段
目標要求 TargetEndpoint 要求區段
目標回應 TargetEndpoint 回應區段
Proxy 回應 ProxyEndpoint 回應區段
一律可用 Proxy 收到要求後會立即生效。您可以透過 整個 Proxy 流程生命週期

例如,有一個名為 client.ip 的內建 Edge 變數。這個變數有 「Proxy 要求」範圍。系統會自動填入要求外部 IP 位址的用戶端 IP 位址 稱為 Proxy 的 IP 位址當要求首次碰到 ProxyEndpoint 時,就會填入一個號碼,並保持 適用於整個 Proxy 流程生命週期

還有另一個名為 target.url 的內建變數。這個變數的範圍是 「指定要求」系統會在 TargetEndpoint 要求區隔中填入傳送的要求網址。 複製到後端目標如果您嘗試在 ProxyEndpoint 要求中存取 target.url 您會收到 NULL 值。如果您嘗試先設定這個變數再進入範圍 Proxy 不執行任何動作,不會產生錯誤,也不會設定這個變數。

以下的簡單範例示範如何思考變數範圍。如果您要 複製要求物件的完整內容 (標頭、參數、內文),並將該物件指派給 以便傳回呼叫應用程式的回應酬載。您可以將 AssignMessage 政策用於 執行這項工作政策程式碼如下所示:

<AssignMessage name="CopyRequestToResponse">
    <AssignTo type="response" createNew="false">response</AssignTo>
    <Copy source="request"/>
</AssignMessage>

這項政策只會複製 request 物件,並指派給 response 物件。但這項政策應該放在 Proxy 流程的哪個位置? 答案是必須將它放在 TargetEndpoint 回應上,因為 為「目標回應」

參照流程變數

Apigee Edge 中的所有內建變數都會遵循點標記法命名慣例。這項慣例 讓您更容易判斷變數的用途。例如: 《system.time.hour》和《request.content》。

Apigee 會保留不同的前置字串,以妥善整理相關變數。這些前置字串 包括:

  • request
  • response
  • system
  • target

如要在政策中參照變數,請用大括號括住變數。例如: 下列 AssignMessage 政策會使用變數 client.ip 的值和 將其放入名為 Client-IP 的要求標頭中。

<AssignMessage name="set-ip-in-header">
    <AssignTo createNew="false" transport="http" type="request">request</AssignTo>
    <Set>
        <Headers>
            <Header name="Client-IP">{client.ip}</Header>
        </Headers>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

在條件式流程中,不需要使用大括號。以下範例條件 會評估 request.header.accept 變數:

<Step>
    <Condition>request.header.accept = "application/json"</Condition>
    <Name>XMLToJSON</Name>
</Step>

您也可以參照 JavaScript 和 Java 程式碼中的流程變數。如需詳細資訊,請參閱:

流程變數的資料類型

流程變數的每項屬性都有定義明確的資料類型,例如 String、Long、Integer Boolean 或 Collection。您可以在資源中找到 流程變數參考資料。對於透過政策建立的變數, 如要瞭解資料類型資訊,請參閱特定政策參考資料主題。

您手動建立的變數會假設建立時所指定的類型,而且取決於 表示允許的值類型舉例來說,以 Node.js 程式碼建立的變數 只能使用 Number、String、Boolean、null 或未定義。

在政策中使用流程變數

許多政策會在正常執行時建立流程變數。政策參考資料文件 所有政策專用變數。

處理 Proxy 和政策時,請務必諮詢 政策參考資料,瞭解建立的變數和用途。適用對象 舉例來說,配額政策會建立一組變數,內含配額數量相關資訊 以及使用時間與限制、到期時間等

部分政策變數適合用於偵錯。舉例來說,您可以使用「追蹤工具」進行以下操作: 查看 Proxy 流程中特定執行個體設定的變數。

ExtractVariables 政策可讓您 您需要使用擷取自訊息的資料,在自訂變數中填入資料。您可以將查詢 參數、標頭及其他資料例如,您可以剖析要求和回應訊息 根據模式擷取訊息中的特定資料

在以下範例中,「擷取變數」會剖析回應訊息並儲存特定資料 有哪些方法:這項政策會建立兩個自訂變數 geocoderesponse.latitudegeocoderesponse.longitude,以及指派 或是數值

<ExtractVariables name="ParseGeocodingResponse">
  <Source>response</Source>
  <VariablePrefix>geocoderesponse</VariablePrefix>
  <JSONPayload>
    <Variable name="latitude">
      <JSONPath>$.results[0].geometry.location.lat</JSONPath>
    </Variable>
    <Variable name="longitude">
      <JSONPath>$.results[0].geometry.location.lng</JSONPath>
    </Variable>
  </JSONPayload>
</ExtractVariables>

再次提醒您,許多政策會自動建立變數。您可以存取 這些變數都記錄在 Proxy 流程環境中的「政策」參考資料中 各個政策主題

在 JavaScript 程式碼中使用流程變數

您可以直接在 JavaScript 程式碼中,存取及設定在內容執行的變數 API Proxy 後端透過 Apigee JavaScript 物件模型,在 Edge 上執行 JavaScript 後, 直接存取 Proxy 流程變數。

如要在 JavaScript 程式碼中存取變數,請針對下列任一物件呼叫 getter/setter 方法:

  • context
  • proxyRequest
  • proxyResponse
  • targetRequest
  • targetResponse

如您所見,這些物件參照會對應到熟悉的 Proxy 流程模型區段 如先前「視覺化呈現 API Proxy 流程」一節所述。

context 物件對應「全域」可用的變數,例如系統 變數。舉例來說,您可以對 context 物件呼叫 getVariable() 即可領取今年:

var year = context.getVariable('system.time.year');

同樣地,您可以呼叫 setVariable() 來設定自訂變數的值,或是 任何可寫入的現成變數。在這裡,我們要建立一個名為 organization.name.myorg 並指定其值。

var org = context.setVariable('organization.name.myorg', value);

由於這個變數是使用 context 物件建立,因此可供 所有流量區隔 (基本上就像建立全域變數一樣)。

您也可以在使用下列指令執行的 Java 程式碼中,取得/設定 Proxy 流程變數。 Java callout 政策

存取 Node.js 應用程式中的流程變數

您可以從部署至 Edge 的 Node.js 程式碼中取得、設定及刪除流程變數。隨心所欲 就是「require」kubectl 的 apigee-access 模組。詳情請參閱在 Node.js 中存取流程變數

注意事項

以下是關於流程變數的幾個重要注意事項:

  • 部分「開箱即用」系統會將變數執行個體化,並由 Proxy 自動填入 機器學習是向機器提供資料和答案 讓機器自行探索規則的科學相關資訊請參閱流程變數參考資料
  • 您可以建立可在 Proxy 流程中使用的自訂變數。有可能 使用 AssignMessage 政策JavaScript 政策等政策建立變數,以及 。
  • 變數有範圍。舉例來說,系統會在 第一個 Proxy 收到應用程式的要求回應流程中會填入其他變數 每個 Pod 的位址這些回應變數在回應區段前都維持未定義 執行作業。
  • 執行政策時,管理員可以建立及填入政策專屬變數。 每份政策的說明文件,都會列出所有相關的政策專用變數。
  • 條件式流程通常會評估一或多個變數。您需要瞭解 變數 (如果您想建立條件式流程)。
  • 許多政策會使用變數做為輸入或輸出內容。例如由單一變數建立的變數 政策稍後也會由另一個執行個體使用。
  • 您可以直接透過 JavaScript,在 Node.js 中取得並設定許多資料流變數 (以及我們的 JavaScript 物件模型) 或 Java 呼叫政策,用於執行程式碼 在 Edge 上

相關程式碼範例

API Proxy 範例位於 GitHub,可輕鬆下載 相關單位會如何運用資料,並讓他們覺得自己 獲得充分告知,且能夠針對該使用方式表示同意如需相關資訊,請參閱使用 API Proxy 範例 下載及使用範例的相關資訊。如需 API 的說明,請參閱範例清單 以及其用途

包括使用變數和變數處理的 Proxy 範例包括:

  • variables: 示範如何根據傳輸、JSON 和 XML 訊息,擷取及設定變數 內容。
  • policy-mashup-cookbook - 使用政策組成來呼叫 會合併結果,然後為用戶端產生多元化回應 應用程式。如要進一步瞭解這個範例,請參閱使用政策 組合
  • conditional-policy: 根據變數值實作簡單的條件政策強制執行。

相關主題

  • 系統會在 API Proxy 中自動填入所有變數,列於 流程變數參考資料。這份參考資料也會列出每個變數的類型和範圍。
  • 如要瞭解特定政策填入的變數,請參閱參考檔案 政策的主題舉例來說,請參閱 流程變數 配額政策參考資料。