Riferimento per le condizioni

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

Le condizioni consentono ai proxy API di comportarsi in modo dinamico in fase di runtime. Le condizioni definiscono le operazioni basate su variabili, che vengono valutate dalla pipeline di elaborazione Apigee Edge. Istruzioni condizionali sono booleani e restituiscono sempre true o false.

Panoramica delle condizioni

Questa sezione descrive come e dove utilizzare le istruzioni condizionali con Edge. Inoltre, le sezioni seguenti descrivono la sintassi:

di Gemini Advanced.

Struttura delle istruzioni condizionali

La struttura di base di un'istruzione condizionale è la seguente:

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

Ad esempio:

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

Puoi combinare le condizioni con AND per applicarne più di una alla volta. Ad esempio, le seguenti condizioni restituiscono true solo se l'URI della richiesta corrisponde /statuses e il verbo HTTP della richiesta è GET:

<Condition>(proxy.pathsuffix MatchesPath "/statuses") and (request.verb = "GET")</Condition>

Dove è possibile utilizzare le istruzioni condizionali

Puoi utilizzare le condizioni per controllare il comportamento nei seguenti casi:

Esecuzione dei criteri

Utilizzando le dichiarazioni condizionali, puoi controllare l'applicazione dei criteri. Un caso d'uso comune è la trasformazione condizionale dei messaggi di risposta, basata sull'intestazione HTTP o sui contenuti dei messaggi.

L'esempio seguente trasforma in modo condizionale il codice XML in JSON in base all'attributo Accept intestazione:

<Step>
  <Condition>request.header.accept = "application/json"</Condition>
  <Name>XMLToJSON</Name>
</Step>

Esecuzione del flusso

Utilizzando le istruzioni condizionali, puoi controllare l'esecuzione di flussi denominati in ProxyEndpoint e TargetEndpoint. Tieni presente che solo "named" e i flussi possono essere eseguiti in modo condizionale. Preflussi e postflows (sia di richiesta che di risposta) su ProxyEndpoint e TargetEndpoints vengono eseguiti per ogni transazione, quindi specificare "failsafe" incondizionato le funzionalità di machine learning.

Ad esempio, per eseguire un flusso di richieste condizionale basato sul verbo HTTP della richiesta e un flusso di risposta condizionale basato su un (potenziale) codice di stato HTTP che rappresenta errore:

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

Selezione della route dell'endpoint di destinazione

Utilizzando le istruzioni condizionali, puoi controllare l'endpoint di destinazione richiamato dall'endpoint proxy configurazione. Una regola di route inoltra una richiesta a un determinato endpoint di destinazione. Quando più di un endpoint di destinazione è disponibile, la regola di route viene valutata per la sua condizione e, se true, viene inoltrata all'endpoint di destinazione denominato.

Ad esempio, per indirizzare i messaggi in modo condizionale agli endpoint di destinazione designati in base 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>

Consulta le sezioni Variabili di flusso e per ulteriori informazioni.

Espressioni percorso

Le espressioni di percorso vengono utilizzate per trovare corrispondenze per i percorsi dell'URI utilizzando "*" per rappresentare un singolo elemento del percorso e "**" per rappresentare più livelli di URI.

Ad esempio:

