Chính sách ExtractVariables

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến Tài liệu về Apigee X.
thông tin

Nội dung

Chính sách ExtractVariables trích xuất nội dung từ một yêu cầu hoặc phản hồi và đặt giá trị của một biến cho nội dung đó. Bạn có thể trích xuất bất kỳ phần nào của thư, bao gồm tiêu đề, đường dẫn URI, tải trọng JSON/XML, biểu mẫu tham số và tham số truy vấn. Chính sách này hoạt động bằng cách áp dụng một mẫu văn bản cho thông báo và sau khi tìm thấy kết quả trùng khớp, hãy đặt biến với nội dung thông báo được chỉ định.

Mặc dù bạn thường sử dụng chính sách này để trích xuất thông tin từ thư yêu cầu hoặc thư phản hồi, bạn cũng có thể sử dụng nó để trích xuất thông tin từ các nguồn khác, bao gồm các thực thể được tạo bởi Chính sách AccessEntity, Đối tượng XML hoặc đối tượng JSON.

Sau khi trích xuất nội dung thông báo được chỉ định, bạn có thể tham chiếu biến trong chính sách của Google như một phần của việc xử lý yêu cầu và phản hồi.

Video

Hãy xem các video sau để tìm hiểu thêm về chính sách ExtractVariables.

Video Mô tả
Trích xuất biến từ tải trọng XML Trích xuất các biến từ tải trọng XML bằng chính sách Trích xuất biến.
Trích xuất biến từ tải trọng JSON Trích xuất các biến từ tải trọng JSON bằng chính sách Trích xuất biến.
Trích xuất biến từ các tham số Trích xuất biến từ các tham số, chẳng hạn như tham số truy vấn, tiêu đề, biểu mẫu hoặc URI.
Trích xuất biến qua các thông số nhiều giá trị Trích xuất biến từ các tham số nhiều giá trị.
Trích xuất biến từ tham số truy vấn (Classic Edge) Trích xuất các biến từ một tham số truy vấn bằng giao diện người dùng Classic Edge.
Trích xuất biến từ tải trọng XML hoặc JSON (Classic Edge) Trích xuất các biến từ tải trọng XML hoặc JSON bằng giao diện người dùng Classic Edge.

Mẫu

Các mã mẫu về chính sách này minh hoạ cách trích xuất biến từ các loại sau cấu phần phần mềm:

GitHub

Các đường liên kết này trỏ đến các mẫu proxy API đang hoạt động mà bạn có thể triển khai và chạy trên Edge. Chúng sử dụng ExtractVariables và có trong kho lưu trữ mẫu api-platform-samples của Apigee trên GitHub. README giải thích cách sử dụng ExtractVariables trong từng trường hợp cũng như cách triển khai và chạy từng mẫu.

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>

Hãy xem xét mã chính sách mẫu ở trên. Phần tử <URIPath> cho biết Chính sách ExtractVariables để trích xuất thông tin từ đường dẫn URI. Chiến lược phát hành đĩa đơn Phần tử <Pattern> chỉ định mẫu để áp dụng cho đường dẫn URI. Chiến lược phát hành đĩa đơn mẫu được coi là một mẫu đơn giản, với dấu ngoặc nhọn biểu thị các phần khác nhau của đường dẫn URI.

Tên của biến cần đặt được xác định bởi giá trị được chỉ định trong Phần tử <VariablePrefix>, cũng như giá trị nằm trong dấu ngoặc nhọn {} trong phần tử <Pattern>. Hai giá trị được kết hợp bằng một dấu chấm xen kẽ, chẳng hạn như dẫn đến tên biến là urirequest.id. Nếu không có Phần tử <VariablePrefix>, thì tên biến chỉ là giá trị trong dấu ngoặc nhọn.

Hãy xem xét mã chính sách mẫu ở trên hoạt động với yêu cầu đến sau đây:

GET http://org1-test.apigee.net/svc1/accounts/12797282

Giả sử đường dẫn cơ sở cho Proxy API là /svc1. Khi Apigee Edge áp dụng Mã chính sách ExtractVariables ở trên cho yêu cầu đến này, nó sẽ đặt biến urirequest.id thành 12797282. Sau khi Apigee Edge thực thi chính sách, các chính sách hoặc mã tiếp theo trong quy trình xử lý có thể tham chiếu đến biến có tên urirequest.id để nhận giá trị chuỗi 12797282.

Ví dụ: chính sách AttributionMessage sau đây nhúng giá trị của biến đó vào tải trọng của thông báo yêu cầu mới:

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

Tham số truy vấn

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

Hãy xem xét mã chính sách mẫu ở trên hoạt động với yêu cầu đến sau đây:

GET http://org1-test.apigee.net/accounts/12797282?code=DBN88271

Khi Apigee Edge áp dụng mã chính sách ExtractVariables nêu trên cho yêu cầu đến này, nó sẽ đặt biến queryinfo.dbncode thành 88271. Sau Apigee Edge thực thi chính sách, các chính sách hoặc mã tiếp theo trong quy trình xử lý có thể tham chiếu đến biến có tên queryinfo.dbncode để lấy giá trị chuỗi 88271.

Bây giờ, bạn có thể truy cập vào biến queryinfo.dbncode trong proxy. Ví dụ: chính sách FindMessage sau đây sẽ sao chép nội dung đó vào tải trọng của yêu cầu:

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

Nhiều tham số

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

Giả sử thiết kế API của bạn cho phép bạn chỉ định nhiều tham số truy vấn có cùng . Bạn có thể sử dụng chính sách này để trích xuất giá trị của nhiều phiên bản truy vấn tham số "w". Để tham chiếu các tham số truy vấn này trong chính sách ExtractVariables, bạn sử dụng chỉ mục, trong đó trường hợp đầu tiên của tham số truy vấn không có chỉ mục, trường hợp thứ hai là tại chỉ mục 2, chỉ số thứ ba ở chỉ mục 3, v.v.

