查看 Apigee Edge 說明文件。
  前往
     Apigee X說明文件。 資訊
 
結果
ExtractVariables 政策會從要求或回應中擷取內容,並設定 您對該內容有變數您可以擷取訊息的任何部分,包括標頭、URI 路徑、JSON/XML 酬載、表單 參數和查詢參數系統會為訊息套用文字模式 並在尋找相符項目時,設定含有指定訊息內容的變數。
雖然您經常使用這項政策從要求或回應訊息擷取資訊,但 也能從其他來源擷取資訊,包括 AccessEntity 政策、 XML 物件或 JSON 物件
擷取指定訊息內容後,您可以在其他中參照該變數 來處理要求和回應
影片
如要進一步瞭解「ExtractVariables」政策,請觀看下列影片。
| 影片 | 說明 | 
|---|---|
| 擷取變數 從 XML 酬載中 | 使用擷取變數政策從 XML 酬載中擷取變數。 | 
| 擷取變數 從 JSON 酬載 | 使用擷取變數政策從 JSON 酬載中擷取變數。 | 
| 擷取變數 使用參數 | 從參數中擷取變數,例如查詢、標頭、表單或 URI 參數。 | 
| 擷取變數 利用多重值參數 | 從多重值參數中擷取變數。 | 
| 擷取變數 from 查詢參數 (傳統版 Edge) | 使用傳統版 Edge UI,從查詢參數中擷取變數。 | 
| 擷取變數 來自 XML 或 JSON 酬載 (傳統邊緣) | 使用傳統版 Edge UI,從 XML 或 JSON 酬載中擷取變數。 | 
範例
這些政策程式碼範例說明如何從以下類型的變數中擷取變數: 成果:
GitHub
這些連結指向了您可以在 Edge 上部署及執行的 API Proxy 範例。他們 使用 ExtractVariables,而且位於 Apigee 的 api-platform-samples 存放區中 GitHub。README 檔案會說明 ExtractVariables 在各種情況下的使用方式,以及如何部署及運用 然後執行各個範例
- 擷取 並指派變數樣本 (擷取 JSON 和 XML 訊息中的資料)
- 存取 實體樣本
- 分頁 以及快取範例
- 重新規劃路線 目標網址樣本
- 政策組成混搭範例
URI
<ExtractVariables name="ExtractVariables-1">
   <DisplayName>Extract a portion of the url path</DisplayName>
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/accounts/{id}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>請參考上述政策程式碼範例。<URIPath> 元素會告知
      擷取變數政策來擷取 URI 路徑中的資訊。
      <Pattern> 元素會指定要套用至 URI 路徑的模式。
      系統會將模式視為簡單的範本,大括號代表不同的部分
      指定 URI 路徑
待設定的變數名稱取決於
      <VariablePrefix> 元素,以及用大括號 {} 括住的值
      在 <Pattern> 元素中。這兩個值以介入點連接,
      這樣就會產生 urirequest.id 變數名稱之類的例子。如果沒有
      <VariablePrefix> 元素,那麼變數名稱就是值
      。
請參考上述的範例政策程式碼,以處理下列傳入的要求:
GET http://org1-test.apigee.net/svc1/accounts/12797282
假設 API Proxy 的基本路徑為 /svc1。Apigee Edge 套用
      將上方的 ExtractVariables 政策程式碼擷取到這項傳入要求,並設定變數
      urirequest.id到 12797282。Apigee Edge 執行政策後
      處理流程中的後續政策或程式碼可以參照名為
      urirequest.id 可取得字串值 12797282。
舉例來說,下列 AssignMessage 政策會將該變數的值嵌入 新要求訊息的酬載:
<AssignMessage async="false" continueOnError="false" enabled="true" name="AssignPayload"> <DisplayName>AssignPayload</DisplayName> <Set> <Payload contentType="text/xml"> <IdExtractedFromURI>{urirequest.id}</IdExtractedFromURI> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo> </AssignMessage>
查詢參數
<ExtractVariables name="ExtractVariables-2">
   <DisplayName>Extract a value from a query parameter</DisplayName>
   <Source>request</Source>
   <QueryParam name="code">
      <Pattern ignoreCase="true">DBN{dbncode}</Pattern>
   </QueryParam>
   <VariablePrefix>queryinfo</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>請參考上述的範例政策程式碼,以處理下列傳入的要求:
GET http://org1-test.apigee.net/accounts/12797282?code=DBN88271
當 Apigee Edge 將上方的 ExtractVariables 政策程式碼套用至這個傳入要求時,
      它會將 queryinfo.dbncode 變數設為 88271。Apigee Edge 之後
      執行政策,處理流程中的後續政策或程式碼可能會參照
      名為 queryinfo.dbncode 的變數,以取得字串值 88271。
您現在可以在 Proxy 中存取變數 queryinfo.dbncode。
      舉例來說,下列 AssignMessage 政策會將政策複製到要求的酬載:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetQP</DisplayName> <Set> <Payload contentType="text/xml"> <ExtractQP>{queryinfo.dbncode}</ExtractQP> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