Pattern Percorsi URI di esempio corrispondenti
/*/a/ /x/a/ o /y/a/
/*/a/* /x/a/b o /y/a/foo
/*/a/** /x/a/b/c/d
/*/a/*/feed/ /x/a/b/feed/ o /y/a/foo/feed/
/a/**/feed/** /a/b/feed/rss/1234

% viene considerato un carattere di escape. La pattern %{user%} corrisponde a {user} ma non user.

Variabili

Nelle istruzioni condizionali puoi utilizzare sia variabili di flusso integrate sia variabili personalizzate. Per ulteriori informazioni, vedi:

Operatori

Quando utilizzi gli operatori, osserva le seguenti limitazioni:

  • Non è possibile utilizzare gli operatori come nomi di variabili.
  • È necessario uno spazio prima e dopo un operatore.
  • Per includere un operatore in una variabile, il nome della variabile deve essere racchiuso tra virgolette singole. Ad esempio, 'request.header.help!me'.
  • Gli operatori aritmetici (+ * - / %) non sono supportati.
  • Java la precedenza viene utilizzata per gli operatori.
  • Apigee Edge si basa sulle espressioni regolari implementate java.util.regex.

Nella tabella seguente sono elencati gli operatori supportati. Puoi usare il simbolo o la parola nel espressioni:

Simbolo Word Descrizione
! Not, not Operatore unario (richiede un singolo input)
= Equals, Is È uguale a (sensibile alle maiuscole)
!= NotEquals, IsNot Diverso da (sensibile alle maiuscole)
:= EqualsCaseInsensitive È uguale a ma non fa distinzione tra maiuscole e minuscole
> o &gt; GreaterThan Maggiore di. Se utilizzi > quando si definisce la condizione nella UI Edge, convertito in &gt;.
>= o &gt;= GreaterThanOrEquals Maggiore di o uguale a. Se usi >= quando definisci la condizione nella UI Edge, viene convertito in &gt;=.
&lt; LesserThan Minore di. L'interfaccia utente Edge non supporta il valore letterale <.
&lt;= LesserThanOrEquals Minore di o uguale a. L'interfaccia utente Edge non supporta il valore letterale <=.
&& And, and E
|| Or L'operatore Or non è sensibile alle maiuscole. Ad esempio, OR, Or e or sono tutti validi.
() Raggruppa un'espressione. ( apre l'espressione e ) si chiude li annotino.
~~ JavaRegex

Corrisponde a un'espressione regolare conforme a javax.util.regex. La corrispondenza è sensibile alle maiuscole. Per esempi, consulta la sezione Pattern corrispondenza nelle istruzioni condizionali.

~ Matches, Like Corrisponde a un pattern di tipo glob utilizzando l'asterisco (*) carattere jolly. La corrispondenza è sensibile alle maiuscole. Per alcuni esempi, consulta la sezione Corrispondenza di pattern con condizionali.
~/ MatchesPath, LikePath Corrisponde a un'espressione del percorso. La corrispondenza è sensibile alle maiuscole. Per alcuni esempi, consulta la sezione Corrispondenza di pattern con condizionali.
=| StartsWith Corrisponde ai primi caratteri di una stringa. La corrispondenza è sensibile alle maiuscole.

Operandi

Apigee Edge adatta gli operandi a un tipo di dati comune prima di confrontarli. Ad esempio, se il codice di stato della risposta è 404, l'espressione response.status.code = "400" e response.status.code = 400 sono equivalenti.

Per gli operandi numerici, il tipo di dati viene interpretato come numero intero a meno che il valore non venga terminato come segue:

  • "F" o "F" (in virgola mobile, ad esempio, 3.142f, 91.1F)
  • "g" o "D" (doppio, ad esempio, 3.142d, 100.123D)
  • "L" o "L" (lunga, ad esempio, 12321421312L)

In questi casi, il sistema esegue gli adattamenti mostrati nella tabella seguente (dove RHS si riferisce a destra dell'equazione e a sinistra il lato sinistro):

A destra a sinistra Booleano Numero intero Lungo Float Doppio Stringa Paragonabile Oggetto
Booleano Booleano Numero intero Lungo Float Doppio Stringa -
Numero intero Numero intero Numero intero Lungo Float Doppio Stringa Paragonabile -
Lungo Lungo Lungo Lungo Float Doppio Stringa Paragonabile -
Float Float Float Float Float Doppio Stringa Paragonabile -
Doppio Doppio Doppio Doppio Doppio Doppio Stringa Paragonabile -
Stringa Stringa Stringa Stringa Stringa Stringa Stringa Paragonabile -
Paragonabile Paragonabile Paragonabile Paragonabile Paragonabile Paragonabile Paragonabile Paragonabile -
Oggetto - - - - - - - -

Operandi nulli

La tabella seguente mostra se le condizioni restituiscono true o false quando i valori sono nulli sul lato sinistro (LHS) e/o sul lato destro (RHS) dell'operando mostrato:

Operatore LHS null RHS null LHS e RHS null
=, == e := false false true
=| false false false
!= true true false
> o &gt; true false false
>= o &gt;= false true true
&lt; true false false
&lt;= true false true
~ false N/A false
~~ false N/A false
!~ true false false
~/ false N/A false

Valori letterali

Oltre ai valori letterali numerici e stringa, puoi utilizzare i seguenti valori letterali in dichiarazioni condizionali:

  • null
  • true
  • false

Ad esempio:

  • request.header.host is null
  • flow.cachehit is true

Esempi

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