Hãy xem xét mã chính sách mẫu ở trên hoạt động với yêu cầu đến sau đây:

GET http://org1-test.apigee.net/weather?w=Boston&w=Chicago

Khi Apigee Edge áp dụng mã chính sách ExtractVariables nêu trên cho yêu cầu đến này, phương thức này sẽ đặt biến queryinfo.firstWeather thành Boston và biến queryInfo.secondWeather thành Chicago.

Giờ đây, bạn có thể truy cập vào biến queryinfo.firstWeatherqueryinfo.secondWeather bằng proxy của bạn. Ví dụ: chính sách AttributionMessage sau đây sẽ sao chép nội dung đó vào tải trọng của yêu cầu:

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

Tiêu đề

<ExtractVariables name='ExtractVariable-OauthToken'>
  <Source>request</Source>
  <Header name="Authorization">
    <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern>
  </Header>
  <VariablePrefix>clientrequest</VariablePrefix>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

Giả sử rằng API của bạn sử dụng mã thông báo truy cập OAuth phiên bản 2.0. Hãy xem xét mã chính sách mẫu ở trên làm việc với yêu cầu mang mã thông báo OAuth v2.0 bao gồm tiêu đề như sau: Authorization: Bearer TU08xptfFfeM7aS0xHqlxTgEAdAM.

Là nhà thiết kế API, giả sử bạn muốn sử dụng giá trị mã thông báo (chứ không phải toàn bộ tiêu đề) làm khoá trong tra cứu bộ nhớ đệm. Bạn có thể sử dụng mã chính sách ExtractVariables ở trên để trích xuất mã thông báo.

Khi Apigee Edge áp dụng mã chính sách ExtractVariables ở trên cho tiêu đề này, thì đặt biến clientrequest.oauthtoken thành TU08xptfFfeM7aS0xHqlxTgEAdAM

Giờ đây, bạn có thể truy cập vào biến clientrequest.oauthtoken trong proxy. Ví dụ: chính sách AttributionMessage sau đây sẽ sao chép nội dung đó vào tải trọng của yêu cầu:

<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>$

Hãy xem xét tải trọng phản hồi JSON sau đây:

{
  "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
        }
      }
    }
  }]
}

Khi Apigee Edge áp dụng mã chính sách ExtractVariables nêu trên cho thông báo JSON này, đặt hai biến: geocoderesponse.latitudegeocoderesponse.longitude Cả hai biến đều sử dụng cùng một tiền tố biến của geocoderesponse. Hậu tố cho các biến này được chỉ định rõ ràng bởi Thuộc tính name của phần tử <Variable>.

Biến geocoderesponse.latitude nhận được giá trị 37.42291810 Biến geocoderesponse.longitude nhận được giá trị -122.08542120

Giờ đây, bạn có thể truy cập vào biến geocoderesponse.latitude trong proxy. Ví dụ: chính sách Chỉ định sau đây sẽ sao chép nội dung này vào một tiêu đề có tên là "vĩ độ" trong câu trả lời:

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

Hãy xem xét tải trọng phản hồi XML sau đây:

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

Khi Apigee Edge áp dụng mã chính sách ExtractVariables nêu trên cho thông báo XML này, thiết lập 3 biến: directionsresponse.travelmode, directionsresponse.durationdirectionsresponse.timeunit. Tất cả biến sử dụng cùng tiền tố biến directionsresponse. Hậu tố cho các biến này được chỉ định rõ ràng bởi phần tử <Variable> Thuộc tính name.

Biến directionsresponse.travelmode nhận được giá trị DRIVING Biến directionsresponse.duration nhận được giá trị 19 Biến directionsresponse.timeunit nhận được giá trị minutes

Giờ đây, bạn có thể truy cập vào biến directionresponse.travelmode trong proxy của bạn. Ví dụ: chính sách PagingMessage sau sẽ sao chép nội dung đó vào một tiêu đề có tên "tmode" trong câu trả lời:

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

Giới thiệu về chính sách ExtractVariables

Nhà phát triển API xây dựng các proxy API hoạt động khác nhau dựa trên nội dung của thông báo, bao gồm tiêu đề, đường dẫn URI, tải trọng và tham số truy vấn. Thông thường, proxy trích xuất một số của nội dung này để sử dụng trong câu lệnh điều kiện. Sử dụng chính sách ExtractVariables (Trích xuất) để thực hiện này.

Khi xác định chính sách ExtractVariables, bạn có thể chọn:

  • Tên của các biến cần đặt
  • Nguồn của biến
  • Số lượng biến cần trích xuất và đặt

Khi được thực thi, chính sách này sẽ áp dụng một mẫu văn bản cho nội dung và sau khi tìm thấy kết quả trùng khớp, chính sách sẽ đặt giá trị của biến được chỉ định với nội dung. Sau đó, các chính sách và mã khác có thể sử dụng các biến đó để cho phép hành vi động hoặc gửi dữ liệu doanh nghiệp đến Analytics API Edge.

Để xem cách sử dụng ExtractVariables để tạo báo cáo Analytics theo nội dung, hãy xem Phân tích Nội dung thông báo API sử dụng số liệu phân tích tuỳ chỉnh.

Phạm vi