多個參數
<ExtractVariables name="ExtractVariables-2">
   <DisplayName>Extract a value from a query parameter</DisplayName>
   <Source>request</Source>
   <QueryParam name="w">
      <Pattern ignoreCase="true">{firstWeather}</Pattern>
   </QueryParam>
   <QueryParam name="w.2">
     <Pattern ignoreCase="true">{secondWeather}</Pattern>
   </QueryParam>
   <VariablePrefix>queryinfo</VariablePrefix>
 <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>假設您的 API 設計可讓您指定多個使用相同參數的查詢參數 名稱。您可以使用這項政策,擷取查詢的多個例項值。 「w」參數如要在 ExtractVariables 政策中參照這些查詢參數,您必須 使用索引,其中查詢參數的第一個例項沒有任何索引,第二個例項則位於 索引 2,第三個索引為 3,依此類推
請參考上述的範例政策程式碼,以處理下列傳入的要求:
GET http://org1-test.apigee.net/weather?w=Boston&w=Chicago
當 Apigee Edge 將上方的 ExtractVariables 政策程式碼套用至這個傳入要求時,
      它會將 queryinfo.firstWeather 變數設為 Boston,而
      將變數 queryInfo.secondWeather 變更為 Chicago。
您現在可以存取變數 queryinfo.firstWeather 和
      queryinfo.secondWeather
      存取 Proxy 的 IP 位址。舉例來說,下列 AssignMessage 政策會將政策複製到
      要求:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetQP</DisplayName> <Set> <Payload contentType="text/xml"> <ExtractQP1>{queryinfo.firstWeather}</ExtractQP1> <ExtractQP2>{queryinfo.secondWeather}</ExtractQP2> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
標頭
<ExtractVariables name='ExtractVariable-OauthToken'>
  <Source>request</Source>
  <Header name="Authorization">
    <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern>
  </Header>
  <VariablePrefix>clientrequest</VariablePrefix>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>假設您的 API 使用 OAuth 2.0 不記名權杖。請參考上述政策程式碼範例
      處理包含以下標頭的 OAuth 2.0 權杖請求:
      Authorization: Bearer TU08xptfFfeM7aS0xHqlxTgEAdAM.
