Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến
Tài liệu về Apigee X. thông tin
Các điều kiện cho phép các proxy API hoạt động linh hoạt trong thời gian chạy. Các điều kiện xác định thao tác
trên các biến được đánh giá bằng quy trình xử lý Apigee Edge. Câu lệnh có điều kiện
là boolean và luôn đánh giá là true
hoặc false
.
Tổng quan về các điều kiện
Phần này mô tả cách thức và trường hợp sử dụng câu lệnh có điều kiện với Edge. Ngoài ra, các phần sau đây mô tả cú pháp:
Cấu trúc của câu lệnh có điều kiện
Cấu trúc cơ bản của câu lệnh có điều kiện là:
<Condition>variable.name operator "value"</Condition>
Ví dụ:
<Condition>request.verb = "GET"</Condition>
Bạn có thể kết hợp các điều kiện với hàm AND để thực thi nhiều điều kiện cùng một lúc. Ví dụ:
các điều kiện sau được đánh giá thành true
chỉ khi URI của yêu cầu khớp với
/statuses
và động từ HTTP của yêu cầu là
GET
:
<Condition>(proxy.pathsuffix MatchesPath "/statuses") and (request.verb = "GET")</Condition>
Trường hợp bạn có thể sử dụng câu lệnh có điều kiện
Bạn có thể sử dụng các điều kiện để kiểm soát hành vi trong những phần sau:
Thực thi chính sách
Khi sử dụng câu lệnh có điều kiện, bạn có thể kiểm soát việc thực thi chính sách. Trường hợp sử dụng phổ biến là việc chuyển đổi có điều kiện các thông báo phản hồi, dựa trên tiêu đề HTTP hoặc nội dung thông báo.
Ví dụ sau đây sẽ chuyển đổi có điều kiện XML sang JSON dựa trên Accept
tiêu đề:
<Step> <Condition>request.header.accept = "application/json"</Condition> <Name>XMLToJSON</Name> </Step>
Thực thi luồng
Khi sử dụng câu lệnh có điều kiện, bạn có thể kiểm soát việc thực thi các luồng có tên trong ProxyEndpoints và TargetEndpoints. Lưu ý rằng chỉ "được đặt tên" luồng có thể được thực thi có điều kiện. Luồng trước và luồng hậu (cả yêu cầu và phản hồi) trên ProxyEndpoints và TargetEndpoints được thực thi cho mỗi giao dịch và do đó cung cấp giá trị "không thành công" vô điều kiện các chức năng khác nhau.
Ví dụ: để thực thi một luồng yêu cầu có điều kiện dựa trên động từ HTTP của yêu cầu và luồng phản hồi có điều kiện dựa trên mã trạng thái HTTP (tiềm năng) biểu thị lỗi:
<Flow name="GetRequests"> <Condition>request.verb = "GET"</Condition> <Request> <Step> <Condition>request.path MatchesPath "/statuses/**"</Condition> <Name>StatusesRequestPolicy</Name> </Step> </Request> <Response> <Step> <Condition>(response.status.code = 503) or (response.status.code = 400)</Condition> <Name>MaintenancePolicy</Name> </Step> </Response> </Flow>
Lựa chọn tuyến điểm cuối mục tiêu
Khi sử dụng câu lệnh có điều kiện, bạn có thể kiểm soát điểm cuối mục tiêu do điểm cuối proxy gọi ra . Quy tắc định tuyến sẽ chuyển tiếp yêu cầu đến một điểm cuối mục tiêu cụ thể. Khi có hơn khi có một điểm cuối mục tiêu, quy tắc định tuyến sẽ được đánh giá theo điều kiện và nếu đúng, yêu cầu này sẽ được chuyển tiếp đến điểm cuối mục tiêu đã đặt tên.
Ví dụ: để định tuyến thông báo theo cách có điều kiện đến điểm cuối mục tiêu được chỉ định dựa trên
Content-Type
:
<RouteRule name="default">
<!--this routing executes if the header indicates that this is an XML call. If true, the call is routed to the endpoint XMLTargetEndpoint-->
<Condition>request.header.Content-Type = "text/xml"</Condition>
<TargetEndpoint>XmlTargetEndpoint</TargetEndpoint>
</RouteRule>
Xem bài viết Các biến luồng và điều kiện để biết thêm thông tin.
Biểu thức đường dẫn
Biểu thức đường dẫn được dùng để so khớp các đường dẫn URI, có dùng "*" để biểu thị một phần tử đường dẫn đơn và "**" để biểu thị nhiều cấp URI.
Ví dụ:
Mẫu | Đường dẫn URI mẫu trùng khớp |
---|---|
/*/a/ |
/x/a/ hoặc /y/a/ |
/*/a/* |
/x/a/b hoặc /y/a/foo |
/*/a/** |
/x/a/b/c/d |
/*/a/*/feed/ |
/x/a/b/feed/ hoặc /y/a/foo/feed/ |
/a/**/feed/** |
/a/b/feed/rss/1234 |
%
được coi là ký tự thoát. Chiến lược phát hành đĩa đơn
mẫu %{user%}
khớp với {user}
nhưng không khớp với
user
.
Biến
Bạn có thể sử dụng cả biến luồng tích hợp sẵn và biến tuỳ chỉnh trong câu lệnh có điều kiện. Để biết thêm thông tin, hãy xem các bài viết sau:
- Tài liệu tham khảo về biến luồng: Danh sách đầy đủ các biến tích hợp sẵn
- Chính sách ExtractVariables: Hướng dẫn về cách đặt biến tuỳ chỉnh
Toán tử
Khi sử dụng toán tử, hãy tuân thủ những hạn chế sau:
- Bạn không được sử dụng toán tử làm tên biến.
- Phải có ký tự dấu cách trước và sau toán tử.
- Để đưa toán tử vào biến, tên biến phải được đặt trong dấu nháy đơn.
Ví dụ:
'request.header.help!me'
. - Toán tử số học (
+ * - / %
) không được hỗ trợ. - Java ưu tiên sẽ được dùng cho toán tử.
- Apigee Edge dựa vào biểu thức chính quy như được triển khai trong
java.util.regex
.
Bảng sau đây liệt kê các toán tử được hỗ trợ. Bạn có thể sử dụng biểu tượng hoặc từ trong biểu thức:
Biểu tượng | Word | Mô tả |
---|---|---|
! |
Not , not |
Toán tử đơn nhất (lấy một giá trị đầu vào) |
= |
Equals , Is |
Bằng (phân biệt chữ hoa chữ thường) |
!= |
NotEquals , IsNot |
Không bằng (phân biệt chữ hoa chữ thường) |
:= |
EqualsCaseInsensitive |
Bằng nhưng không phân biệt chữ hoa chữ thường |
> hoặc > |
GreaterThan |
Lớn hơn. Nếu bạn sử dụng > khi xác định điều kiện trong giao diện người dùng Edge, đó là được chuyển đổi sang >. |
>= hoặc >= |
GreaterThanOrEquals |
Lớn hơn hoặc bằng. Nếu bạn sử dụng >= khi xác định điều kiện trong giao diện người dùng Edge, nó được chuyển đổi thành >=. |
< |
LesserThan |
Ít hơn. Giao diện người dùng Edge không hỗ trợ ký tự <. |
<= |
LesserThanOrEquals |
Nhỏ hơn hoặc bằng. Giao diện người dùng Edge không hỗ trợ giá trị cố định <=. |
&& |
And , and |
và |
|| |
Or |
Toán tử Or không phân biệt chữ hoa chữ thường. Ví dụ: OR , Or và or đều hợp lệ. |
() |
Nhóm một biểu thức. ( mở biểu thức và ) đóng
nó. |
|
~~ |
JavaRegex |
Khớp với một biểu thức chính quy tuân thủ |
~ |
Matches , Like |
Khớp với một mẫu kiểu toàn cầu bằng cách sử dụng "*" ký tự đại diện. Kết quả phù hợp là phân biệt chữ hoa chữ thường. Để biết ví dụ, hãy xem phần So khớp mẫu với điều kiện. |
~/ |
MatchesPath , LikePath |
Khớp với một biểu thức đường dẫn. Kết quả khớp có phân biệt chữ hoa chữ thường. Để biết ví dụ, hãy xem phần So khớp mẫu với điều kiện. |
=| |
StartsWith |
Khớp với các ký tự đầu tiên của một chuỗi. Kết quả khớp có phân biệt chữ hoa chữ thường. |
Toán hạng
Apigee Edge điều chỉnh toán hạng thành một loại dữ liệu chung trước khi so sánh. Ví dụ: nếu
mã trạng thái phản hồi là 404, biểu thức response.status.code = "400"
và
response.status.code = 400
là tương đương.
Đối với các toán hạng số, loại dữ liệu được hiểu là số nguyên trừ khi giá trị đó kết thúc như sau:
- "f" hoặc "F" (độ chính xác đơn, ví dụ: 3.142f, 91.1F)
- "d" hoặc "D" (gấp đôi, ví dụ: 3.142d, 100.123D)
- "l" hoặc "L" (dài, ví dụ: 12321421312L)
Trong những trường hợp này, hệ thống thực hiện các hoạt động điều chỉnh như minh hoạ trong bảng sau (trong đó RHS đề cập đến ở vế phải của phương trình, LHS là vế trái):
RHS LHS | Boolean | Số nguyên | Dài | Số thực dấu phẩy động | Đôi | Chuỗi | Tương đương | Đối tượng |
---|---|---|---|---|---|---|---|---|
Boolean | Boolean | Số nguyên | Dài | Số thực dấu phẩy động | Đôi | Chuỗi | - | |
Số nguyên | Số nguyên | Số nguyên | Dài | Số thực dấu phẩy động | Đôi | Chuỗi | Tương đương | - |
Dài | Dài | Dài | Dài | Số thực dấu phẩy động | Đôi | Chuỗi | Tương đương | - |
Số thực dấu phẩy động | Số thực dấu phẩy động | Số thực dấu phẩy động | Số thực dấu phẩy động | Số thực dấu phẩy động | Đôi | Chuỗi | Tương đương | - |
Đôi | Đôi | Đôi | Đôi | Đôi | Đôi | Chuỗi | Tương đương | - |
Chuỗi | Chuỗi | Chuỗi | Chuỗi | Chuỗi | Chuỗi | Chuỗi | Tương đương | - |
Tương đương | Tương đương | Tương đương | Tương đương | Tương đương | Tương đương | Tương đương | Tương đương | - |
Đối tượng | - | - | - | - | - | - | - | - |
Toán hạng rỗng
Bảng sau đây cho biết liệu các điều kiện được đánh giá là true
hay
false
khi các giá trị là rỗng ở bên trái (LHS) và/hoặc bên phải (RHS)
của toán hạng được biểu thị:
Đơn vị tổ chức | Giá trị rỗng LHS | RHS rỗng | Giá trị LHS và RHS rỗng |
---|---|---|---|
= , == , := |
sai | sai | true |
=| |
sai | sai | sai |
!= |
true | true | sai |
> hoặc > |
true | sai | sai |
>= hoặc >= |
sai | true | true |
< |
true | sai | sai |
<= |
true | sai | true |
~ |
sai | Không có | sai |
~~ |
sai | Không có | sai |
!~ |
true | sai | sai |
~/ |
sai | Không có | sai |
Giá trị cố định
Ngoài giá trị cố định kiểu chuỗi và giá trị cố định dạng số, bạn có thể sử dụng các giá trị cố định sau trong Câu lệnh có điều kiện:
null
true
false
Ví dụ:
request.header.host is null
flow.cachehit is true
Ví dụ
<RouteRule name="default"> <Condition>request.header.content-type = "text/xml"</Condition> <TargetEndpoint>XmlTargetEndpoint</TargetEndpoint> </RouteRule>
<Step> <Condition>response.status.code = 503</Condition> <Name>MaintenancePolicy</Name> </Step>
<Flow name="GetRequests"> <Condition>response.verb="GET"</Condition> <Request> <Step> <Condition>request.path ~ "/statuses/**"</Condition> <Name>StatusesRequestPolicy</Name> </Step> </Request> <Response> <Step> <Condition>(response.status.code = 503) or (response.status.code = 400)</Condition> <Name>MaintenancePolicy</Name> </Step> </Response> </Flow>