Các biến được đặt bằng chính sách ExtractVariables có phạm vi toàn cục. Tức là, sau khi Chính sách ExtractVariables xác định một biến mới, bạn có thể truy cập biến đó từ bất kỳ chính sách nào hoặc mã trong bất kỳ giai đoạn nào của quy trình (thực thi sau chính sách ExtractVariables). Chiến dịch này bao gồm:

  • PreFlow: ProxyEndpoint và TargetEndpoint (Yêu cầu và Phản hồi)
  • PostFlow: ProxyEndpoint và TargetEndpoint (Yêu cầu và Phản hồi)
  • PostClientFlow: ProxyEndpoint (Chỉ phản hồi, sử dụng Chính sách ghi nhật ký tin nhắn)
  • Luồng lỗi

Giới thiệu về tính năng so khớp và tạo biến

Chính sách ExtractVariables trích xuất thông tin từ một yêu cầu hoặc phản hồi và ghi cho một biến. Đối với mỗi loại thông tin mà bạn có thể trích xuất, chẳng hạn như đường dẫn URI hoặc Với dữ liệu XML, bạn chỉ định mẫu để khớp và tên của biến được dùng để chứa thông tin được trích xuất.

Tuy nhiên, cách hoạt động của tính năng so khớp mẫu phụ thuộc vào nguồn trích xuất. Nội dung sau đây mô tả hai loại thông tin cơ bản mà bạn có thể trích xuất.

Đường dẫn URI trùng khớp, tham số truy vấn, tiêu đề, tham số biểu mẫu và biến

Khi trích xuất thông tin từ đường dẫn URI, tham số truy vấn, tiêu đề, tham số biểu mẫu và các biến mà bạn sử dụng thẻ &lt;Pattern&gt; để chỉ định một hoặc nhiều phù hợp. Ví dụ: ví dụ về chính sách sau đây thể hiện một mẫu khớp duy nhất cho đường dẫn URI:

<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

Trong ví dụ này, biến urirequest.pathSeg được đặt vào bất kỳ nội dung nào xuất hiện trong proxy.pathsuffix sau "/a/". Ví dụ: giả sử đường dẫn cơ sở cho Proxy API của bạn là /basepath/v1 . Với một yêu cầu đến vào http://myCo.com/basepath/v1/a/b biến được đặt thành "b".

Chỉ định nhiều mẫu

Bạn có thể chỉ định nhiều mẫu để khớp, tương ứng với thẻ &lt;Pattern&gt;, trong đó:

  • Tất cả mẫu đều được kiểm tra để so khớp.
  • Nếu không có mẫu nào khớp, chính sách sẽ không làm gì cả và(các) biến sẽ không đã tạo.
  • Nếu có nhiều mẫu trùng khớp, thì mẫu có phân đoạn đường dẫn dài nhất sẽ được sử dụng cho trích xuất.
  • Nếu hai mẫu khớp có cùng các đoạn đường dẫn dài nhất, thì mẫu được chỉ định đầu tiên trong chính sách này được dùng để trích xuất.

Trong ví dụ tiếp theo, bạn tạo một chính sách chứa 3 mẫu phù hợp cho URI đường dẫn:

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

Giả sử, đối với một Proxy API có đường dẫn cơ sở là /basepath/v1 , URL yêu cầu đến cho proxy API có dạng sau:

http://myCo.com/basepath/v1/a/b

Trong ví dụ này, mẫu đầu tiên khớp với URI và biến urirequest.pathSeg là được đặt thành "b".

Nếu URL yêu cầu là:

http://myCo.com/basepath/v1/a/b/c/d

...thì mẫu thứ ba sẽ khớp và biến urirequest.pathSeg là được đặt thành "d".

Chỉ định mẫu có nhiều biến

Bạn có thể chỉ định nhiều biến trong mẫu phù hợp. Ví dụ: bạn chỉ định một phù hợp với hai biến:

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

Một lần nữa giả sử một Proxy API có đường dẫn cơ sở là /basepath/v1 cho yêu cầu đến URL:

http://myCo.com/basepath/v1/a/b/c/d

...biến urirequest.pathSeg1 là đặt thành "b" và biến urirequest.pathSeg2 là được đặt thành "d".

Khớp nhiều thực thể trong mẫu

Bạn cũng có thể so khớp các mẫu khi có nhiều thực thể của một mục trùng tên. Ví dụ: bạn có thể tạo một yêu cầu chứa nhiều tham số truy vấn hoặc nhiều tiêu đề có cùng tên. Yêu cầu sau đây chứa 2 tham số truy vấn có tên là "w":

http://myCo.com/basepath/v1/a/b/c/d?w=1&w=2

Để tham chiếu các tham số truy vấn này trong chính sách ExtractVariable, bạn sử dụng chỉ mục, trong đó trường hợp đầu tiên của tham số truy vấn không có chỉ mục, trường hợp thứ hai nằm ở chỉ mục 2, trường hợp thứ ba ở chỉ mục 3, v.v. Ví dụ: chính sách sau trích xuất giá trị của tham số truy vấn thứ hai có tên là "w" trong yêu cầu:

<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <QueryParam name="w.2">
      <Pattern ignoreCase="true">{secondW}</Pattern>
   </QueryParam>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

Biến urirequest.secondW là được đặt thành "2". Nếu tham số truy vấn thứ hai bị bỏ qua khỏi yêu cầu, thì biến urirequest.secondW là trống. Bạn có thể sử dụng tính năng lập chỉ mục bất cứ khi nào có nhiều mục trùng tên trong yêu cầu.

Sử dụng ký tự đặc biệt trong mẫu

Khi so khớp đường dẫn URI, bạn có thể sử dụng "*" và "**" ký tự đại diện trong mẫu, trong đó:

  • "*" khớp với bất kỳ phân đoạn nào của đường dẫn
  • "**" khớp với nhiều phân đoạn của đường dẫn

Ví dụ: bạn chỉ định các mẫu cho phần tử &lt;URIPath&gt; như ví dụ dưới đây bên dưới:

