Informacje o warunkach

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:

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 &gt; GreaterThan Większe niż. Jeśli używasz > przy definiowaniu warunku w interfejsie Edge skonwertowane na &gt;.
>= lub &gt;= GreaterThanOrEquals Większe lub równe. Jeśli przy definiowaniu warunku w interfejsie Edge użyjesz >=, zostanie on przekonwertowany na &gt;=.
&lt; LesserThan Mniejsze niż. Interfejs Edge nie obsługuje literału <.
&lt;= 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ą javax.util.regex. Dopasowanie jest . Przykłady znajdziesz w sekcji Wzorzec w instrukcjach warunkowych

~ 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 &gt; true false [fałsz] false [fałsz]
>= lub &gt;= false [fałsz] true true
&lt; true false [fałsz] false [fałsz]
&lt;= 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>