Informacje o warunkach

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

Warunki umożliwiają dynamiczne zachowanie 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.

Przegląd warunków

W tej sekcji opisaliśmy, jak i gdzie używać instrukcji warunkowych w Edge. Dodatkowo w tych sekcjach opisano składnię:

Struktura instrukcji warunkowych

Podstawowa struktura instrukcji warunkowej to:

<Condition>variable.name operator "value"</Condition>

Na przykład:

<Condition>request.verb = "GET"</Condition>

Aby wyegzekwować więcej niż 1 warunek naraz, możesz połączyć go z operatorem ORAZ. Na przykład poniższe warunki przyjmują wartość true tylko wtedy, gdy identyfikator URI żądania odpowiada ciągowi /statuses, a 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 tych elementów:

Wykonanie zasady

Za pomocą instrukcji warunkowych możesz kontrolować egzekwowanie zasad. Typowym przypadkiem użycia jest warunkowe przekształcanie wiadomości z odpowiedziami na podstawie nagłówka HTTP lub treści wiadomości.

Ten przykład warunkowo przekształca kod XML na JSON na podstawie nagłówka Accept:

<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 punktach ProxyEndpoints i TargetEndpoints. Pamiętaj, że warunkowo można wykonywać tylko „nazwane” przepływy. Przepływy wstępne i końcowe (zarówno żądania, jak i odpowiedzi) w ProxyEndpoints i TargetEndpoints są realizowane dla każdej transakcji, dzięki czemu zapewniają bezwarunkowe możliwości „failsafe”.

Aby na przykład wykonać przepływ warunkowego żądania na podstawie czasownika HTTP komunikatu z żądaniem oraz przepływu odpowiedzi warunkowej na podstawie (potencjalnego) kodu stanu HTTP wskazują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 konfigurację punktu końcowego serwera proxy. Reguła trasy przekierowuje żądanie do określonego docelowego punktu końcowego. Gdy dostępnych jest więcej niż 1 docelowy punkt końcowy, reguła trasy jest oceniana pod kątem swojego warunku, a jeśli ma wartość prawda, żądanie jest przekazywane do nazwanego docelowego punktu końcowego.

Aby na przykład warunkowo kierować 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>

Więcej informacji znajdziesz w artykule Zmienne i warunki przepływu.

Wyrażenia ścieżki

Wyrażenia ścieżki służą do dopasowywania ścieżek identyfikatora URI, gdzie symbol „*” oznacza pojedynczy element ścieżki oraz „**” oznacza wiele poziomów identyfikatorów URI.

Na przykład:

Wzór Przykładowe ścieżki identyfikatora URI zostały 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

Symbol % jest traktowany jako znak zmiany znaczenia. Wzór %{user%} pasuje do wyrażenia {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 obowiązują te ograniczenia:

  • Operatorów nie można używać jako nazw zmiennych.
  • Przed operatorem i po nim musi być spacja.
  • Aby operator umieścić w zmiennej, musisz ją ująć w pojedyncze cudzysłowy. Na przykład: 'request.header.help!me'.
  • Operatory arytmetyczne (+ * - / %) nie są obsługiwane.
  • W przypadku operatorów używane jest pierwszeństwo w języku Java.
  • Apigee Edge korzysta z wyrażeń regularnych, które zostały zaimplementowane w java.util.regex.

W tabeli poniżej znajdziesz listę obsługiwanych operatorów. W wyrażeniach możesz używać tego symbolu lub słowa:

Symbol Słowo Opis
! Not, not Operator jednoargumentowy (pojedynczy zapis)
= Equals, Is Równa się (z uwzględnieniem wielkości liter)
!= NotEquals, IsNot Nie równa się (wielkość liter ma znaczenie)
:= EqualsCaseInsensitive Są równe, ale wielkość liter nie jest rozróżniana
> lub &gt; GreaterThan Większe niż. Jeśli do definiowania warunku w interfejsie użytkownika Edge użyjesz znaku >, zostanie on przekonwertowany na znak &gt;.
>= lub &gt;= GreaterThanOrEquals Większe niż lub równe. Jeśli do definiowania warunku w interfejsie użytkownika Edge użyjesz znaku >=, zostanie on przekonwertowany na znak &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 W operatorze Or nie jest rozróżniana wielkość liter. Prawidłowe wartości to np. OR, Or i or.
() Grupuje wyrażenie. ( otwiera wyrażenie, a ) je zamyka.
~~ JavaRegex

Pasuje do wyrażenia regularnego zgodnego z javax.util.regex. Wielkość liter w dopasowaniu ma znaczenie. Przykłady znajdziesz w sekcji Dopasowywanie do wzorca w instrukcjach warunkowych.

~ Matches, Like Pasuje do wzorca w stylu glob za pomocą symbolu wieloznacznego „*”. Wielkość liter w dopasowaniu ma znaczenie. Przykłady znajdziesz w artykule Dopasowywanie do wzorca za pomocą warunków warunkowych.
~/ MatchesPath, LikePath Pasuje do wyrażenia ścieżki. Wielkość liter w dopasowaniu ma znaczenie. Przykłady znajdziesz w artykule Dopasowywanie do wzorca za pomocą warunków warunkowych.
=| StartsWith Odpowiada pierwszym znakom ciągu. Wielkość liter w dopasowaniu ma znaczenie.

Argumenty

Apigee Edge dostosowuje operandy do wspólnego typu danych, zanim je porównasz. Jeśli na przykład kod stanu odpowiedzi to 404, wyrażenie response.status.code = "400" i 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 ten sposób:

  • „f” lub „F” (np. 3.142f, 91.1F)
  • „d” lub „D” (liczba zmiennoprzecinkowa, np. 3.142d, 100.123D)
  • „l” lub „L” (długi, np. 12321421312L)

W takich przypadkach system przeprowadza adaptacje przedstawione w poniższej tabeli (gdzie RHS odnosi się do prawej strony równania, a LHS – do lewej):

LHS z prawej strony Wartość logiczna Liczba całkowita Długa liczba całkowita Liczba zmiennoprzecinkowa Double Ciąg znaków Porównywalna Obiekt
Wartość logiczna Wartość logiczna Liczba całkowita Długa liczba całkowita Liczba zmiennoprzecinkowa Double Ciąg znaków -
Liczba całkowita Liczba całkowita Liczba całkowita Długa liczba całkowita Liczba zmiennoprzecinkowa Double Ciąg znaków Porównywalna -
Długa liczba całkowita Długa liczba całkowita Długa liczba całkowita Długa liczba całkowita Liczba zmiennoprzecinkowa Double Ciąg znaków Porównywalna -
Liczba zmiennoprzecinkowa Liczba zmiennoprzecinkowa Liczba zmiennoprzecinkowa Liczba zmiennoprzecinkowa Liczba zmiennoprzecinkowa Double Ciąg znaków Porównywalna -
Double Double Double Double Double Double 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 (LHS) lub prawej (RHS) wyświetlanego operandu mają wartość null:

Operator LHS null RHS null LHS i RHS null
=, ==, := false false prawda
=| false false false
!= prawda prawda false
> lub &gt; prawda false false
>= lub &gt;= false prawda prawda
&lt; prawda false false
&lt;= prawda false prawda
~ false Nie dotyczy false
~~ false Nie dotyczy false
!~ prawda false false
~/ false Nie dotyczy false

Literały

Oprócz literałów ciągów i liczb w instrukcjach warunkowych możesz też używać tych literałów:

  • 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>