<URIPath>
  <Pattern ignoreCase="true">/a/*/{id}</Pattern>
  <Pattern ignoreCase="true">/a/**/{id}</Pattern>
</URIPath>

Mẫu đầu tiên khớp với các yêu cầu có hậu tố (phần đường dẫn URI theo sau đường dẫn cơ sở) chẳng hạn như "/a/b/c", "/a/foo/bar", v.v. Mẫu thứ hai khớp với số lượng đường dẫn bất kỳ các phân đoạn sau "/a/", chẳng hạn như "/a/foo/bar/baz/c", cũng như "/a/b/c" và "/a/foo/bar".

Khi chỉ định các mẫu để truy vấn tham số, tiêu đề và tham số biểu mẫu, ký tự "*" chỉ định khớp với số lượng ký tự bất kỳ. Ví dụ: khi khớp tiêu đề, hãy chỉ định mẫu là:

*;charset={encoding}

Mẫu này khớp với các giá trị "text/xml; character=UTF-16" và "ứng dụng/xml; ký tự=ASCII".

Nếu giá trị được chuyển đến chính sách ExtractVariables chứa một ký tự đặc biệt, chẳng hạn như "{", hãy sử dụng "%" để thoát khỏi ký tự đó. Ví dụ sau thoát khỏi "{" và "}" ký tự trong mẫu vì chúng được dùng dưới dạng ký tự cố định trong giá trị của truy vấn tham số:

<QueryParam>
  <Pattern ignoreCase="true">%{user%} {name}</Pattern>
</QueryParam>

Trong ví dụ này, mẫu khớp với giá trị "{user} Steve" nhưng không phải giá trị "người dùng Steve".

So khớp JSON và XML

Khi trích xuất dữ liệu từ JSON và XML, bạn sẽ chỉ định một hoặc nhiều thẻ &lt;Variable&gt; trong chính sách. Thẻ &lt;Variable&gt; chỉ định tên của biến đích nơi lưu trữ thông tin đã trích xuất và JsonPath (JSON) hoặc XPATH (XML) vào thông tin đã trích xuất.

Tất cả thẻ &lt;Variable&gt; trong chính sách sẽ được đánh giá để bạn có thể điền nhiều biến từ một chính sách. Nếu thẻ &lt;Variable&gt; không đánh giá một trường hợp lệ trong JSON hoặc XML, thì biến tương ứng sẽ không đã tạo.

Ví dụ sau đây thể hiện chính sách ExtractVariables (Trích xuất Biến) điền sẵn 2 biến từ Nội dung JSON của phản hồi:

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

Ghi vào cùng một biến ở nhiều vị trí

Hãy thận trọng khi chọn tên cho các biến để đặt. Chính sách này sẽ thực thi tuần tự từ mẫu trích xuất đầu tiên cho đến mẫu cuối cùng. Nếu chính sách ghi giá trị vào cùng một biến từ nhiều vị trí, lần ghi cuối cùng vào chính sách sẽ xác định giá trị của biến. (Đây có thể là những gì bạn muốn.)

Ví dụ: bạn muốn trích xuất một giá trị mã thông báo có thể được chuyển trong tham số truy vấn hoặc trong tiêu đề, như minh hoạ dưới đây:

<!-- 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>

Kiểm soát điều sẽ xảy ra khi không có kết quả trùng khớp

Nếu mẫu không khớp thì biến tương ứng không được tạo. Do đó, nếu một chính sách khác lại tham chiếu đến biến, điều này có thể gây ra lỗi.

Một lựa chọn là đặt <IgnoreUnresolvedVariables> thành true trong chính sách tham chiếu đến biến để định cấu hình chính sách nhằm xử lý bất kỳ biến không thể giải quyết nào dưới dạng chuỗi trống (null):

<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>

Tham chiếu phần tử

Tham chiếu phần tử mô tả các phần tử và thuộc tính của 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>

&lt;ExtractVariables&gt; thuộc tính

<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">

Bảng sau đây mô tả những thuộc tính chung cho tất cả phần tử mẹ của chính sách:

Thuộc tính Mô tả Mặc định Sự hiện diện
name

Tên nội bộ của chính sách. Giá trị của thuộc tính name có thể chứa chữ cái, số, dấu cách, dấu gạch nối, dấu gạch dưới và dấu chấm. Giá trị này không được vượt quá 255 ký tự.

(Không bắt buộc) Bạn có thể dùng phần tử <DisplayName> để gắn nhãn chính sách trong trình chỉnh sửa proxy giao diện người dùng quản lý bằng tên ngôn ngữ tự nhiên khác.

Không áp dụng Bắt buộc
continueOnError

Đặt thành false để trả về lỗi khi chính sách không thành công. Điều này là dự kiến đối với hầu hết các chính sách.

Đặt thành true để tiếp tục thực thi luồng ngay cả sau khi có chính sách không thành công.

false Không bắt buộc
enabled

Hãy đặt thành true để thực thi chính sách này.

Đặt thành false để tắt chính sách này. Chính sách này sẽ không được thực thi ngay cả khi luồng đó vẫn được liên kết với một luồng.

đúng Không bắt buộc
async

Thuộc tính này không được dùng nữa.

false Không được dùng nữa

&lt;DisplayName&gt; phần tử

Hãy sử dụng cùng với thuộc tính name để gắn nhãn chính sách trong phần trình chỉnh sửa proxy giao diện người dùng quản lý có tên ngôn ngữ tự nhiên khác.

<DisplayName>Policy Display Name</DisplayName>
Mặc định

Không áp dụng

Nếu bạn bỏ qua phần tử này, giá trị của thuộc tính name của chính sách sẽ là đã sử dụng.

Sự hiện diện Không bắt buộc
Loại Chuỗi

