Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu 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 thành 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ư và khi tìm thấy nội dung trùng khớp, chính sách sẽ đặt một biến có nội dung thư được chỉ định.
Mặc dù thường dùng chính sách này để trích xuất thông tin từ một thông báo yêu cầu hoặc phản hồi, nhưng bạn cũng có thể 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ả những thực thể do chính sách AccessEntity, các đối tượng XML hoặc các đối tượng JSON tạo ra.
Sau khi trích xuất nội dung thông báo đã chỉ định, bạn có thể tham chiếu biến 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 | Mô tả |
|---|---|
| Trích xuất các 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 các biến từ tải trọng JSON | Trích xuất các biến từ tải trọng JSON 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ừ tham số | Trích xuất các biến từ 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 các biến từ tham số có nhiều giá trị | Trích xuất các biến từ thông số có nhiều giá trị. |
| Trích xuất các 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 các 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ẫu mã 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 mẫu này sử dụng ExtractVariables và nằm trong kho lưu trữ api-platform-samples của Apigee trên GitHub. Các tệp README giải thích cách ExtractVariables được dùng trong từng trường hợp và cách triển khai cũng như chạy từng mẫu.
- Trích xuất và chỉ định biến mẫu (trích xuất dữ liệu từ thông báo JSON và XML)
- Ví dụ về thực thể Access
- Phân trang và lấy mẫu lưu vào bộ nhớ đệm
- Định tuyến lại một URL đích mẫu
- Mẫu kết hợp chính sách
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 sẽ 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, trong đó dấu ngoặc nhọn biểu thị phần thay đổi của đường dẫn URI.
Tên của biến cần đặt được xác định bằng 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ị này được kết hợp bằng một dấu chấm ở giữa, dẫn đến tên biến là urirequest.id, chẳng hạn. Nếu không có phần tử <VariablePrefix>, thì tên biến chỉ là giá trị nằm 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ử basepath cho API Proxy là /svc1. Khi Apigee Edge áp dụng mã chính sách ExtractVariables ở trên cho yêu cầu đến này, mã này 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 để lấy giá trị chuỗi 12797282.
Ví dụ: chính sách AssignMessage sau đây 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>
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 ở trên cho yêu cầu đến này, thì mã này sẽ đặt biến queryinfo.dbncode thành 88271. 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 queryinfo.dbncode để lấy giá trị chuỗi 88271.
Giờ đây, bạn có thể truy cập vào biến queryinfo.dbncode trong proxy của mình.
Ví dụ: chính sách AssignMessage sau đây sẽ sao chép thông tin 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 thông 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 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 thực thể của tham số truy vấn "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 đó phiên bản đầu tiên của tham số truy vấn không có chỉ mục, phiên bản thứ hai ở chỉ mục 2, phiên bản 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 ở trên cho yêu cầu đến này, thì mã 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.firstWeather và queryinfo.secondWeather trong proxy của mình. Ví dụ: chính sách AssignMessage sau đây sẽ sao chép thông tin 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ử API của bạn sử dụng mã thông báo của người mang 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 mang mã thông báo OAuth phiên bản 2.0 bao gồm một 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 (nhưng không phải toàn bộ tiêu đề) làm khoá trong một hoạt động 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, mã này sẽ đặ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 của mình. Ví dụ: chính sách AssignMessage sau đây sẽ sao chép thông tin 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 đâ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 ở trên cho thông báo JSON này, mã này sẽ đặt hai biến: geocoderesponse.latitude và geocoderesponse.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.
Giờ đây, bạn có thể truy cập vào biến geocoderesponse.latitude trong proxy của mình. Ví dụ: chính sách AssignMessage sau đây sẽ sao chép giá trị 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 áp dụng mã chính sách ExtractVariables ở trên cho thông báo XML này, Apigee Edge sẽ đặt 3 biến: directionsresponse.travelmode,, directionsresponse.duration và directionsresponse.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.
Giờ đây, 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 AssignMessage sau đây sẽ sao chép giá trị 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 của 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 sẽ trích xuất một 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 để thực hiện 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 nội dung trùng khớp, chính sách sẽ đặt giá trị của biến được chỉ định bằng nội dung đó. Sau đó, các chính sách và mã khác có thể sử dụng những biến đó để bật hành vi động hoặc gửi dữ liệu kinh doanh đến Edge API Analytics.
Để xem cách dùng ExtractVariables để tạo báo cáo Analytics dựa trên nội dung, hãy xem phần Phân tích nội dung thông báo API bằ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 vào biến đó từ bất kỳ chính sách hoặc mã nào ở bất kỳ giai đoạn nào của quy trình (thực thi sau chính sách ExtractVariables). Điều 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ý thông báo)
- 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 chỉ định mẫu cần so 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 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. Các phần sau đây mô tả 2 danh mục thông tin cơ bản mà bạn có thể trích xuất.
So khớp đường dẫn URI, 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, bạn sẽ dùng thẻ <Pattern> để chỉ định một hoặc nhiều mẫu cần khớp. Ví dụ: ví dụ về chính sách sau đây cho thấy một mẫu so 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 thành bất kỳ giá trị nào xuất hiện trong proxy.pathsuffix sau "/a/". Ví dụ: giả sử đường dẫn cơ sở cho API Proxy của bạn là /basepath/v1 . Với 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 để so khớp, tương ứng với thẻ <Pattern>, trong đó:
- Tất cả các mẫu đều được kiểm tra để tìm điểm trùng khớp.
- Nếu không có mẫu nào khớp, chính sách sẽ không thực hiện hành động nào 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 trùng khớp có cùng các 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 sẽ tạo một chính sách chứa 3 mẫu so khớ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 API Proxy có đường dẫn cơ sở là /basepath/v1, URL yêu cầu đến của API Proxy có dạng như 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 mẫu có nhiều biến
Bạn có thể chỉ định nhiều biến trong mẫu so khớp. Ví dụ: bạn chỉ định một mẫu so khớ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>Giả sử một API Proxy có đường dẫn cơ sở là /basepath/v1 , đối với 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ể đưa ra 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 ExtractVariables, bạn sử dụng chỉ mục. Trong đó, phiên bản đầu tiên của tham số truy vấn không có chỉ mục, phiên bản thứ hai ở chỉ mục 2, phiên bản 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 bạn bỏ qua tham số truy vấn thứ hai trong 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 mẫu
Khi so khớp các đường dẫn URI, bạn có thể dùng 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ư minh hoạ 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ó pathsuffix (phần đường dẫn URI sau basepath), chẳng hạn như "/a/b/c", "/a/foo/bar", v.v. Mẫu thứ hai khớp với mọi số lượng phân đoạn đường dẫ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 cho tham số truy vấn, tiêu đề và tham số biểu mẫu, ký tự "*" sẽ chỉ định khớp với bất kỳ số lượng ký tự nào. Ví dụ: khi so 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;charset=UTF-16" và "application/xml;charset=ASCII".
Nếu giá trị được truyền đến chính sách ExtractVariables chứa một ký tự đặc biệt, chẳng hạn như "{", hãy dùng ký tự "%" để thoát ký tự đó. Ví dụ sau đây thoát các ký tự "{" và "}" trong mẫu vì chúng đượ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" nhưng không khớp với giá trị "user Steve".
Ghép JSON và XML
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 thông tin được trích xuất được lưu trữ và JsonPath (JSON) hoặc XPATH (XML) cho thông tin được trích xuất.
Tất cả thẻ <Variable> trong chính sách đều được đánh giá, nhờ đó bạn có thể điền sẵn nhiều biến từ một chính sách duy nhất. Nếu thẻ <Variable> không đánh giá thành một 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 minh hoạ một chính sách ExtractVariables điền sẵn 2 biến từ phần nội dung JSON của một 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 của các biến cần đặt. Chính sách này 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 ghi một giá trị vào cùng một biến từ nhiều vị trí, thì lần ghi cuối cùng 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ể được truyền trong một tham số truy vấn hoặc trong một tiêu đề, như minh hoạ bên dưới:
<!-- 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 gì 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 này, thì có thể xảy ra lỗi.
Một lựa chọn là đặt <IgnoreUnresolvedVariables> thành true trong một chính sách tham chiếu đến biến để định cấu hình chính sách nhằm xử lý mọi biến không phân giải được dưới dạng một chuỗi trống (null):
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
Tham chiếu phần tử
Tài liệu tham khảo về 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ả 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 (Không bắt buộc) Bạn có thể dùng phần tử |
Không áp dụng | Bắt buộc |
continueOnError |
Đặt thành Đặt thành |
false | Không bắt buộc |
enabled |
Hãy đặt thành Đặt thà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 |
<DisplayName> 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 |
|---|---|
| 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 phân tích cú pháp. Giá trị của <Source> mặc định là message. Giá trị message có phân biệt chữ hoa chữ thường. Trong một luồng yêu cầu, message sẽ phân giải thành thông báo yêu cầu. Trong một luồng phản hồi, message sẽ phân giải thành thông báo phản hồi.
Mặc dù thường dùng chính sách này để trích xuất thông tin từ một thông báo yêu cầu hoặc phản hồi, nhưng bạn có thể 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ể dùng chính sách này để trích xuất thông tin từ một thực thể do chính sách AccessEntity tạo, từ dữ liệu do chính sách Service Callout trả về hoặc trích xuất thông tin từ một đối tượng XML hoặc JSON.
Nếu không thể phân giải <Source> hoặc phân giải thành một loại không phải là 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 <Source> sau khi trích xuất dữ liệu từ tải trọ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>, 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ử <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ị được trích xuất sẽ được chỉ định cho một biến có tên làuser. - Nếu
<VariablePrefix>được chỉ định là myprefix, các giá trị được trích xuất sẽ được chỉ định 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 phân giải được là một chuỗi trống (rỗng). Đặt thành false nếu bạn muốn chính sách này đưa ra lỗi khi không thể phân giải 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 một tham chiếu XPath chưa được giải quyết trong <XMLPayload>, chính sách sẽ đưa 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 hãy xem hàng Trạng thái hoạt động 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 request. Đường dẫn được áp dụng cho mẫu là proxy.pathsuffix, không bao gồm basepath cho API Proxy. 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 thuộc tính 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. |
false |
Không bắt buộc | Boolean |
Phần tử <QueryParam>
(Không bắt buộc, nhưng hãy xem hàng Trạng thái hoạt động 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 request. Nếu thông báo nguồn phân giải thành loại thông báo response, 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 dùng chỉ mục để tham chiếu 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 thuộc tính 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, hãy sử dụng phương thức 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, phiên bản thứ hai có chỉ mục là 2, phiên bản thứ ba có chỉ mục là 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 hãy xem hàng Trạng thái hoạt động 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 được chỉ định. Nếu nhiều tiêu đề có cùng tên, thì các giá trị của 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 dùng chỉ mục để tham chiếu các tiêu đề riêng lẻ trong mảng:
<Header name="myHeader.2">
<Pattern ignoreCase="true">{secondHeader}</Pattern>
</Header>Hoặc dùng lệnh sau để 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 thêm ít nhất một trong các thuộc tính 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 nhiều tiêu đề có cùng tên, hãy sử dụng phương thức tham chiếu được lập chỉ mục, trong đó phiên bản đầu tiên của tiêu đề không có chỉ mục, phiên bản thứ hai ở chỉ mục 2, phiên bản 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 hãy xem hàng Trạng thái hoạt động 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 đã chỉ định của thông báo yêu cầu hoặc phản hồi đã 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 thuộc tính 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 tham 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ử <Variable>
(Không bắt buộc, nhưng hãy xem hàng Trạng thái hoạt động trong bảng bên dưới để biết thêm thông tin.) Chỉ định tên của một biến mà bạn muốn trích xuất giá trị.
<Variable name="myVar">
<Pattern>hello {user}</Pattern>
</Variable>Cách trích xuất 2 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 thuộc tính 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 mà bạn muố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 hãy xem hàng Trạng thái hoạt động trong bảng bên dưới để biết thêm thông tin.) Chỉ định thông báo ở định dạng JSON mà từ đó giá trị của biến sẽ được trích xuất. Chỉ khi tiêu đề Content-Type của thông báo là application/json thì quá trình trích xuất JSON mới được thực hiện.
<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 thuộc tính 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 mà giá trị được trích xuất sẽ được chỉ định. Bạn có thể thêm nhiều thẻ <Variable> trong 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 | Mô tả | Mặc định | Sự hiện diện | Loại |
|---|---|---|---|---|
| tên |
Chỉ định tên của biến mà giá trị được trích xuất sẽ được chỉ định. |
tên |
Bắt buộc | Chuỗi |
| loại | Chỉ định kiểu 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ừ:
|
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 mộ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 hãy xem hàng Trạng thái hoạt động trong bảng bên dưới để biết thêm thông tin.) Chỉ định thông báo 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 thuộc tính 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 |
Đặt thành |
false |
Không bắt buộc | Boolean |
<XMLPayload>/<Namespaces> phần tử
(Không bắt buộc) Chỉ định không gian tên sẽ được dùng trong quá trình đánh giá XPath. Nếu đang 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 tại đây, như 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ận xét phần tử <Namespaces>, như ví dụ sau đâ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 | 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à giá trị được 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 mà giá trị được trích xuất sẽ được chỉ định. |
tên |
Bắt buộc | Chuỗi |
| loại | Chỉ định kiểu dữ liệu của giá trị biến. | Boolean | Không bắt buộc |
Chuỗi. Chọn từ:
|
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ỉ biểu thức XPath 1.0 được hỗ trợ.
<Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable>
Ví dụ về một 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 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ách và Xử 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:
|
build |
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. |
build |
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. |
build |
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. | build |
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à:
|
build |
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. | build |
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. |
build |
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. |
build |
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. |
build |
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.
|
build |
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. |
build |
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. |
build |
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. |
build |
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. |
build |
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. |
build |
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. |
build |
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. |
build |
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.
|
build |
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 nội dung thông báo API bằng số liệu phân tích tuỳ chỉnh