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ông báo, bao gồm cả tiêu đề, đường dẫn URI, tải trọng JSON/XML, tham số biểu mẫu 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 nội dung thông báo và khi tìm thấy kết quả phù hợp, hãy đặt một biến có 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ông báo yêu cầu hoặc phản hồi, nhưng bạn cũng có thể sử dụng chính sách này để trích xuất thông tin từ các nguồn khác, bao gồm cả các thực thể 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 này trong các chính sách khác trong quá trình 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 Nội dung mô tả
Trích xuất các biến từ tải trọng XML Trích xuất biến từ tải trọng XML bằng cách sử dụng chính sách Trích xuất biến.
Trích xuất các biến từ tải trọng JSON Trích xuất 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ư truy vấn, tiêu đề, biểu mẫu hoặc tham số URI.
Trích xuất các biến từ các tham số nhiều giá trị Trích xuất biến từ các thông số có nhiều giá trị.
Trích xuất các biến từ tham số truy vấn (phiên bản Classic Edge) Trích xuất các biến từ một tham số truy vấn bằng cách sử dụng giao diện người dùng Classic Edge.
Trích xuất các biến từ tải trọng XML hoặc JSON (Phiên bản cũ) Trích xuất các biến từ một tải trọng XML hoặc JSON bằng giao diện người dùng Classic Edge.

Mẫu

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

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. Các API này sử dụng ExtractVariables và nằm trong kho lưu trữ mẫu api-platform-samples của Apigee trên GitHub. Các tệp README này 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> yêu cầu chính sách ExtractVariables trích xuất thông tin từ đường dẫn URI. Phần tử <Pattern> chỉ định mẫu để áp dụng cho đường dẫn URI. Mẫu này được coi là một mẫu đơn giản, với các dấu ngoặc nhọn cho biết 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ằng giá trị đã 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>. Ví dụ: 2 giá trị được kết hợp bằng một dấu chấm xen kẽ, tạo ra 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ị được đặt trong dấu ngoặc nhọn.

Hãy xem xét đoạn mã chính sách mẫu ở trên khi xử lý yêu cầu được gửi đế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 được gửi đến này, nó sẽ đặt biến urirequest.id thành 12797282. Sau khi Apigee Edge thực thi chính sách này, 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 composeMessage sau đây sẽ nhúng giá trị của biến đó vào tải trọng của một 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>

Thông 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 đoạn mã chính sách mẫu ở trên khi xử lý yêu cầu được gửi đế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 ở trên cho yêu cầu được gửi đến này, nó sẽ đặt biến queryinfo.dbncode thành 88271. Sau khi Apigee Edge thực thi chính sách này, 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 để nhận 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 composeMessage sau đây sẽ sao chép chính sách này 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 tên. 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 của tham số truy vấn "w". Để tham chiếu đến các tham số truy vấn này trong chính sách ExtractVariables, bạn sử dụng chỉ mục, trong đó thực thể đầu tiên của tham số truy vấn không có chỉ mục, thực thể thứ hai nằm ở chỉ mục 2, bản thứ ba ở chỉ mục 3, v.v.

Hãy xem xét đoạn mã chính sách mẫu ở trên khi xử lý yêu cầu được gửi đế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 ở trên cho yêu cầu được gửi đến này, nó sẽ đặt biến queryinfo.firstWeather thành Boston và biến queryInfo.secondWeather thành Chicago.

Hiện bạn có thể truy cập vào biến queryinfo.firstWeatherqueryinfo.secondWeather trong proxy. Ví dụ: chính sách composeMessage sau đây sẽ sao chép chính sách này 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 hoạt động với một yêu cầu chứa mã thông báo OAuth phiên bản 2.0 có tiêu đề như sau: Authorization: Bearer TU08xptfFfeM7aS0xHqlxTgEAdAM.

Là nhà thiết kế API, giả sử bạn muốn dùng giá trị mã thông báo (chứ không phải toàn bộ tiêu đề) làm khoá trong việc 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, nó sẽ đặt biến clientrequest.oauthtoken thành TU08xptfFfeM7aS0xHqlxTgEAdAM.

Bây giờ, bạn có thể truy cập vào biến clientrequest.oauthtoken trong proxy. Ví dụ: chính sách composeMessage sau đây sẽ sao chép chính sách này 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:

{
  "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 ở trên cho thông báo JSON này, quá trình này sẽ thiết lập 2 biến: geocoderesponse.latitudegeocoderesponse.longitude. Cả hai biến đều sử dụng cùng một tiền tố biến là geocoderesponse. Hậu tố cho các biến này được chỉ định rõ ràng bằng thuộc tính name của phần tử <Variable>.

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

Bây giờ, bạn có thể truy cập vào biến geocoderesponse.latitude trong proxy. Ví dụ: chính sách composeMessage sau đây sẽ sao chép chính sách này vào một tiêu đề có tên là "latitude" trong phản hồ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:

<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 ở trên cho thông báo XML này, Apigee sẽ thiết lập 3 biến: directionsresponse.travelmode, directionsresponse.durationdirectionsresponse.timeunit. Tất cả các biến đều sử dụng cùng một tiền tố biến là directionsresponse. Hậu tố cho các biến này được chỉ định rõ ràng bằng thuộc tính name của phần tử <Variable>.

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

Bây giờ, bạn có thể truy cập vào biến directionresponse.travelmode trong proxy của mình. Ví dụ: chính sách ToggleMessage sau đây sẽ sao chép chính sách này vào một tiêu đề có tên là "tmode" trong phản hồ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 tạo các proxy API hoạt động theo cách khác nhau dựa trên nội dung thông báo, bao gồm cả 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ố phần nội dung này để sử dụng trong câu lệnh điều kiện. Hãy sử dụng chính sách ExtractVariables để làm việc 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 các 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à khi tìm thấy kết quả trùng khớp, hãy đặ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 Edge API Analytics.

Để tìm hiểu cách sử dụng ExtractVariables để tạo báo cáo Analytics dựa trên nội dung, hãy xem bài viết Phân tích nội dung thông báo API bằng cách sử dụng dịch vụ phân tích tuỳ chỉnh.

Phạm vi

Các biến được đặt theo chính sách ExtractVariables có phạm vi chung. Nghĩa là, sau khi chính sách ExtractVariables xác định một biến mới, bạn có thể truy cập vào biến đó từ bất kỳ chính sách hoặc mã nào trong bất kỳ giai đoạn nào của quy trình (thực thi sau chính sách ExtractVariables). Trong đó có:

  • 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ý thư)
  • 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 thông tin đó vào 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 dữ liệu XML, bạn sẽ chỉ định mẫu cần khớp và tên của biến dùng để lưu giữ thông tin đã trích xuất.

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

Đường dẫn URI 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à biến, bạn sử dụng thẻ <Pattern> để chỉ định một hoặc nhiều mẫu để so khớp. Ví dụ: ví dụ về chính sách sau đây cho thấy một mẫu phù hợ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 thành 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 là /basepath/v1 . Với một yêu cầu đến 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 quảng cáo để khớp, tương ứng với thẻ <Pattern>, trong đó:

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

Giả sử, đối với một Proxy API có đường dẫn cơ sở là /basepath/v1 , URL yêu cầu gửi đến 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 đượ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 được đặt thành "d".

Chỉ định các 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 mẫu phù hợp có 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 , hãy cung cấp một Proxy API có đường dẫn cơ sở là /basepath/v1 cho URL yêu cầu đến:

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

...biến urirequest.pathSeg1 được đặt thành "b" và biến urirequest.pathSeg2 đượ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 phiên bản của một mục có cù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 hai tham số truy vấn có tên "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 ExtractVariables, bạn sử dụng chỉ mục, trong đó bản sao đầu tiên của tham số truy vấn không có chỉ mục, bản sao thứ hai nằm ở chỉ mục 2, thứ ba ở chỉ mục 3, v.v. Ví dụ: chính sách sau đây 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 đượ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 sẽ trống. Sử dụng lập chỉ mục bất cứ khi nào có nhiều mục có cùng tên trong yêu cầu.

Sử dụng ký tự đặc biệt trong hoa văn

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

  • khớp với một phân đoạn bất kỳ 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ử <URIPath> như hiển thị dưới đây:

<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ó pathuffix (phần của đường dẫn URI theo đường cơ sở) như "/a/b/c", "/a/foo/bar", v.v. Mẫu thứ hai khớp với số lượng phân đoạn đường dẫn bất kỳ 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 bất kỳ số lượng ký tự nào. Ví dụ: khi so khớp một tiêu đề, hãy chỉ định mẫu là:

*;character={identifier}

Mẫu này khớp với các giá trị "text/xml;character=UTF-16" và "application/xml;signer=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 ký tự "%" để thoát ký tự đó. Ví dụ sau đây thoát các ký tự "{" và "}" trong mẫu vì các ký tự này được dùng làm ký tự cố định trong giá trị của tham số truy vấn:

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

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

JSON và XML khớp với nhau

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

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

Ví dụ sau đây cho thấy một chính sách ExtractVariables điền sẵn hai biến trong 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 cẩn thận khi chọn tên của các biến cầ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 đến mẫu trích xuất cuối cùng. Nếu chính sách này ghi một giá trị cho cùng một biến từ nhiều vị trí, thì lần ghi gần đây nhất trong chính sách sẽ xác định giá trị của biến đó. (Đây có thể là điều 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ể 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 những việc 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 sẽ không được tạo. Do đó, nếu một chính sách khác tham chiếu đến biến đó, thì điều đó có thể gây ra lỗi.

Bạn có thể đặt <IgnoreUnresolvedVariables> thành true (đúng) trong một chính sách tham chiếu biến đó để định cấu hình chính sách nhằm coi mọi biến không thể phân giải là một 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 chính sách 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>

Thuộc tính <ExtractVariables>

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

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

Thuộc tính Nội dung 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ự.

Nếu muốn, bạn có thể sử dụng phần tử <DisplayName> để gắn nhãn cho chính sách này 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 một chính sách không hoạt động. Đây là hành vi dự kiến đối với hầu hết các chính sách.

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

false Không bắt buộc
enabled

Đặt thành true để thực thi chính sách.

Đặ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 chính sách vẫn được đính kèm vào một quy trình.

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

Phần tử <DisplayName>

Sử dụng cùng với thuộc tính name để gắn nhãn cho 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 khác theo ngôn ngữ tự nhiên.

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

Không áp dụng

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

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

Phần tử <Source>

(Không bắt buộc) Chỉ định biến cần được phân tích cú pháp. Giá trị mặc định của <Source>message. Giá trị message có phân biệt 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, message sẽ phân giải 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ông báo yêu cầu hoặc phản hồi, nhưng bạn có thể sử dụng chính sách này để trích xuất thông tin từ bất kỳ biến nào. Ví dụ: bạn có thể sử dụng công cụ này để trích xuất thông tin từ một thực thể được tạo theo chính sách AccessEntity, từ dữ liệu mà Chính sách chú thích dịch vụ trả về hoặc trích xuất thông tin từ đối tượng XML hoặc JSON.

Nếu <Source> không giải quyết được hoặc chuyển thành loại không phải tin nhắn, thì chính sách này 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 Nội dung 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 <Source> sau khi trích xuất dữ liệu từ đó.

Chỉ sử dụng tuỳ chọn <clearPayload> nếu thông báo nguồn không cần thiết sau khi thực thi ExtractVariables. Việc đặt thành true sẽ giải phóng bộ nhớ mà thông báo sử dụng.

false

Không bắt buộc Boolean

Phần tử <VariablePrefix>

(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 {curly ngoặc nhọn} trong phần tử <Pattern> hoặc phần tử <Variable>. Ví dụ: myprefix.id, myprefix.dbncode hoặc myprefix.oauthtoken.

<VariablePrefix>myprefix</VariablePrefix>

Ví dụ: giả sử giá trị của tên là "user".

  • Nếu bạn không chỉ định <VariablePrefix>, các giá trị đã trích xuất sẽ được gán cho biến có tên là user.
  • Nếu bạn chỉ định <VariablePrefix> làm tiền tố của tôi, thì các giá trị đã trích xuất sẽ được gán cho một biến có tên là 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

Phần tử <IgnoreUnresolvedVariables>

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

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

Nếu tham chiếu XPath không được giải quyết trong <XMLPayload>, chính sách sẽ gửi ra lỗi sau:

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

Phần tử <URIPath>

(Không bắt buộc, nhưng bạn có thể 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 á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ông báo nguồn phân giải thành một loại thông báo 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>

Bạn có thể sử dụng nhiều phần tử <Pattern>:

<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 thêm ít nhất một trong các thành phần sau: <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> hoặc <XMLPayload>.
Loại: Không áp dụng

Thuộc tính

Thuộc tính Nội dung mô tả Mặc định Sự hiện diện Loại
ignoreCase Chỉ định bỏ qua cách viết hoa khi so khớp với mẫu.

false

Không bắt buộc Boolean

Phần tử <QueryParam>

(Không bắt buộc, nhưng bạn có thể 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 một loại thông báo phản hồi, thì phần tử này sẽ không làm gì cả.

<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 thêm ít nhất một trong các thành phần sau: <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> hoặc <XMLPayload>.
Loại: Không áp dụng

Thuộc tính

Thuộc tính Nội dung 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, hãy sử dụng tham số tham chiếu được lập chỉ mục, trong đó thực thể đầu tiên của tham số truy vấn không có chỉ mục, thực thể thứ hai ở chỉ mục 2, tham số thứ ba ở chỉ mục 3, v.v.

Không áp dụng

Bắt buộc Chuỗi

Phần tử <Header>

(Không bắt buộc, nhưng bạn có thể 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 phản hồi đã chỉ định. Nếu nhiều tiêu đề có cùng tên, thì giá trị của các tiêu đề đó 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 đến từng tiêu đề trong mảng:

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

Hoặc cách sau để liệt kê tất 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 thêm ít nhất một trong các thành phần sau: <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> hoặc <XMLPayload>.
Loại: Không áp dụng

Thuộc tính

Thuộc tính Nội dung 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 nhiều tiêu đề có cùng tên, hãy sử dụng tham chiếu được lập chỉ mục, trong đó thực thể đầu tiên của tiêu đề không có chỉ mục, thực thể 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

Phần tử <FormParam>

(Không bắt buộc, nhưng bạn có thể 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ố biểu mẫu được chỉ định của thông báo request hoặc Response được chỉ định. Bạn chỉ có thể trích xuất các tham số biểu mẫu khi tiêu đề Content-Type của thông báo đượ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 thêm ít nhất một trong các thành phần sau: <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> hoặc <XMLPayload>.
Loại: Không áp dụng

Thuộc tính

Thuộc tính Nội dung 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

Phần tử <Biến>

(Không bắt buộc, nhưng bạn có thể 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 để 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 thêm ít nhất một trong các thành phần sau: <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> hoặc <XMLPayload>.
Loại: Không áp dụng

Thuộc tính

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

Không áp dụng

Bắt buộc Chuỗi

Phần tử <JSONPayload>

(Không bắt buộc, nhưng bạn có thể 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 có định dạng JSON mà từ đó giá trị của biến sẽ được trích xuất. Việ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 thêm ít nhất một trong các thành phần sau: <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> hoặc <XMLPayload>.
Loại: Không áp dụng

Phần tử <JSONPayload>/<Variable>

(Bắt buộc trong phần tử JSONPayload.) Chỉ định biến sẽ được gán giá trị đã trích xuất. Bạn có thể đưa nhiều thẻ <Variable> vào phần tử <JSONPayload> để điền sẵ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 Nội dung mô tả Mặc định Sự hiện diện Loại
tên

Chỉ định tên của biến mà bạn sẽ chỉ định giá trị đã trích xuất.

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
  • float
  • gấp đôi
  • tập hợp nút (trả về mảnh JSON)

Phần tử <JSONPayload>/<Variable>/<JSONPath>

(Bắt buộc trong phần tử JSONPayload:Variable.) Chỉ định đường dẫn JSON dùng để trích xuất giá trị 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

Phần tử <XMLPayload>

(Không bắt buộc, nhưng bạn có thể 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 điệp có đị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ông báo 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 thêm ít nhất một trong các thành phần sau: <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> hoặc <XMLPayload>.
Loại: Không áp dụng

Thuộc tính

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

Đặt thành true để ngừng đánh giá XPath 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

Phần tử <XMLPayload>/<Namespaces>

(Tùy chọn) Chỉ định không gian tên sẽ được sử dụng trong đánh giá XPath. Nếu đang sử dụng các không gian tên trong biểu thức XPath, bạn phải khai báo các không gian tên ở đâ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 không sử dụng không gian tên trong biểu thức XPath, bạn có thể bỏ qua hoặc đánh dấu phần tử <Namespaces> như ví dụ dưới đây:

<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 Nội dung 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

Phần tử <XMLPayload>/<Variable>

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

<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 Nội dung mô tả Mặc định Sự hiện diện Loại
tên

Chỉ định tên của biến mà bạn sẽ chỉ định giá trị đã trích xuất.

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
  • float
  • gấp đôi
  • tập hợp nút (trả về một mảnh XML)

Phần tử <XMLPayload>/<Variable>/<XPath>

(Bắt buộc trong phần tử XMLPayload:Variable.) Chỉ định XPath được xác định cho biến. Chỉ hỗ trợ biểu thức XPath 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 XPath, bạn phải khai báo không gian tên trong phần <XMLPayload><Namespaces> của 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 đóng vai trò quan trọng trong việc phát triển các quy tắc lỗi để xử lý lỗi. Để tìm hiểu thêm, hãy xem 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 thực thi chính sách.

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 không đúng định dạng.
steps.extractvariables.ImmutableVariable 500 Một biến dùng trong chính sách là không thể thay đổi. Chính sách không thể đặt biến này.
steps.extractvariables.InvalidJSONPath 500 Lỗi này xảy ra nếu bạn dùng một đường dẫn JSON không hợp lệ trong phần tử JSONPath của chính sách. 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 này 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, điều 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 luồng hiện tại.
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 này 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 bằng các từ giống nhau ở định dạng lồng nhau và phân tách bằng dấu chấm.
steps.extractvariables.SourceMessageNotAvailable 500 Lỗi này xảy ra nếu biến thông báo được chỉ định trong phần tử Source của chính sách có thể là:
  • Ngoài phạm vi (không có trong quy trình cụ thể đang thực thi chính sách) hoặc
  • Không thể phân giải (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 giá trị đã trích xuất thành 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 loại dữ liệu thành một biến của một loại 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 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 không có phần tử nào trong số các phần tử URIPath, QueryParam, Header, FormParam, XMLPayload hoặc JSONPayload, thì quá trình triển khai Proxy API sẽ không thành công vì không có gì để trích xuất.
NONEmptyPrefixMappedToEmptyURI Lỗi này xảy ra nếu chính sách có một tiền tố được xác định trong phần tử Namespace của phần tử XMLPayload, nhưng không có URI nào được xác định.
DuplicatePrefix Lỗi này xảy ra nếu chính sách có cùng một tiền tố được xác định nhiều lần trong phần tử Namespace của 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ì lỗi này sẽ không triển khai được proxy API.
EmptyXPathExpression Nếu chính sách này có một biểu thức XPath trống trong phần tử XMLPayload, thì tức là không triển khai được proxy API.
NoJSONPathsToEvaluate Nếu chính sách này không có phần tử JSONPath trong phần tử JSONPayload, thì lỗi này sẽ không triển khai được proxy API.
EmptyJSONPathExpression Nếu chính sách này có một biểu thức XPath trống trong phần tử XMLPayload, thì sẽ không triển khai được proxy API.
MissingName Nếu chính sách không có thuộc tính name trong bất kỳ phần tử nào của chính sách như QueryParam, Header, FormParam hoặc Variable (nếu bắt buộc), thì sẽ không triển khai được proxy API.
PatternWithoutVariable Nếu bạn không chỉ định biến nào cho chính sách này trong phần tử Pattern, thì sẽ không triển khai được proxy API. Phần tử Pattern cần có tên của biến sẽ lưu trữ dữ liệu đã trích xuất.
CannotBeConvertedToNodeset Nếu chính sách có một biểu thức XPath, trong đó loại Variable được định nghĩa là tập hợp nút, nhưng không thể chuyển đổi biểu thức này thành tập hợp nút, thì sẽ không triển khai được proxy API.
JSONPathCompilationFailed Chính sách không thể biên dịch đường dẫn JSON được chỉ định.
InstantiationFailed Không thể tạo thực thể chính sách.
XPathCompilationFailed Nếu tiền tố hoặc giá trị dùng trong phần tử XPath không thuộc bất kỳ không gian tên nào đã khai báo trong chính sách, thì sẽ không triển khai được proxy API.
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 sẽ 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, hãy xem bài viết Những điều bạn cần biết về 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ư 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 của chính sách báo lỗi do người dùng chỉ định. extractvariables.EV-ParseJsonResponse.failed = true

Ví dụ về phản hồi 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 nội dung thông báo API bằng cách sử dụng công cụ phân tích tuỳ chỉnh

Tham chiếu biến