&lt;Source&gt; phần tử

(Không bắt buộc) Chỉ định biến cần được phân tích cú pháp. Giá trị của <Source> mặc định là message. Giá trị message có phụ thuộc vào ngữ cảnh. Trong luồng yêu cầu, message phân giải thành thông báo yêu cầu. Trong một quy trình phản hồi, thì message sẽ xử lý thành tin nhắn phản hồi.

Mặc dù bạn thường sử dụng chính sách này để trích xuất thông tin từ thư yêu cầu hoặc thư phản hồi, bạn có thể sử dụng nó để trích xuất thông tin từ bất kỳ biến nào. Ví dụ: bạn có thể sử dụng báo cáo này để trích xuất thông tin từ một pháp nhân được tạo theo chính sách AccessEntity từ dữ liệu được trả về bởi Dịch vụ Chính sách về chú thích hoặc trích xuất thông tin từ đối tượng XML hoặc JSON.

Nếu <Source> không thể được giải quyết hoặc phân giải thành một loại không phải thông báo, thì chính sách đó sẽ không phản hồi.

<Source clearPayload="true|false">request</Source>
Mặc định: tin nhắn
Sự hiện diện: Không bắt buộc
Loại: Chuỗi

Thuộc tính

Thuộc tính Mô tả Mặc định Sự hiện diện Loại
clearPayload

Đặt thành true nếu bạn muốn xoá tải trọng được chỉ định trong &lt;Source&gt; sau khi trích xuất dữ liệu từ đó.

Chỉ sử dụng lựa chọn <clearPayload> khi nội dung nguồn không phải là bắt buộc sau khi thực thi ExtractVariables. Việc đặt thành true sẽ miễn phí tăng bộ nhớ mà tin nhắn sử dụng.

false

Không bắt buộc Boolean

&lt;VariablePrefix&gt; phần tử

(Không bắt buộc) Tên biến hoàn chỉnh được tạo bằng cách kết hợp <VariablePrefix>, một dấu chấm và tên mà bạn xác định trong {dấu ngoặc nhọn} trong Phần tử <Pattern> hoặc phần tử &lt;Variable&gt;. Ví dụ: myprefix.id, myprefix.dbncode hoặc myprefix.oauthtoken.

<VariablePrefix>myprefix</VariablePrefix>

Ví dụ: giả sử giá trị của tên là "người dùng".

  • Nếu bạn không chỉ định <VariablePrefix>, thì các giá trị được trích xuất sẽ được gán cho biến có tên user.
  • Nếu <VariablePrefix> được chỉ định là tiền tố của tôi, thì tiền tố được trích xuất các giá trị này được gán cho biến có tên myprefix.user.
Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc
Loại: Chuỗi

&lt;IgnoreUnresolvedVariables&gt; phần tử

(Không bắt buộc) Đặt thành true để coi mọi biến không thể giải quyết là một chuỗi trống (rỗng). Hãy đặt thành false nếu bạn muốn chính sách gửi thông báo lỗi khi bất kỳ thành phần nào được tham chiếu đến là không thể giải quyết được.

<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
Mặc định: Sai
Sự hiện diện: Không bắt buộc
Loại: Boolean

Nếu một tệp tham chiếu diễn ra ở trạng thái không được giải quyết trong <XMLPayload>, thì chính sách này sẽ gửi đi lỗi sau đây:

{
   "fault":{
      "faultstring":"Unresolved xpath path in policy policy_name.",
      "detail":{
         "errorcode":"steps.extractvariables.InvalidXPath"
      }
   }
}

&lt;URIPath&gt; phần tử

(Không bắt buộc, nhưng hãy xem hàng Sự hiện diện trong bảng bên dưới để biết thêm thông tin.) Trích xuất một giá trị từ proxy.pathsuffix của thông báo nguồn yêu cầu. Đường dẫn được áp dụng cho mẫu là proxy.pathsuffix, không bao gồm đường dẫn cơ sở cho Proxy API. Nếu thì thông báo nguồn sẽ phân giải thành loại thông báo là phản hồi, thì phần tử này sẽ không làm gì cả.

<URIPath>
   <Pattern ignoreCase="false">/accounts/{id}</Pattern>
</URIPath>

Có thể sử dụng nhiều phần tử &lt;Pattern&gt;:

<URIPath>
   <Pattern ignoreCase="false">/accounts/{id}</Pattern>
   <Pattern ignoreCase="false">/accounts/{id}/transactions/{index}</Pattern>
</URIPath>
Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc. Tuy nhiên, bạn phải cung cấp ít nhất một trong các thông tin sau: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload> hoặc <XMLPayload>.
Loại: Không áp dụng

Thuộc tính

Thuộc tính Mô tả Mặc định Sự hiện diện Loại
ignoreCase Chỉ định để bỏ qua chữ hoa chữ thường khi so khớp mẫu cha.

false

Không bắt buộc Boolean

&lt;QueryParam&gt; phần tử

(Không bắt buộc, nhưng hãy xem hàng Sự hiện diện trong bảng bên dưới để biết thêm thông tin.) Trích xuất một giá trị từ tham số truy vấn được chỉ định của thông báo nguồn yêu cầu. Nếu thông báo nguồn phân giải thành loại thông báo là phản hồi, thì phần tử này sẽ không có gì.

<QueryParam name="code">
   <Pattern ignoreCase="true">DBN{dbncode}</Pattern>
</QueryParam>

Nếu nhiều tham số truy vấn có cùng tên, hãy sử dụng chỉ mục để tham chiếu đến các tham số đó:

<QueryParam name="w.2">
   <Pattern ignoreCase="true">{secondW}</Pattern>
</QueryParam>
Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc. Tuy nhiên, bạn phải cung cấp ít nhất một trong các thông tin sau: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload> hoặc <XMLPayload>.
Loại: Không áp dụng

