Informazioni sulle route

Questa pagina si applica ad Apigee e Apigee hybrid.

Visualizza la documentazione di Apigee Edge.

Una route determina il percorso di una richiesta da ProxyEndpoint a TargetEndpoint. Nella route sono inclusi l'URL utilizzato per accedere all'API ProxyEndpoint e l'URL del servizio di backend definito da TargetEndpoint.

Guarda questo video per un'introduzione alle route, che descrive il rapporto tra ProxyEndpoint e TargetEndpoint.

Determinare l'URL dell'endpoint proxy API

L'immagine seguente mostra una richiesta in arrivo a ProxyEndpoint da un'app, e la richiesta viene indirizzata al servizio di backend:

Una richiesta client HTTP passa attraverso un proxy API su Apigee al servizio HTTP, quindi la risposta passa attraverso il proxy API al client.

Dopo aver creato un proxy API su Apigee, l'URL predefinito utilizzato da un'app per accedere al proxy ha il formato seguente:

https://www.example.com/shopping/cart/addItem
        |_____________| |___________| |_____|
               |             |           |
            hostname      basepath     resource

Dove:

  • Il nome host è un dominio che hai aggiunto al DNS o un indirizzo IP.
  • Il percorso di base e il percorso risorsa vengono definiti quando crei il proxy API.

Quando arriva una richiesta ad Apigee, Apigee analizza l'URL per indirizzare la richiesta al ProxyEndpoint corretto. Ad esempio, il seguente URL viene utilizzato per accedere a un proxy API:

http://example.com/v1/weather/forecastrss

Se esamini la definizione di ProxyEndpoint per il proxy API nella figura precedente, puoi vedere come viene analizzato l'URL:

  1. La parte del dominio dell'URL, http://example.com, corrisponde a un nome host definito in un gruppo di ambienti. È stato eseguito il deployment del proxy in uno o più ambienti all'interno del gruppo di ambienti. Per maggiori informazioni, consulta Informazioni sugli ambienti e sui gruppi di ambienti.
  2. La seconda parte dell'URL, /v1/weather, è determinata dall'elemento <BasePath> in ProxyEndpoint. Hai definito il percorso di base quando hai creato il proxy. Il percorso di base deve essere univoco per il proxy API per l'ambiente in modo che due proxy API nello stesso ambiente non abbiano lo stesso percorso di base.
  3. La terza parte dell'URL, /forecastrss, è una risorsa definita dal proxy API con il flusso condizionale corrispondente definito dall'elemento <Flows>.

Video: guarda un breve video per scoprire di più sugli endpoint proxy API.

Determinazione dell'URL dell'endpoint di destinazione

L'elemento <RouteRule> in una definizione ProxyEndpoint determina la destinazione del proxy API e viene valutato dopo che tutti i criteri in PreFlow, Flussi condizionali e PostFlow della richiesta ProxyEndpoint sono stati elaborati.

Un ProxyEndpoint può definire il target come:

  • Un URL diretto a un servizio di backend.
  • Una singola definizione di TargetEndpoint.
  • Più TargetEndpoint in cui il proxy API delega la richiesta a un endpoint di destinazione in base a una condizione.
  • Route o target nulli, ovvero che la richiesta non viene inoltrata a una destinazione. L'intera elaborazione della richiesta e la generazione della risposta avvengono invece su Apigee.

Video: guarda un breve video per scoprire di più sugli endpoint di destinazione.

URL diretto

Un ProxyEndpoint può richiamare direttamente un servizio di backend, bypassando qualsiasi configurazione TargetEndpoint denominata. Ad esempio, l'elemento <RouteRule> seguente effettua sempre una chiamata HTTP a http://example.com/myAPI:

<RouteRule name="default">
  <URL>http://example.com/myAPI</URL>
</RouteRule>

Tuttavia, poiché non esiste TargetEndpoint, puoi aggiungere criteri solo ai flussi definiti da ProxyEndpoint.

Destinazione singola

In un'unica definizione di target, ProxyEndpoint fa riferimento a una singola definizione di TargetEndpoint per nome, come mostrato nella figura sopra:

<RouteRule name="default">
  <TargetEndpoint>default</TargetEndpoint>
</RouteRule>

Tutte le richieste a questo proxy API vengono indirizzate alla stessa definizione di TargetEndpoint. Il tag <URL> in TargetEndpoint determina la posizione del servizio di backend. Nella figura precedente, l'URL di destinazione è http://weather.yahooapis.com.

Target condizionali

Il tag <RouteRule> consente di indirizzare una richiesta a un target in base a una condizione. Puoi utilizzare variabili di flusso, parametri di query, intestazioni HTTP, contenuti dei messaggi o informazioni contestuali come ora del giorno e impostazioni internazionali per determinare l'endpoint di destinazione. Ad esempio, potresti includere un'area geografica, come Stati Uniti e Regno Unito, in un URL della richiesta. Puoi quindi instradare una richiesta a un endpoint di destinazione in base alla regione.

La seguente regola di route valuta un'intestazione HTTP in una richiesta. Se l'intestazione HTTP routeTo ha il valore TargetEndpoint1, la richiesta viene inoltrata all'TargetEndpoint denominato TargetEndpoint1. In caso contrario, la richiesta viene inoltrata a TargetEndpoint2.

<RouteRule name="MyRoute">
  <Condition>request.header.routeTo = "TargetEndpoint1"</Condition>
  <TargetEndpoint>TargetEndpoint1</TargetEndpoint>
</RouteRule>
<RouteRule name="default">
  <TargetEndpoint>TargetEndpoint2</TargetEndpoint>
</RouteRule>

Se hai più regole di route, creane una come predefinita, ovvero come una regola di route senza condizione. Assicurati che la regola di route predefinita sia definita per ultima nell'elenco delle route condizionali poiché le regole vengono valutate dall'alto verso il basso in ProxyEndpoint.

Vedi anche Route condizionali e Riferimento per le condizioni.

Video: guarda un breve video per scoprire come eseguire il routing a un endpoint di destinazione utilizzando i target condizionali.

Route nulla

Una route nulla supporta scenari in cui il messaggio di richiesta non deve essere inoltrato a un TargetEndpoint. Questo è utile quando ProxyEndpoint esegue tutte le elaborazioni necessarie, ad esempio utilizzando JavaScript per chiamare un servizio esterno.

L'esempio seguente definisce una route nulla:

<RouteRule name="GoNowhere"/>

Scopri di più