Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Warunki umożliwiają dynamiczne działanie serwerów proxy interfejsu API w czasie działania. Warunki definiują operacje
na zmiennych, które są oceniane przez potok przetwarzania Apigee Edge. Instrukcje warunkowe
są logiczne i zawsze zwracają wartość true
lub false
.
Warunki
Ta sekcja opisuje, jak i gdzie używać instrukcji warunkowych w Edge. Dodatkowo składnię opisano w tych sekcjach:
.Struktura instrukcji warunkowych
Podstawowa struktura wyrażenia warunkowego:
<Condition>variable.name operator "value"</Condition>
Na przykład:
<Condition>request.verb = "GET"</Condition>
Aby wymusić stosowanie kilku warunków jednocześnie, możesz połączyć je za pomocą operatora I. Na przykład parametr
poniższe warunki przyjmują wartość true
tylko wtedy, gdy identyfikator URI żądania jest zgodny
/statuses
oraz czasownik HTTP żądania to
GET
:
<Condition>(proxy.pathsuffix MatchesPath "/statuses") and (request.verb = "GET")</Condition>
Gdzie można używać instrukcji warunkowych
Za pomocą warunków możesz kontrolować działanie w tych obszarach:
Wykonanie zasady
Za pomocą instrukcji warunkowych możesz kontrolować egzekwowanie zasad. Typowy przypadek użycia to warunkowe przekształcanie wiadomości z odpowiedziami na podstawie nagłówka HTTP lub treści wiadomości.
Poniższy przykład warunkowo przekształca kod XML do formatu JSON na podstawie Accept
nagłówek:
<Step> <Condition>request.header.accept = "application/json"</Condition> <Name>XMLToJSON</Name> </Step>
Wykonanie przepływu
Za pomocą instrukcji warunkowych możesz kontrolować wykonywanie nazwanych przepływów w ProxyEndpoints oraz TargetEndpoints. Pamiętaj, że tylko „nazwane” przepływy mogą być wykonywane warunkowo. Wstępne przepływy i procesy postflow (zarówno żądania, jak i odpowiedzi) w punktach końcowych serwera proxy i w punktach końcowych są wykonywane dla każdego transakcji i zapewniają bezwarunkowy „niepowodzenie” funkcje zabezpieczeń.
Aby na przykład wykonać przepływ żądania warunkowego na podstawie czasownika HTTP żądania: i przebieg odpowiedzi warunkowej na podstawie (potencjalnego) kodu stanu HTTP reprezentującego błąd:
<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>
Wybór trasy docelowego punktu końcowego
Za pomocą instrukcji warunkowych możesz kontrolować docelowy punkt końcowy wywoływany przez punkt końcowy serwera proxy konfiguracji. Reguła trasy przekierowuje żądanie do określonego docelowego punktu końcowego. Gdy więcej niż dostępny jest jeden docelowy punkt końcowy, reguła trasy jest oceniana pod kątem swojego warunku, a jeśli jest, żądanie jest przekierowywane do nazwanego docelowego punktu końcowego.
Na przykład warunkowe kierowanie wiadomości do wyznaczonych docelowych punktów końcowych na podstawie
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>
Patrz sekcja Zmienne przepływu i , aby dowiedzieć się więcej.
Wyrażenia ścieżki
Wyrażenia ścieżki służą do dopasowywania ścieżek identyfikatorów URI zawierających znak „*” do reprezentowania pojedynczego elementu ścieżki i „**” do reprezentowania wielu poziomów identyfikatora URI.
Na przykład:
Wzór | Przykładowe ścieżki identyfikatora URI dopasowane |
---|---|
/*/a/ |
/x/a/ lub /y/a/ |
/*/a/* |
/x/a/b lub /y/a/foo |
/*/a/** |
/x/a/b/c/d |
/*/a/*/feed/ |
/x/a/b/feed/ lub /y/a/foo/feed/ |
/a/**/feed/** |
/a/b/feed/rss/1234 |
%
jest traktowany jako znak zmiany znaczenia.
wzór %{user%}
pasuje do {user}
, ale nie do
user
Zmienne
W instrukcjach warunkowych możesz używać zarówno zmiennych wbudowanych, jak i niestandardowych. Aby dowiedzieć się więcej, zobacz:
- Informacje o zmiennych procesu: pełna lista zmiennych wbudowanych.
- zasadyWyodrębnianie zmiennych: instrukcje konfigurowania zmiennych niestandardowych,
Operatory
Podczas korzystania z operatorów musisz przestrzegać tych ograniczeń:
- Operatorów nie można używać jako nazw zmiennych.
- Przed operatorem i po nim musi znajdować się znak spacji.
- Aby w zmiennej umieścić operator, musisz ująć nazwę zmiennej w cudzysłowy pojedyncze.
Na przykład:
'request.header.help!me'
. - Operatory arytmetyczne (
+ * - / %
) nie są obsługiwane. - Java pierwszeństwo jest używane dla operatorów.
- Apigee Edge korzysta z wyrażeń regularnych zaimplementowanych w
java.util.regex
W poniższej tabeli znajdziesz obsługiwane operatory. Możesz użyć symbolu lub słowa w wyrażenia:
Symbol | Word | Opis |
---|---|---|
! |
Not , not |
Jednoargumentowy operator (jedna wartość wejściowa) |
= |
Equals , Is |
Równa się (z uwzględnieniem wielkości liter) |
!= |
NotEquals , IsNot |
Nie równa się (z uwzględnieniem wielkości liter) |
:= |
EqualsCaseInsensitive |
Równa się, ale wielkość liter nie jest rozróżniana |
> lub > |
GreaterThan |
Większe niż. Jeśli używasz > przy definiowaniu warunku w interfejsie Edge skonwertowane na >. |
>= lub >= |
GreaterThanOrEquals |
Większe lub równe. Jeśli przy definiowaniu warunku w interfejsie Edge użyjesz >=, zostanie on przekonwertowany na >=. |
< |
LesserThan |
Mniejsze niż. Interfejs Edge nie obsługuje literału <. |
<= |
LesserThanOrEquals |
Mniejsze lub równe. Interfejs Edge nie obsługuje literału <=. |
&& |
And , and |
i |
|| |
Or |
Wielkość liter w operatorze „Or” nie jest rozróżniana. Prawidłowe wartości to np. OR , Or i or . |
() |
Grupuje wyrażenie. ( otwiera wyrażenie, a ) zamyka
. |
|
~~ |
JavaRegex |
Pasuje do wyrażenia regularnego zgodnego z funkcją |
~ |
Matches , Like |
Dopasowuje do wzorca glob za pomocą znaku „*” symbol zastępczy. Dopasowanie jest . Przykłady: Dopasowywanie do wzorca za pomocą: warunków warunkowych. |
~/ |
MatchesPath , LikePath |
Pasuje do wyrażenia ścieżki. Podczas dopasowywania wielkość liter ma znaczenie. Przykłady: Dopasowywanie do wzorca za pomocą: warunków warunkowych. |
=| |
StartsWith |
Pasuje do pierwszych znaków ciągu znaków. Podczas dopasowywania wielkość liter ma znaczenie. |
Operatory
Apigee Edge dostosowuje operandy do wspólnego typu danych przed ich porównaniem. Na przykład, jeśli plik
kod stanu odpowiedzi to 404, wyrażenie response.status.code = "400"
oraz
response.status.code = 400
są równoważne.
W przypadku operandów liczbowych typ danych jest interpretowany jako liczba całkowita, chyba że wartość zostanie zakończona w następujący sposób:
- "f" lub „F” (zmiennoprzecinkowa, na przykład 3.142f, 91.1F)
- „d” lub „D” (podwójne, np. 3,142d, 100,123D)
- „l” lub „L” (długi, na przykład 12321421312L)
W takich przypadkach system przeprowadza adaptacje opisane w tabeli poniżej (gdzie zgodnie z dyrektywą RHS po prawej stronie równania, a lewa strona to po lewej):
Z prawej strony | Wartość logiczna | Liczba całkowita | Długi | Liczba zmiennoprzecinkowa | Liczba zmiennoprzecinkowa | Ciąg znaków | Porównywalna | Obiekt |
---|---|---|---|---|---|---|---|---|
Wartość logiczna | Wartość logiczna | Liczba całkowita | Długi | Liczba zmiennoprzecinkowa | Liczba zmiennoprzecinkowa | Ciąg znaków | - | |
Liczba całkowita | Liczba całkowita | Liczba całkowita | Długi | Liczba zmiennoprzecinkowa | Liczba zmiennoprzecinkowa | Ciąg znaków | Porównywalna | - |
Długi | Długi | Długi | Długi | Liczba zmiennoprzecinkowa | Liczba zmiennoprzecinkowa | Ciąg znaków | Porównywalna | - |
Liczba zmiennoprzecinkowa | Liczba zmiennoprzecinkowa | Liczba zmiennoprzecinkowa | Liczba zmiennoprzecinkowa | Liczba zmiennoprzecinkowa | Liczba zmiennoprzecinkowa | Ciąg znaków | Porównywalna | - |
Liczba zmiennoprzecinkowa | Liczba zmiennoprzecinkowa | Liczba zmiennoprzecinkowa | Liczba zmiennoprzecinkowa | Liczba zmiennoprzecinkowa | Liczba zmiennoprzecinkowa | Ciąg znaków | Porównywalna | - |
Ciąg znaków | Ciąg znaków | Ciąg znaków | Ciąg znaków | Ciąg znaków | Ciąg znaków | Ciąg znaków | Porównywalna | - |
Porównywalna | Porównywalna | Porównywalna | Porównywalna | Porównywalna | Porównywalna | Porównywalna | Porównywalna | - |
Obiekt | - | - | - | - | - | - | - | - |
Argumenty o wartości null
W tabeli poniżej pokazujemy, czy warunki przyjmują wartość true
czy
false
, gdy wartości po lewej stronie (LHS) i/lub po prawej stronie mają wartość null
wyświetlonego operandu:
Operator | Brak wartości LHS | RHS – wartość null | Wartości LHS i RHS zerowe |
---|---|---|---|
= , == , := |
false [fałsz] | false [fałsz] | true |
=| |
false [fałsz] | false [fałsz] | false [fałsz] |
!= |
true | true | false [fałsz] |
> lub > |
true | false [fałsz] | false [fałsz] |
>= lub >= |
false [fałsz] | true | true |
< |
true | false [fałsz] | false [fałsz] |
<= |
true | false [fałsz] | true |
~ |
false [fałsz] | Nie dotyczy | false [fałsz] |
~~ |
false [fałsz] | Nie dotyczy | false [fałsz] |
!~ |
true | false [fałsz] | false [fałsz] |
~/ |
false [fałsz] | Nie dotyczy | false [fałsz] |
Literały
Oprócz literałów w postaci ciągów i literałów liczbowych możesz używać poniższych literałów w funkcji instrukcje warunkowe:
null
true
false
Na przykład:
request.header.host is null
flow.cachehit is true
Przykłady
<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>