Thuộc tính

Thuộc tính Mô tả Mặc định Sự hiện diện Loại
tên Chỉ định tên của tham số truy vấn. Nếu nhiều tham số truy vấn có cùng tên, sử dụng tham chiếu được lập chỉ mục, trong đó phiên bản đầu tiên của tham số truy vấn không có chỉ mục, mục thứ hai ở chỉ mục 2, mục thứ ba ở chỉ mục 3, v.v.

Không áp dụng

Bắt buộc Chuỗi

&lt;Header&gt; phần tử

(Không bắt buộc, nhưng hãy xem hàng Sự hiện diện trong bảng bên dưới để biết thêm thông tin.) Trích xuất một giá trị từ tiêu đề HTTP được chỉ định của thông báo yêu cầu hoặc thông báo phản hồi được chỉ định. Nếu nhiều tiêu đề có cùng tên, giá trị của chúng sẽ được lưu trữ trong một mảng.

<!-- 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>

Nếu nhiều tiêu đề có cùng tên, hãy sử dụng chỉ mục để tham chiếu từng tiêu đề trong mảng:

<Header name="myHeader.2">
   <Pattern ignoreCase="true">{secondHeader}</Pattern>
</Header>

Hoặc dưới đây để liệt kê tất cả các tiêu đề trong mảng:

<Header name="myHeader.values">
   <Pattern ignoreCase="true">{myHeaders}</Pattern>
</Header>
Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc. Tuy nhiên, bạn phải cung cấp ít nhất một trong các thông tin sau: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload> hoặc <XMLPayload>.
Loại: Không áp dụng

Thuộc tính

Thuộc tính Mô tả Mặc định Sự hiện diện Loại
tên Chỉ định tên của tiêu đề mà bạn trích xuất giá trị. Nếu có nhiều tiêu đề có cùng tên, hãy sử dụng tham chiếu được lập chỉ mục, trong đó bản sao đầu tiên của thuộc tính tiêu đề không có chỉ mục, tiêu đề thứ hai ở chỉ mục 2, tiêu đề thứ ba ở chỉ mục 3, v.v. Hãy sử dụng .values để lấy tất cả tiêu đề trong mảng.

Không áp dụng

Bắt buộc Chuỗi

&lt;FormParam&gt; phần tử

(Không bắt buộc, nhưng hãy xem hàng Sự hiện diện trong bảng bên dưới để biết thêm thông tin.) Trích xuất một giá trị từ thông số biểu mẫu được chỉ định của thông báo yêu cầu hoặc thông báo phản hồi được chỉ định. Thông số biểu mẫu chỉ có thể trích xuất được khi tiêu đề Content-Type của thư được chỉ định là application/x-www-form-urlencoded

<FormParam name="greeting">
    <Pattern>hello {user}</Pattern>
</FormParam>
Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc. Tuy nhiên, bạn phải cung cấp ít nhất một trong các thông tin sau: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload> hoặc <XMLPayload>.
Loại: Không áp dụng

Thuộc tính

Thuộc tính Mô tả Mặc định Sự hiện diện Loại
tên Tên của thông số biểu mẫu mà bạn trích xuất giá trị.

Không áp dụng

Bắt buộc Chuỗi

&lt;Variable&gt; phần tử

(Không bắt buộc, nhưng hãy xem hàng Sự hiện diện trong bảng bên dưới để biết thêm thông tin.) Chỉ định tên của biến mà từ đó trích xuất giá trị.

<Variable name="myVar">
    <Pattern>hello {user}</Pattern>
</Variable>

Cách trích xuất hai giá trị từ biến:

<Variable name="myVar">
   <Pattern>hello {firstName} {lastName}</Pattern>
</Variable>
Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc. Tuy nhiên, bạn phải cung cấp ít nhất một trong các thông tin sau: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload> hoặc <XMLPayload>.
Loại: Không áp dụng

Thuộc tính

Thuộc tính Mô tả Mặc định Sự hiện diện Loại
tên Tên của biến cần trích xuất giá trị.

Không áp dụng

Bắt buộc Chuỗi

&lt;JSONPayload&gt; phần tử

(Không bắt buộc, nhưng hãy xem hàng Sự hiện diện trong bảng bên dưới để biết thêm thông tin.) Chỉ định Thông báo theo định dạng JSON mà từ đó giá trị của biến sẽ được trích xuất. JSON chỉ được thực hiện khi tiêu đề Content-Type của thông báo là application/json.

<JSONPayload>
   <Variable name="name" type="string">
      <JSONPath>{example}</JSONPath>
   </Variable>
</JSONPayload>
Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc. Tuy nhiên, bạn phải cung cấp ít nhất một trong các thông tin sau: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload> hoặc <XMLPayload>.
Loại: Không áp dụng

&lt;JSONPayload&gt;/&lt;Variable&gt; phần tử

(Bắt buộc trong phần tử JSONPayload.) Chỉ định biến chứa giá trị được trích xuất được chỉ định. Bạn có thể đưa nhiều thẻ &lt;Variable&gt; vào phần tử &lt;Variable&gt; để điền nhiều biến.

<Variable name="name" type="string">
   <JSONPath>{example}</JSONPath>
</Variable>
Mặc định: Không áp dụng
Sự hiện diện: Bắt buộc trong phần tử JSONPayload.
Loại: Không áp dụng

Thuộc tính

Thuộc tính Mô tả Mặc định Sự hiện diện Loại
tên

Chỉ định tên của biến sẽ chứa giá trị được trích xuất được chỉ định.

tên

Bắt buộc Chuỗi
loại Chỉ định loại dữ liệu của giá trị biến. Không áp dụng Không bắt buộc