API 設計人員如想使用符記值 (而非整個 作為快取查詢的索引鍵。您可以使用上方的 ExtractVariables 政策程式碼: 擷取符記
Apigee Edge 將上方的 ExtractVariables 政策程式碼套用至這個標頭時,會
      將 clientrequest.oauthtoken 變數設為
      TU08xptfFfeM7aS0xHqlxTgEAdAM。
您現在可以在clientrequest.oauthtoken
      Proxy 上。舉例來說,下列 AssignMessage 政策會將政策複製到
      要求:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetHeader</DisplayName> <Set> <Payload contentType="text/xml"> <ExtractHeader>{clientrequest.oauthtoken}</ExtractHeader> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
JSON
<ExtractVariables name="ExtractVariables-3"> <Source>response</Source> <JSONPayload> <Variable name="latitude" type="float"> <JSONPath>$.results[0].geometry.location.lat</JSONPath> </Variable> <Variable name="longitude" type="float"> <JSONPath>$.results[0].geometry.location.lng</JSONPath> </Variable> </JSONPayload> <VariablePrefix>geocoderesponse</VariablePrefix> </ExtractVariables>
<JSONPayload>$
      請考慮採用下列 JSON 回應酬載:
{ "results": [{ "geometry": { "location": { "lat": 37.42291810, "lng": -122.08542120 }, "location_type": "ROOFTOP", "viewport": { "northeast": { "lat": 37.42426708029149, "lng": -122.0840722197085 }, "southwest": { "lat": 37.42156911970850, "lng": -122.0867701802915 } } } }] }
當 Apigee Edge 將上方的 ExtractVariables 政策程式碼套用至這則 JSON 訊息時,
      設定兩個變數:geocoderesponse.latitude 和
      geocoderesponse.longitude。這兩個變數使用相同的變數前置字元
      geocoderesponse。這些變數的後置字串是透過
      <Variable> 元素的 name 屬性。
geocoderesponse.latitude 變數會取得值
      37.42291810。geocoderesponse.longitude 變數會取得值
      -122.08542120。
您現在可以在geocoderesponse.latitude
      Proxy 上。舉例來說,下列 AssignMessage 政策會將政策複製到名為「latitude」的標頭
      回應:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetJSONVar</DisplayName> <Add> <Headers> <Header name="latitude">{geocoderesponse.latitude}</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
XML
<ExtractVariables name="ExtractVariables-4"> <Source>response</Source> <XMLPayload> <Namespaces> <Namespace prefix="dir">urn:43BFF88D-D204-4427-B6BA-140AF393142F</Namespace> </Namespaces> <Variable name="travelmode" type="string"> <XPath>/dir:Directions/dir:route/dir:leg/dir:step/@mode</XPath> </Variable> <Variable name="duration" type="string"> <XPath>/dir:Directions/dir:route/dir:leg/dir:step/dir:duration/dir:value</XPath> </Variable> <Variable name="timeunit" type="string"> <XPath>/dir:Directions/dir:route/dir:leg/dir:step/dir:duration/dir:text</XPath> </Variable> </XMLPayload> <VariablePrefix>directionsresponse</VariablePrefix> </ExtractVariables>
<XMLPayload>
      請考慮採用以下 XML 回應酬載:
<Directions xmlns="urn:43BFF88D-D204-4427-B6BA-140AF393142F">
   <status>OK</status>
   <route>
      <summary>I-40 W</summary>
      <leg>
         <step mode="DRIVING">
            <start_location>
               <lat>41.8507300</lat>
               <lng>-87.6512600</lng>
            </start_location>
            <end_location>
               <lat>41.8525800</lat>
               <lng>-87.6514100</lng>
            </end_location>
            <duration>
                <value>19</value>
                <text>minutes</text>
            </duration>
         </step>
      </leg>
   </route>
</Directions>Apigee Edge 將上方的 ExtractVariables 政策程式碼套用至這個 XML 訊息時,
      設定三個變數:directionsresponse.travelmode,
      directionsresponse.duration和directionsresponse.timeunit。所有語言
      變數使用相同的 directionsresponse 變數前置字元。網址的後置字串
      這些變數是由 <Variable> 元素的
      name 屬性。
directionsresponse.travelmode 變數會取得值
      DRIVING。directionsresponse.duration 變數會取得值
      19。directionsresponse.timeunit 變數會取得值
      minutes。
您現在可以在directionresponse.travelmode
      存取 Proxy 的 IP 位址。舉例來說,下列 AssignMessage 政策會將政策複製到名為
      「tmode」回應:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetXMLVar</DisplayName> <Add> <Headers> <Header name="tmode">{directionsresponse.travelmode}</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
關於 ExtractVariables 政策
API 開發人員會建構 API Proxy,根據訊息內容採取不同行為 包括標頭、URI 路徑、酬載和查詢參數Proxy 通常會擷取 部分的內容。使用 ExtractVariables 政策的好處 而負責任的 AI 技術做法 有助於達成這項目標
定義 ExtractVariables 政策時,您可以選擇:
- 要設定的變數名稱
- 變數來源
- 要擷取及設定的變數數量
執行時,政策會將文字模式套用至內容,並在找到相符項目時設定 與內容相關聯的指定變數值。隨後其他政策和程式碼即可使用 以便啟用動態行為或將業務資料傳送至 Edge API Analytics。
若要瞭解如何使用 ExtractVariables 製作內容導向 Analytics 報表,請參閱: 分析 使用自訂數據分析的 API 訊息內容。
範圍
使用 ExtractVariables 政策設定的變數會具有 global 範圍。也就是說,在 ExtractVariables 政策會定義新的變數;您可以透過任何政策存取這個變數,或是 位於流程任何階段 (在 ExtractVariables 政策「之後」執行) 的程式碼。這個 包括:
- PreFlow:ProxyEndpoint 和 TargetEndpoint (要求和回應)
- PostFlow:ProxyEndpoint 和 TargetEndpoint (要求與回應)
- PostClientFlow:ProxyEndpoint (僅限回應,使用 訊息記錄政策)
- 錯誤流程
關於比對和變數建立
ExtractVariables 政策會從要求或回應中擷取資訊,並寫入 將資訊傳送給變數針對可擷取的各類資訊 (例如 URI 路徑或 XML 資料可指定要比對的模式,以及用於保留 擷取的資訊
不過,模式比對的運作方式取決於擷取來源。下列 一節會說明可擷取的兩種基本資訊類別。
比對 URI 路徑、查詢參數、標頭、表單參數和變數
從 URI 路徑、查詢參數、標頭、表單參數及 使用 <Pattern> 標記指定一或多個變數 要比對的模式舉例來說,下列政策示例顯示單一比對模式 URI 路徑:
<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>在這個範例中,urirequest.pathSeg 變數設定了 附加至「/a/」之後的 Proxy.pathsuffix 中舉例來說,假設 您的 API Proxy 為 /basepath/v1。採用傳入要求時 改為 http://myCo.com/basepath/v1/a/b, 變數設為「b」。
指定多個模式
您可以指定多個要比對的專利 (對應至 <Pattern> 標記),其中:
- 所有模式都會經過比對測試。
- 如果沒有相符的模式,政策不會執行任何動作,且變數不會 已建立。
- 如果比對出多個模式,系統會使用路徑片段最長的模式 擷取。
- 如果兩個相符的模式具有最長的路徑區段,則在 政策是用於擷取
在下一個範例中,您會建立包含三種 URI 相符模式的政策 路徑:
<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/b/c/{pathSeg}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>假設 API Proxy 基本路徑為 /basepath/v1 的傳入要求網址 的格式如下:
http://myCo.com/basepath/v1/a/b
在這個範例中,第一個模式與 URI 相符,urirequest.pathSeg 變數會 設為「b」。
如果要求網址是:
http://myCo.com/basepath/v1/a/b/c/d
...然後,第三個模式相符,且 urirequest.pathSeg 變數是 設為「d」。
指定包含多個變數的模式
您可以在比對模式中指定多個變數。舉例來說,假設您指定 比對模式,並包含兩個變數:
<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/{pathSeg1}/c/{pathSeg2}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>針對傳入要求,重整改以 /basepath/v1 做為基礎路徑的 API Proxy 網址:
http://myCo.com/basepath/v1/a/b/c/d
...urirequest.pathSeg1 變數是 設為「b」而 urirequest.pathSeg2 變數 設為「d」。
比對模式中的多個例項
如果項目有多個名稱相同的例項,您也可以比對模式。 舉例來說,您可以提出包含多個查詢參數或多個標頭的要求 名稱相同。以下要求包含兩個名為「w」的查詢參數:
http://myCo.com/basepath/v1/a/b/c/d?w=1&w=2
如要在 ExtractVariables 政策中參照這些查詢參數,請使用索引,其中 第一個查詢參數沒有索引,第二個位於索引 2,第三個 索引 3 等。舉例來說,下列政策會擷取第二個查詢參數的值 名稱為「w」:
<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <QueryParam name="w.2">
      <Pattern ignoreCase="true">{secondW}</Pattern>
   </QueryParam>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>urirequest.secondW 變數是 設為「2」。如果請求中省略第二個查詢參數,則 urirequest.secondW 變數會 並將空無一物。要求中有多個名稱相同的項目時,一律使用索引建立功能。
在模式中使用特殊字元
比對 URI 路徑時,您可以使用「*」和「**」套用萬用字元 其中:
- *與路徑的任一線段比對相符
- 「**」符合路徑的多個區段
例如,您為 <URIPath> 元素指定模式,如下所示 如下:
<URIPath>
  <Pattern ignoreCase="true">/a/*/{id}</Pattern>
  <Pattern ignoreCase="true">/a/**/{id}</Pattern>
</URIPath>第一個模式會比對包含路徑後置字串的要求 (URI 路徑中 路徑,例如「/a/b/c」、「/a/foo/bar」等。第二個模式會與任意數量的路徑相符 「/a/」之後的區隔,例如 "/a/foo/bar/baz/c" 和「/a/b/c」和「/a/foo/bar」
指定查詢參數、標頭和表單參數的模式時,請使用「*」字元 會指定比對任何字元數。舉例來說,比對標頭時 模式為:
*;charset={encoding}
此模式符合「text/xml;charset=UTF-16」值和 「application/xml;charset=ASCII」。
如果傳遞至 ExtractVariables 政策的值包含特殊字元 (例如 「{」,請使用「%」字元,藉此逸出字元。下列範例會逸出「{」和「"}」字元數 因為這類字詞會做為查詢值中的常值字元使用 參數:
<QueryParam>
  <Pattern ignoreCase="true">%{user%} {name}</Pattern>
</QueryParam>在本例中,模式符合「{user} Steve」的值。而非「user」值 Steve」。
比對 JSON 和 XML
從 JSON 和 XML 擷取資料時,您可以在政策中指定一或多個 <Variable> 標記。 <Variable> 標記會指定 儲存擷取資訊的目的地變數名稱,以及 JsonPath (JSON) 或 XPATH (XML)。
政策中的所有 <Variable> 標記 ,方便您從單一政策填入多個變數。如果 <Variable> 標記不可 得出 JSON 或 XML 中的有效欄位,就表示對應的變數不是 已建立。
以下範例顯示 ExtractVariables 政策,該政策會填入 回應的 JSON 主體:
<ExtractVariables name="ExtractVariables-3"> <Source>response</Source> <JSONPayload> <Variable name="latitude" type="float"> <JSONPath>$.results[0].geometry.location.lat</JSONPath> </Variable> <Variable name="longitude" type="float"> <JSONPath>$.results[0].geometry.location.lng</JSONPath> </Variable> </JSONPayload> <VariablePrefix>geocoderesponse</VariablePrefix> </ExtractVariables>
寫入 設定變數
請謹慎選擇要設定的變數名稱,政策會依序執行 第一個擷取模式如果政策將值寫入 政策中的最後一個寫入位置會決定變數的值。(這可能是 。)
舉例來說,您想要擷取可經由查詢參數傳送的符記值 或標頭中,如下所示:
<!-- If token only in query param, the query param determines the value. 
     If token is found in both the query param and header, header sets value. -->
<QueryParam name="token">
  <Pattern ignoreCase="true">{tokenValue}</Pattern>
</QueryParam>
 
<!-- Overwrite tokenValue even if it was found in query parameter. -->
<Header name="Token">
  <Pattern ignoreCase="true">{tokenValue}</Pattern>
</Header>控管系統偵測不到相符結果時的處理方式
如果模式不相符,就不會建立對應的變數。因此,如果 另一個政策參照該變數,可能會導致錯誤。
選項之一是將「<IgnoreUnresolvedVariables>」設為
  在參照變數來設定要處理政策的政策中,傳回 true
  以空白字串 (空值) 表示任何無法解析的變數:
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
元素參照
元素參考資料說明 ExtractVariables 的元素和屬性 政策。
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1"> <DisplayName>Extract Variables 1</DisplayName> <Source clearPayload="true|false">request</Source> <VariablePrefix>myprefix</VariablePrefix> <IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables> <URIPath> <Pattern ignoreCase="false">/accounts/{id}</Pattern> </URIPath> <QueryParam name="code"> <Pattern ignoreCase="true">DBN{dbncode}</Pattern> </QueryParam> <Header name="Authorization"> <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern> </Header> <FormParam name="greeting"> <Pattern>hello {user}</Pattern> </FormParam> <Variable name="request.content"> <Pattern>hello {user}</Pattern> </Variable> <JSONPayload> <Variable name="name"> <JSONPath>{example}</JSONPath> </Variable> </JSONPayload> <XMLPayload stopPayloadProcessing="false"> <Namespaces/> <Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable> </XMLPayload> </ExtractVariables>
<ExtractVariables>屬性
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
下表說明所有政策父項元素的共同屬性:
| 屬性 | 說明 | 預設 | 存在必要性 | 
|---|---|---|---|
| name | 政策的內部名稱。 視需要使用  | 不適用 | 必填 | 
| continueOnError | 如果設為「 如果設為  | false | 選用 | 
| enabled | 如要強制執行政策,請設為  設為  | true | 選用 | 
| async | 此屬性已淘汰。 | false | 已淘汰 | 
<DisplayName>元素
除 name 屬性外,一併使用
  管理 UI Proxy 編輯器,使用不同的自然語言名稱。
<DisplayName>Policy Display Name</DisplayName>
| 預設 | 不適用 如果省略這個元素,政策的  | 
|---|---|
| 存在必要性 | 選用 | 
| 類型 | 字串 | 
<Source>元素
(選用) 指定要剖析的變數。如果
  <Source> 的預設值為 message。message 值
  內容會依情境而異在要求流程中,message 會解析為要求訊息。於
  回應流程,message 會解析為回應訊息。
雖然您經常使用這項政策從要求或回應訊息擷取資訊,但
  即可從任何變數擷取資訊例如,您可以使用
  由 AccessEntity 政策建立的實體來自資料
  由 Service 傳回
  呼叫政策,或從 XML 或 JSON 物件中擷取資訊。
  
  如果 <Source> 無法解析,或是無法解析為非訊息類型,
  政策就無法回應。
<Source clearPayload="true|false">request</Source>
| 預設: | 訊息 | 
| 所在地: | 選用 | 
| 類型: | 字串 | 
屬性
| 屬性 | 說明 | 預設 | 存在必要性 | 類型 | 
|---|---|---|---|---|
| clearPayload | 如要清除
          <Source>從中擷取資料後 | false | 選用 | 布林值 | 
<VariablePrefix>元素
(選用) 系統會結合
  <VariablePrefix>、點,以及您在
  <Pattern> 元素或 <Variable> 元素。例如:
  myprefix.id、myprefix.dbncode或myprefix.oauthtoken.
<VariablePrefix>myprefix</VariablePrefix>
舉例來說,假設名稱值為「user」。
- 如未指定 <VariablePrefix>,系統會擷取擷取的值 會指派給名為user的變數。
- 如果將 <VariablePrefix>指定為 myprefix,系統會擷取 值會指派給名為myprefix.user的變數。
| 預設: | 不適用 | 
| 所在地: | 選用 | 
| 類型: | 字串 | 
<IgnoreUnresolvedVariables>元素
(選用) 設為 true,即可將任何無法解析的變數視為空白字串
  (空值)。如果您希望政策在參照任何參照項目時擲回錯誤,請設為 false
  無法解析
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
| 預設: | 否 | 
| 所在地: | 選用 | 
| 類型: | 布林值 | 
如果 <XMLPayload> 中未解析 XPath 參照,系統會擲回政策
  下列錯誤:
{ "fault":{ "faultstring":"Unresolved xpath path in policy policy_name.", "detail":{ "errorcode":"steps.extractvariables.InvalidXPath" } } }
<URIPath>元素
(選用,但請參閱下表的「所在地」列,瞭解詳細資訊)。擷取值 來自 request 來源訊息的 Proxy.pathsuffix套用至 格式為 proxy.pathsuffix,且不包含 API Proxy 的基本路徑。如果 來源訊息會解析為 response 的訊息類型,那麼這個元素不會執行任何動作。
<URIPath>
   <Pattern ignoreCase="false">/accounts/{id}</Pattern>
</URIPath>您可以使用多個 <Pattern> 元素:
<URIPath>
   <Pattern ignoreCase="false">/accounts/{id}</Pattern>
   <Pattern ignoreCase="false">/accounts/{id}/transactions/{index}</Pattern>
</URIPath>| 預設: | 不適用 | 
| 所在地: | 選用設定。不過,您必須至少提供下列其中一項: <URIPath>、<QueryParam>、<Header>、<FormParam>、<JSONPayload>或<XMLPayload>. | 
| 類型: | 不適用 | 
屬性
| 屬性 | 說明 | 預設 | 存在必要性 | 類型 | 
|---|---|---|---|---|
| ignoreCase | 指定在比對親子時忽略大小寫。 | false | 選用 | 布林值 | 
<QueryParam>元素
(選用,但請參閱下表的「所在地」列,瞭解詳細資訊)。擷取值 來自 request 來源訊息的指定查詢參數。如果 來源訊息會解析為 response 的訊息類型,那麼這個元素會 什麼都不做。
<QueryParam name="code">
   <Pattern ignoreCase="true">DBN{dbncode}</Pattern>
</QueryParam>如果多個查詢參數的名稱相同,請使用索引來參照參數:
<QueryParam name="w.2">
   <Pattern ignoreCase="true">{secondW}</Pattern>
</QueryParam>| 預設: | 不適用 | 
| 所在地: | 選用設定。不過,您必須至少提供下列其中一項: <URIPath>、<QueryParam>、<Header>、<FormParam>、<JSONPayload>或<XMLPayload>. | 
| 類型: | 不適用 | 
屬性
| 屬性 | 說明 | 預設 | 存在必要性 | 類型 | 
|---|---|---|---|---|
| 名稱 | 指定查詢參數的名稱。如果多個查詢參數包含 請使用已建立索引的參照,其中第一個查詢參數 沒有索引,第二個位於索引 2,第三個索引為 3,依此類推。 | 不適用 | 必填 | 字串 | 
<Header>元素
(選用,但請參閱下表的「所在地」列,瞭解詳細資訊)。擷取值 來自指定 request 或 response 訊息的指定 HTTP 標頭。如果有多個標頭 相同的名稱,其值會儲存在陣列中。
<!-- The name is the actual header name. --> <Header name="Authorization"> <!-- Provide a name for your new custom variable here. --> <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern> </Header>
如果多個標頭具有相同名稱,請用索引來參照標記中的個別標頭 陣列:
<Header name="myHeader.2">
   <Pattern ignoreCase="true">{secondHeader}</Pattern>
</Header>或者使用下列指令,列出陣列中的所有標頭:
<Header name="myHeader.values">
   <Pattern ignoreCase="true">{myHeaders}</Pattern>
</Header>| 預設: | 不適用 | 
| 所在地: | 選用設定。不過,您必須至少提供下列其中一項: <URIPath>、<QueryParam>、<Header>、<FormParam>、<JSONPayload>或<XMLPayload>. | 
| 類型: | 不適用 | 
屬性
| 屬性 | 說明 | 預設 | 存在必要性 | 類型 | 
|---|---|---|---|---|
| 名稱 | 指定您要從中擷取值的標頭名稱。如有多個
        標頭的名稱相同,請使用已建立索引的參照,其中第一個例項
        標頭沒有索引,第二個位於索引 2,第三個位於索引 3,以此類推。使用 .values取得陣列中的所有標頭。 | 不適用 | 必填 | 字串 | 
<FormParam>元素
(選用,但請參閱下表的「所在地」列,瞭解詳細資訊)。擷取值
  來自指定 request 或 response 訊息的指定表單參數。表單參數
  只有在指定郵件的 Content-Type 標頭為
  application/x-www-form-urlencoded。
<FormParam name="greeting">
    <Pattern>hello {user}</Pattern>
</FormParam>| 預設: | 不適用 | 
| 所在地: | 選用設定。不過,您必須至少提供下列其中一項: <URIPath>、<QueryParam>、<Header>、<FormParam>、<JSONPayload>或<XMLPayload>. | 
| 類型: | 不適用 | 
屬性
| 屬性 | 說明 | 預設 | 存在必要性 | 類型 | 
|---|---|---|---|---|
| 名稱 | 擷取值的表單參數名稱。 | 不適用 | 必填 | 字串 | 
<Variable>元素
(選用,但請參閱下表的「所在地」列,瞭解詳細資訊)。指定 用於擷取值的變數名稱。
<Variable name="myVar">
    <Pattern>hello {user}</Pattern>
</Variable>如何從變數擷取兩個值:
<Variable name="myVar">
   <Pattern>hello {firstName} {lastName}</Pattern>
</Variable>| 預設: | 不適用 | 
| 所在地: | 選用設定。不過,您必須至少提供下列其中一項: <URIPath>、<QueryParam>、<Header>、<FormParam>、<JSONPayload>或<XMLPayload>. | 
| 類型: | 不適用 | 
屬性
| 屬性 | 說明 | 預設 | 存在必要性 | 類型 | 
|---|---|---|---|---|
| 名稱 | 用來擷取值的變數名稱。 | 不適用 | 必填 | 字串 | 
<JSONPayload>元素
(選用,但請參閱下表的「所在地」列,瞭解詳細資訊)。指定 要擷取變數值的 JSON 格式訊息。JSON 只有在訊息的 Content-Type 標頭為 application/json 時才會執行擷取。
<JSONPayload> <Variable name="name" type="string"> <JSONPath>{example}</JSONPath> </Variable> </JSONPayload>
| 預設: | 不適用 | 
| 所在地: | 選用設定。不過,您必須至少提供下列其中一項: <URIPath>、<QueryParam>、<Header>、<FormParam>、<JSONPayload>或<XMLPayload>. | 
| 類型: | 不適用 | 
<JSONPayload>/<Variable> 元素
(在 JSONPayload 元素中需要)。指定擷取值的變數 。您可以在 <Variable> 元素中加入多個 <Variable> 標記並填入資料 有多個變數
<Variable name="name" type="string"> <JSONPath>{example}</JSONPath> </Variable>
| 預設: | 不適用 | 
| 所在地: | JSONPayload 元素中的必要欄位。 | 
| 類型: | 不適用 | 
屬性
| 屬性 | 說明 | 預設 | 存在必要性 | 類型 | 
|---|---|---|---|---|
| 名稱 | 指定擷取值所屬的變數名稱 。 | 名稱 | 必填 | 字串 | 
| 類型 | 指定變數值的資料類型。 | 不適用 | 選用 | 字串。可用的選項如下: 
 | 
<JSONPayload>/<Variable>/<JSONPath>元素
(在 JSONPayload:Variable 元素中為必要項目。)指定 JSON 路徑,用於擷取 值。
<Variable name="name"> <JSONPath>$.rss.channel.title</JSONPath> </Variable>
| 預設: | 不適用 | 
| 所在地: | 必填 | 
| 類型: | 字串 | 
<XMLPayload>元素
(選用,但請參閱下表的「所在地」列,瞭解詳細資訊)。指定
  XML 格式的訊息,系統會從該訊息中擷取變數值。XML 酬載
  只有在訊息的 Content-Type 標頭時才會擷取。
  是 text/xml、application/xml。
  或 application/*+xml。
<XMLPayload stopPayloadProcessing="false"> <Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> <Namespace prefix="gmail">http://mail.google.com</Namespace> </Namespaces> <Variable name="name" type="boolean"> <XPath>/apigee:test/apigee:example</XPath> </Variable> </XMLPayload>
| 預設: | 不適用 | 
| 所在地: | 選用設定。不過,您必須至少提供下列其中一項: <URIPath>、<QueryParam>、<Header>、<FormParam>、<JSONPayload>或<XMLPayload>. | 
| 類型: | 不適用 | 
屬性
| 屬性 | 說明 | 預設 | 存在必要性 | 類型 | 
|---|---|---|---|---|
| stopPayloadProcessing | 在填入一個變數後,設為  | false | 選用 | 布林值 | 
<XMLPayload>/<Namespaces> 元素
(選用) 指定用於 XPath 評估作業的命名空間。如果使用 您必須在 XPath 運算式中宣告命名空間,如 範例。
<XMLPayload stopPayloadProcessing="false"> <Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> <Namespace prefix="gmail">http://mail.google.com</Namespace> </Namespaces> <Variable name="legName" type="string"> <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath> </Variable> </XMLPayload>
如果您並未在 XPath 運算式中使用命名空間,可省略或註解排除
  <Namespaces> 元素,如以下範例所示:
<XMLPayload stopPayloadProcessing="false"> <!-- <Namespaces/> --> <Variable name="legName" type="string"> <XPath>/Directions/route/leg/name</XPath> </Variable> </XMLPayload>
| 預設: | 不適用 | 
| 所在地: | 選用 | 
| 類型: | 字串 | 
屬性
| 屬性 | 說明 | 預設 | 存在必要性 | 類型 | 
|---|---|---|---|---|
| prefix | 命名空間前置字串。 | 不適用 | 必填 | 字串 | 
<XMLPayload>/<Variable> 元素
(選用) 指定擷取值所分配到的變數。
<Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable>
| 預設: | 不適用 | 
| 所在地: | 選用 | 
| 類型: | 不適用 | 
屬性
| 屬性 | 說明 | 預設 | 存在必要性 | 類型 | 
|---|---|---|---|---|
| 名稱 | 指定擷取值所屬的變數名稱 。 | 名稱 | 必填 | 字串 | 
| 類型 | 指定變數值的資料類型。 | 布林值 | 選用 | 字串。可用的選項如下: 
 | 
<XMLPayload>/<Variable>/<XPath>元素
(在 XMLPayload:Variable 元素中為必要項目。)指定針對 變數。僅支援 XPath 1.0 運算式。
<Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable>
使用命名空間的範例。如果您在 XPath 運算式中使用命名空間,您必須
  <XMLPayload><Namespaces> 區段中的命名空間
  政策。
<Variable name="name" type="boolean"> <XPath>/foo:test/foo:example</XPath> </Variable>
| 預設: | 不適用 | 
| 所在地: | 必填 | 
| 類型: | 字串 | 
錯誤參考資料
本節說明在這項政策觸發錯誤時,所傳回的錯誤代碼和錯誤訊息,以及 Edge 所設定的錯誤變數。 請務必瞭解這份資訊,以便瞭解您是否要擬定錯誤規則, 處理錯誤詳情請參閱這篇文章 瞭解政策錯誤和處理方式 發生錯誤
執行階段錯誤
執行政策時,可能會發生這些錯誤。
| 錯誤程式碼 | HTTP 狀態 | 原因 | 修正 | 
|---|---|---|---|
| steps.extractvariables.ExecutionFailed | 500 | 發生這個錯誤的原因包括: 
 | build | 
| steps.extractvariables.ImmutableVariable | 500 | 政策中使用的變數無法變更。這項政策無法設定 變數。 | |
| steps.extractvariables.InvalidJSONPath | 500 | 如果應用程式的 JSONPath元素使用無效的 JSON 路徑,就會發生這個錯誤
          政策。舉例來說,如果 JSON 酬載沒有Name物件,
          但您在政策中指定Name做為路徑,就會發生這個錯誤。 | build | 
| steps.extractvariables.JsonPathParsingFailure | 500 | 當政策無法剖析 JSON 路徑,並
          從 Source元素中指定的流程變數擷取資料。通常這下
          如果Source元素中指定的流程變數不存在於目前的中,就會發生這類變數
          流程 | build | 
| steps.extractvariables.SetVariableFailed | 500 | 如果政策無法將值設為變數,就會發生這個錯誤。 當您嘗試將值指派給名稱開頭為多個變數的變數時,通常會發生錯誤 具有相同字詞的巢狀以半形句號分隔。 | build | 
| steps.extractvariables.SourceMessageNotAvailable | 500 | 如果系統傳回這個錯誤,表示 message
          政策的 Source元素中指定的變數
          為以下任一項:
 | build | 
| steps.extractvariables.UnableToCast | 500 | 如果政策無法將解壓縮的影片投放,就會發生這個錯誤 變數的值這通常是因為您嘗試將 傳遞至另一種資料類型的變數。 | build | 
部署錯誤
當您部署含有這項政策的 Proxy 時,可能會發生這些錯誤。
| 錯誤名稱 | 原因 | 修正 | 
|---|---|---|
| NothingToExtract | 如果政策沒有任何元素 URIPath、QueryParam、Header、FormParam、XMLPayload或JSONPayload,
          API Proxy 部署作業失敗,因為沒有可擷取的內容。 | build | 
| NONEmptyPrefixMappedToEmptyURI | 如果政策的前置字串定義為 XMLPayload元素下的Namespace元素,但沒有 URI | build | 
| DuplicatePrefix | 如果政策定義的前置字串數量超過
          在 XMLPayload元素下方的Namespace元素中。 | build | 
| NoXPathsToEvaluate | 如果政策沒有 XPath元素XMLPayload元素,那麼 API Proxy 部署作業就會失敗,並發生這個錯誤。 | build | 
| EmptyXPathExpression | 如果政策的 XMLPayload內有空白的XPath運算式
          元素,API Proxy 的部署作業就會失敗。 | build | 
| NoJSONPathsToEvaluate | 如果政策沒有 JSONPath元素JSONPayload元素,那麼 API Proxy 部署作業就會失敗,並發生這個錯誤。 | build | 
| EmptyJSONPathExpression | 如果政策的 XPath運算式包含空白的XMLPayload元素,那麼 API Proxy 部署作業就會失敗。 | build | 
| MissingName | 這項政策的任何政策中沒有 name屬性
          元素,例如QueryParam、Header、FormParam或Variable,否則 API Proxy 部署作業便會失敗。 | build | 
| PatternWithoutVariable | 如果政策未在 Pattern元素內指定的變數,
          那麼 API Proxy 的部署作業就會失敗Pattern元素需要名稱為
          要儲存擷取資料的目標變數。 | build | 
| CannotBeConvertedToNodeset | 如果政策含有 XPath運算式,其中Variable類型為
          是定義為 nodeset
          但運算式無法轉換為 nodeset,則 API Proxy 的部署會失敗。 | build | 
| JSONPathCompilationFailed | 政策無法編譯指定的 JSON 路徑。 | |
| InstantiationFailed | 無法將政策執行個體化。 | |
| XPathCompilationFailed | 如果 XPath元素中使用的前置字元或值不屬於
          政策中宣告的命名空間,接著是
          失敗。 | build | 
| InvalidPattern | 如有任何元素 (例如 URIPath) 中的Pattern元素定義無效,QueryParam、Header、FormParam、XMLPayload或是政策中的JSONPayload,而將 Deployment
          API Proxy 故障。 | build | 
錯誤變數
當這項政策在執行階段觸發錯誤時,即可設定這些變數。如需更多資訊 見你什麼 需要瞭解政策錯誤
錯誤回應範例
{ "fault":{ "detail":{ "errorcode":"steps.extractvariables.SourceMessageNotAvailable" }, "faultstring":"request message is not available for ExtractVariable: EV-ParseJsonResponse" } }
錯誤規則範例
<FaultRule name="Extract Variable Faults"> <Step> <Name>AM-CustomErrorMessage</Name> <Condition>(fault.name = "SourceMessageNotAvailable") </Condition> </Step> <Condition>(extractvariables.EM-ParseJsonResponse.failed = true) </Condition> </FaultRule>