Chuỗi. Chọn từ:

  • string
  • boolean
  • số nguyên
  • long
  • số thực dấu phẩy động
  • gấp đôi
  • nhóm nút (trả về mảnh JSON)

&lt;JSONPayload&gt;/&lt;Variable&gt;/&lt;JSONPath&gt; phần tử

(Bắt buộc trong phần tử JSONPayload:Biến.) Chỉ định đường dẫn JSON dùng để trích xuất từ một thông báo có định dạng JSON.

<Variable name="name">
   <JSONPath>$.rss.channel.title</JSONPath>
</Variable>
Mặc định: Không áp dụng
Sự hiện diện: Bắt buộc
Loại: Chuỗi

&lt;XMLPayload&gt; phần tử

(Không bắt buộc, nhưng hãy xem hàng Sự hiện diện trong bảng bên dưới để biết thêm thông tin.) Chỉ định Thông báo theo định dạng XML mà từ đó giá trị của biến sẽ được trích xuất. Tải trọng XML chỉ được trích xuất khi tiêu đề Content-Type của thư là text/xml, application/xml, hoặc 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>
Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc. Tuy nhiên, bạn phải cung cấp ít nhất một trong các thông tin sau: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload> hoặc <XMLPayload>.
Loại: Không áp dụng

Thuộc tính

Thuộc tính Mô tả Mặc định Sự hiện diện Loại
stopPayloadProcessing

Được đặt thành true để dừng đánh giá vai trò sau khi điền một biến. Điều này có nghĩa là chính sách chỉ điền một biến duy nhất.

false

Không bắt buộc Boolean

&lt;XMLPayload&gt;/&lt;Namespaces&gt; phần tử

(Không bắt buộc) Chỉ định không gian tên sẽ dùng trong quá trình đánh giá q. Nếu bạn đang sử dụng không gian tên trong biểu thức NETWORK, bạn phải khai báo không gian tên tại đây, như minh hoạ trong ví dụ sau.

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

Nếu hiện không sử dụng không gian tên trong biểu thức NETWORK, bạn có thể bỏ qua hoặc nhận xét trong Phần tử <Namespaces>, như trong ví dụ sau:

<XMLPayload stopPayloadProcessing="false">
  <!-- <Namespaces/> -->
  <Variable name="legName" type="string">
    <XPath>/Directions/route/leg/name</XPath>
  </Variable>
</XMLPayload>
Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc
Loại: Chuỗi

Thuộc tính

Thuộc tính Mô tả Mặc định Sự hiện diện Loại
prefix

Tiền tố không gian tên.

Không áp dụng

Bắt buộc Chuỗi

&lt;XMLPayload&gt;/&lt;Variable&gt; phần tử

(Không bắt buộc) Chỉ định biến mà giá trị đã trích xuất sẽ được chỉ định.

<Variable name="name" type="boolean">
   <XPath>/test/example</XPath>
</Variable>
Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc
Loại: Không áp dụng

Thuộc tính

Thuộc tính Mô tả Mặc định Sự hiện diện Loại
tên

Chỉ định tên của biến sẽ chứa giá trị được trích xuất được chỉ định.

tên

Bắt buộc Chuỗi
loại Chỉ định loại dữ liệu của giá trị biến. Boolean Không bắt buộc

Chuỗi. Chọn từ:

  • string
  • boolean
  • số nguyên
  • long
  • số thực dấu phẩy động
  • gấp đôi
  • nhóm nút (trả về một mảnh XML)

&lt;XMLPayload&gt;/&lt;Variable&gt;/&lt;XPath&gt; phần tử

(Bắt buộc trong phần tử XMLPayload:Variable.) Chỉ định vai trò được xác định cho biến. Chỉ hỗ trợ biểu thức Wi-Fi 1.0.

<Variable name="name" type="boolean">
   <XPath>/test/example</XPath>
</Variable>

Ví dụ về không gian tên. Nếu sử dụng không gian tên trong biểu thức NETWORK, bạn phải khai báo không gian tên trong mục <XMLPayload><Namespaces> chính sách.

<Variable name="name" type="boolean">
   <XPath>/foo:test/foo:example</XPath>
</Variable>
Mặc định: Không áp dụng
Sự hiện diện: Bắt buộc
Loại: Chuỗi

Tham chiếu lỗi

Phần này mô tả các mã lỗi và thông báo lỗi được trả về cũng như các biến lỗi do Edge đặt khi chính sách này kích hoạt lỗi. Thông tin này rất quan trọng nếu bạn đang phát triển các quy tắc lỗi để xử lý lỗi. Để tìm hiểu thêm, hãy xem bài viết Những điều bạn cần biết về lỗi chính sáchXử lý lỗi.

Lỗi thời gian chạy

Những lỗi này có thể xảy ra khi chính sách này thực thi.

Mã lỗi Trạng thái HTTP Nguyên nhân Khắc phục
steps.extractvariables.ExecutionFailed 500

Lỗi này xảy ra khi:

  • Tải trọng đầu vào (JSON, XML) trống.
  • Dữ liệu đầu vào (JSON, XML, v.v.) được chuyển đến chính sách không hợp lệ hoặc sai định dạng.
steps.extractvariables.ImmutableVariable 500 Một biến được dùng trong chính sách là không thể thay đổi. Chính sách không thể đặt chế độ này biến.
steps.extractvariables.InvalidJSONPath 500 Lỗi này xảy ra nếu bạn sử dụng một đường dẫn JSON không hợp lệ trong phần tử JSONPath của phần tử . Ví dụ: nếu một tải trọng JSON không có đối tượng Name, nhưng bạn chỉ định Name làm đường dẫn trong chính sách, thì lỗi này sẽ xảy ra.
steps.extractvariables.JsonPathParsingFailure 500 Lỗi này xảy ra khi chính sách không thể phân tích cú pháp đường dẫn JSON và trích xuất dữ liệu từ biến luồng được chỉ định trong phần tử Source. Thông thường, chỉ số này xảy ra nếu biến luồng được chỉ định trong phần tử Source không tồn tại trong hiện tại luồng.
steps.extractvariables.SetVariableFailed 500 Lỗi này xảy ra nếu chính sách không thể đặt giá trị thành một biến. Lỗi thường xảy ra nếu bạn cố gắng chỉ định giá trị cho nhiều biến có tên bắt đầu có cùng từ nhưng ở định dạng lồng nhau được phân tách bằng dấu chấm.
steps.extractvariables.SourceMessageNotAvailable 500 Lỗi này xảy ra nếu thông báo biến được chỉ định trong phần tử Source của chính sách là:
  • Nằm ngoài phạm vi áp dụng (không áp dụng trong quy trình cụ thể mà chính sách đang được thực thi) hoặc
  • Không thể giải quyết (không xác định)
steps.extractvariables.UnableToCast 500 Lỗi này xảy ra nếu chính sách không thể truyền nội dung đã trích xuất giá trị cho một biến. Thông thường, điều này xảy ra nếu bạn cố gắng đặt giá trị của một kiểu dữ liệu với một biến thuộc kiểu dữ liệu khác.

Lỗi triển khai

Những lỗi này có thể xảy ra khi bạn triển khai proxy có chứa chính sách này.

Tên lỗi Nguyên nhân Khắc phục
NothingToExtract Nếu chính sách này không có bất kỳ phần tử nào URIPath, QueryParam, Header, FormParam, XMLPayload hoặc JSONPayload, việc triển khai Proxy API không thành công do không có tệp nào để trích xuất.
NONEmptyPrefixMappedToEmptyURI Lỗi này xảy ra nếu chính sách này có một tiền tố được xác định trong phần Phần tử Namespace trong phần tử XMLPayload, nhưng không có URI nào xác định.
DuplicatePrefix Lỗi này xảy ra nếu chính sách có cùng tiền tố được xác định lớn hơn một lần trong phần tử Namespace trong phần tử XMLPayload.
NoXPathsToEvaluate Nếu chính sách này không có phần tử XPath trong phần tử XMLPayload, thì việc triển khai proxy API sẽ không thành công do lỗi này.
EmptyXPathExpression Nếu chính sách có biểu thức XPath trống trong XMLPayload thì việc triển khai proxy API không thành công.
NoJSONPathsToEvaluate Nếu chính sách này không có phần tử JSONPath trong phần tử JSONPayload, thì việc triển khai proxy API sẽ không thành công do lỗi này.
EmptyJSONPathExpression Nếu chính sách có biểu thức XPath trống trong XMLPayload, thì việc triển khai proxy API sẽ không thành công.
MissingName Nếu chính sách này không có thuộc tính name trong bất kỳ chính sách nào như QueryParam, Header, FormParam hoặc Variable, nếu cần, thì việc triển khai proxy API sẽ không thành công.
PatternWithoutVariable Nếu chính sách không có biến được chỉ định trong phần tử Pattern, thì việc triển khai proxy API không thành công. Phần tử Pattern yêu cầu tên của biến lưu trữ dữ liệu đã trích xuất.
CannotBeConvertedToNodeset Nếu chính sách có biểu thức XPath trong đó loại Variable được định nghĩa là nodeset, nhưng không chuyển đổi được biểu thức thành tập hợp nút thì việc triển khai proxy API không thành công.
JSONPathCompilationFailed Chính sách này không thể biên dịch một đường dẫn JSON được chỉ định.
InstantiationFailed Không thể tạo thực thể cho chính sách này.
XPathCompilationFailed Nếu tiền tố hoặc giá trị dùng trong phần tử XPath không thuộc bất kỳ giá trị nào không gian tên đã khai báo trong chính sách, sau đó triển khai proxy API không thành công.
InvalidPattern Nếu định nghĩa phần tử Pattern không hợp lệ trong bất kỳ phần tử nào như URIPath, QueryParam, Header, FormParam, XMLPayload hoặc JSONPayload trong chính sách, thì việc triển khai Proxy API không thành công.

Biến lỗi

Các biến này được đặt khi chính sách này kích hoạt lỗi trong thời gian chạy. Để biết thêm thông tin, xem phần Bạn cần biết về các lỗi chính sách.

Biến Trong đó Ví dụ:
fault.name="fault_name" fault_name là tên của lỗi, như được liệt kê trong bảng Lỗi thời gian chạy ở trên. Tên lỗi là phần cuối cùng của mã lỗi. fault.name = "SourceMessageNotAvailable"
extractvariables.policy_name.failed policy_name là tên do người dùng chỉ định của chính sách gây ra lỗi. extractvariables.EV-ParseJsonResponse.failed = true

Ví dụ về phản hồi khi gặp lỗi

{
   "fault":{
      "detail":{
         "errorcode":"steps.extractvariables.SourceMessageNotAvailable"
      },
      "faultstring":"request message is not available for ExtractVariable: EV-ParseJsonResponse"
   }
}

Ví dụ về quy tắc lỗi

<FaultRule name="Extract Variable Faults">
    <Step>
        <Name>AM-CustomErrorMessage</Name>
        <Condition>(fault.name = "SourceMessageNotAvailable") </Condition>
    </Step>
    <Condition>(extractvariables.EM-ParseJsonResponse.failed = true) </Condition>
</FaultRule>

Giản đồ

Chủ đề có liên quan

Phân tích API nội dung tin nhắn bằng số liệu phân tích tuỳ chỉnh

Tham chiếu biến