Riferimento per la configurazione dei proxy API

Stai visualizzando la documentazione di Apigee Edge.
Consulta la documentazione di Apigee X.
info

In qualità di sviluppatore che lavora con Apigee Edge, le tue attività di sviluppo principali riguardano la configurazione di proxy API che fungono da proxy per API o servizi di backend. Questo documento è un riferimento di tutti gli elementi di configurazione disponibili durante la creazione di proxy API.

Se stai imparando a creare proxy API, ti consigliamo di iniziare con l'argomento Crea un proxy API semplice.

I modi più comuni per modificare le configurazioni proxy sono:

Sviluppo locale delle configurazioni proxy

Puoi scaricare le configurazioni proxy per modificarle su una macchina locale. Al termine, carica i risultati su Edge. Questo approccio ti consente di integrare le configurazioni del proxy nel controllo del codice sorgente, nel controllo delle versioni e in altri flussi di lavoro condivisi. Inoltre, se lavori su una configurazione proxy in locale, puoi utilizzare i tuoi strumenti di convalida ed editor XML.

Questa sezione descrive come utilizzare l'interfaccia utente per scaricare una configurazione proxy esistente, modificarla e poi caricarla di nuovo in Edge per il deployment. Puoi anche utilizzare apigeetool per scaricare ed eseguire il deployment di una nuova configurazione proxy (utilizzando rispettivamente i comandi fetchproxy e deployproxy).

Per modificare una configurazione proxy localmente utilizzando la UI:

  1. Scarica la configurazione proxy attuale nell'interfaccia utente Edge. (Nella visualizzazione Proxy API, seleziona Progetto > Scarica revisione.)
  2. Sulla tua macchina locale, crea una nuova directory ed estrai il file ZIP scaricato al suo interno.

    Per espandere il file ZIP, puoi utilizzare un'utilità come unzip, come mostrato nell'esempio seguente:

    mkdir myappdir
    unzip ./my-app_app_rev3_2019_04_20.zip -d myappdir

    I contenuti espansi del file ZIP devono essere simili alla struttura descritta in Struttura del proxy API.

  3. Modifica i file di origine in base alle necessità. Per una descrizione dei file di origine in una configurazione proxy, vedi File di configurazione e struttura delle directory di un proxy API.

    Ad esempio, per attivare il monitoraggio dell'integrità nel proxy API, modifica il file di configurazione TargetEndpoint nella directory /apiproxy/targets/. Il file predefinito in questa directory è default.xml, anche se potrebbero esserci file con nomi diversi se utilizzi target condizionali.

    In questo caso, se il file di configurazione TargetEndpoint e la relativa directory non esistono, creali.

  4. Dopo aver terminato la modifica dei file di configurazione del proxy, assicurati di salvare le modifiche.
  5. Passa alla nuova directory creata quando hai estratto i file ZIP (la radice dei file di configurazione estratti).

    Ad esempio, se hai estratto i file nella directory /myappdir, passa a questa directory, come mostrato nell'esempio seguente:

    cd myappdir

    Devi passare a questa directory prima di archiviare nuovamente i file di configurazione del proxy perché non vuoi che la directory /myappdir venga inclusa nel file ZIP. La directory di primo livello nel file ZIP deve essere /apiproxy.

  6. Archivia di nuovo i file di configurazione del proxy, inclusi i file nuovi o modificati. Puoi utilizzare un utilità come zip, come mostrato nell'esempio seguente:
    zip my-new-proxy.zip -r .

    La directory di primo livello nel file ZIP deve essere /apiproxy.

    Non esistono requisiti speciali per il nome del file ZIP. Ad esempio, non è necessario incrementare il numero di revisione o specificare la data nel nome del file, ma questa operazione può essere utile per il debug o il controllo del codice sorgente.

    Edge incrementa automaticamente il numero di revisione della nuova configurazione proxy quando la carichi.

  7. Carica la nuova configurazione proxy utilizzando la UI di Edge. (Nella visualizzazione Proxy API, seleziona Progetto > Carica una nuova revisione.)

    Se ricevi un errore come Bundle is invalid. Empty bundle., assicurati che la directory di primo livello del file ZIP sia /apiproxy. In caso contrario, archivia nuovamente i file di configurazione del proxy dalla radice della directory espansa.

    Dopo aver caricato la nuova configurazione proxy, Edge incrementa il numero di revisione e lo visualizza nella visualizzazione Riepilogo revisione.

    Edge non esegue il deployment della nuova revisione dopo il caricamento con la UI.

  8. Esegui il deployment della nuova revisione.

Per saperne di più, consulta Tutorial: How to download a proxy using the UI and the management API nella community Apigee.

Struttura del proxy API

Un proxy API è costituito dalla seguente configurazione:

Configurazione di base Impostazioni di configurazione principali per un proxy API. Consulta Configurazione di base.
Configurazione di ProxyEndpoint Impostazioni per la connessione HTTP in entrata (dalle app che richiedono ad Apigee Edge), flussi di richiesta e risposta e allegati delle policy. Vedi ProxyEndpoint.
Configurazione TargetEndpoint Impostazioni per la connessione HTTP in uscita (da Apigee Edge al servizio di backend), flussi di richieste e risposte e allegati delle policy. Vedi TargetEndpoint.
Flussi Pipeline di richiesta e risposta ProxyEndpoint e TargetEndpoint a cui possono essere collegati i criteri. Vedi Flussi.
Norme File di configurazione in formato XML conformi agli schemi delle policy di Apigee Edge. Consulta le norme.
Risorse Script, file JAR e file XSLT a cui fanno riferimento i criteri per eseguire una logica personalizzata. Consulta la sezione Risorse.

Struttura e contenuti della directory del proxy API

I componenti nella tabella precedente sono definiti dai file di configurazione nella seguente struttura di directory:

Mostra la struttura delle directory in cui apiproxy è la radice. Direttamente sotto la
    directory apiproxy si trovano le directory policies, proxies, resources e targets, nonché il
    file weatherapi.xml.

File di configurazione e struttura della directory di un proxy API

Questa sezione spiega i file di configurazione e la struttura delle directory di un proxy API.

Configurazione di base

/apiproxy/weatherapi.xml

La configurazione di base per un proxy API, che definisce il nome del proxy API. Il nome deve essere univoco all'interno di un'organizzazione.

Configurazione di esempio:

<APIProxy name="weatherapi">
</APIProxy>

Elementi di configurazione di base

Nome Descrizione Predefinito Obbligatorio?
APIProxy
name Il nome del proxy API, che deve essere univoco all'interno di un'organizzazione. I caratteri che puoi utilizzare nel nome sono limitati ai seguenti: A-Za-z0-9_- N/D
revision Il numero di revisione della configurazione del proxy API. Non è necessario impostare esplicitamente il numero di revisione, poiché Apigee Edge tiene traccia automaticamente della revisione corrente del proxy API. N/D No
ConfigurationVersion La versione dello schema di configurazione del proxy API a cui è conforme questo proxy API. L'unico valore supportato al momento è majorVersion 4 e minorVersion 0. Questa impostazione potrebbe essere utilizzata in futuro per consentire l'evoluzione del formato del proxy API. 4.0 No
Description Una descrizione testuale del proxy API. Se fornita, la descrizione verrà visualizzata nell'interfaccia utente di gestione di Edge. N/D No
DisplayName Un nome intuitivo che potrebbe essere diverso dall'attributo name della configurazione del proxy API. N/D No
Policies Un elenco di criteri nella directory /policies di questo proxy API. In genere questo elemento viene visualizzato solo quando il proxy API è stato creato utilizzando la UI di gestione Edge. Si tratta semplicemente di un'impostazione "manifest", progettata per fornire visibilità ai contenuti del proxy API. N/D No
ProxyEndpoints Un elenco di ProxyEndpoint nella directory /proxies di questo proxy API. In genere questo elemento viene visualizzato solo quando il proxy API è stato creato utilizzando l'interfaccia utente di gestione Edge. Si tratta semplicemente di un'impostazione del "manifest", progettata per fornire visibilità ai contenuti del proxy API. N/D No
Resources Un elenco di risorse (JavaScript, Python, Java, XSLT) nella directory /resources di questo proxy API. In genere, questo elemento viene visualizzato solo quando il proxy API è stato creato utilizzando la UI di gestione Edge. Si tratta semplicemente di un'impostazione del "manifest", progettata per fornire visibilità ai contenuti del proxy API. N/D No
Spec Identifica la specifica OpenAPI associata al proxy API. Il valore è impostato su un URL o su un percorso nel negozio delle specifiche.

Nota: lo store delle specifiche è disponibile solo nella nuova esperienza Edge. Per saperne di più sullo spazio di archiviazione delle specifiche, vedi Gestire e condividere le specifiche.
N/D No
TargetServers Un elenco di TargetServer a cui viene fatto riferimento in qualsiasi TargetEndpoint di questo proxy API. In genere questo elemento viene visualizzato solo quando il proxy API è stato creato utilizzando la UI di gestione Edge. Si tratta semplicemente di un'impostazione "manifest", progettata per fornire visibilità ai contenuti del proxy API. N/D No
TargetEndpoints Un elenco di TargetEndpoint nella directory /targets di questo proxy API. In genere questo elemento viene visualizzato solo quando il proxy API è stato creato utilizzando l'interfaccia utente di gestione Edge. Si tratta semplicemente di un'impostazione del "manifest", progettata per fornire visibilità ai contenuti del proxy API. N/D No

ProxyEndpoint

L'immagine seguente mostra il flusso di richiesta/risposta:

Mostra un client che chiama un servizio HTTP. La richiesta passa attraverso l&#39;endpoint proxy e poi l&#39;endpoint di destinazione prima di essere
  elaborata dal servizio HTTP. La risposta passa attraverso l&#39;endpoint di destinazione e poi l&#39;endpoint proxy prima di essere restituita al client.

/apiproxy/proxies/default.xml

La configurazione di ProxyEndpoint definisce l'interfaccia in entrata (rivolta al client) per un proxy API. Quando configuri un ProxyEndpoint, imposti una configurazione di rete che definisce in che modo le applicazioni client ("app") devono richiamare l'API sottoposta a proxy.

La seguente configurazione di esempio di ProxyEndpoint verrà memorizzata in /apiproxy/proxies:

<ProxyEndpoint name="default">
  <PreFlow/>
  <Flows/>
  <PostFlow/>
  <HTTPProxyConnection>
    <BasePath>/weather</BasePath>
    <VirtualHost>default</VirtualHost>
  </HTTPProxyConnection>
  <FaultRules/>
  <DefaultFaultRule/>
  <RouteRule name="default">
    <TargetEndpoint>default</TargetEndpoint>
  </RouteRule>
</ProxyEndpoint>

Gli elementi di configurazione obbligatori in un ProxyEndpoint di base sono:

Configurazione di ProxyEndpoint Elementi

Nome Descrizione Predefinito Obbligatorio?
ProxyEndpoint
name Il nome di ProxyEndpoint. Deve essere univoco all'interno della configurazione del proxy API, quando (in rari casi) vengono definiti più ProxyEndpoint. I caratteri che puoi utilizzare nel nome sono limitati ai seguenti: A-Za-z0-9._\-$ %. N/D
PreFlow Definisce i criteri nel flusso PreFlow di una richiesta o di una risposta. N/D
Flows
Definisce i criteri nei flussi condizionali di una richiesta o di una risposta.
N/D
PostFlow
Definisce le policy nel flusso PostFlow di una richiesta o di una risposta.
N/D
HTTPProxyConnection Definisce l'indirizzo di rete e il percorso URI associati al proxy API
BasePath

Una stringa obbligatoria che identifica in modo univoco il percorso URI utilizzato da Apigee Edge per indirizzare i messaggi in entrata al proxy API corretto.

BasePath è un frammento URI (ad esempio /weather) aggiunto all'URL base di un proxy API (ad esempio http://apifactory-test.apigee.net). BasePath deve essere univoco all'interno di un ambiente. L'unicità viene convalidata quando viene generato o importato un proxy API.

Utilizzo di un carattere jolly nei percorsi di base

Puoi utilizzare uno o più caratteri jolly "*" nei percorsi di base del proxy API. Ad esempio, un percorso di base /team/*/members consente ai client di chiamare https://[host]/team/blue/members e https://[host]/team/green/members senza che tu debba creare nuovi proxy API per supportare nuovi team. Tieni presente che /**/ non è supportato.

Importante:Apigee NON supporta l'utilizzo di un carattere jolly "*" come primo elemento di un percorso di base. Ad esempio, questo NON è supportato: /*/search. L'inizio del percorso di base con un "*" può causare errori imprevisti a causa del modo in cui Edge identifica i percorsi validi.

/
VirtualHost

Associa un proxy API a URL di base specifici per un ambiente. Un VirtualHost è una configurazione denominata che definisce uno o più URL per un ambiente.

Gli host virtuali denominati definiti per un ProxyEndpoint determinano i domini e le porte su cui viene esposto un proxy API e, per estensione, l'URL che le app utilizzano per richiamare un proxy API.

Per impostazione predefinita, per un ambiente vengono definiti due VirtualHost denominati: default e secure. Un'organizzazione può anche definire domini personalizzati. Per assicurarti che un proxy API sia disponibile solo tramite HTTPS, ad esempio, imposta VirtualHost in HTTPProxyConnection su secure.

predefinito No
Properties Un insieme di impostazioni di configurazione HTTP facoltative può essere definito come proprietà di un <ProxyEndpoint>. N/D No
FaultRules
Definisce il modo in cui ProxyEndpoint reagisce a un errore. Una regola di errore specifica due elementi:
  • Una condizione che specifica il guasto da gestire in base alla categoria, alla sottocategoria o al nome predefiniti del guasto
  • Una o più policy che definiscono il comportamento della regola di errore per la condizione corrispondente

Consulta la sezione Gestione degli errori.

N/D No
DefaultFaultRule

Gestisce tutti gli errori (di sistema, di trasporto, di messaggistica o delle norme) che non vengono gestiti esplicitamente da un'altra regola di errore.

Consulta la sezione Gestione degli errori.

N/D No
RouteRule Definisce la destinazione dei messaggi di richiesta in entrata dopo l'elaborazione da parte della pipeline di richiesta ProxyEndpoint. In genere, RouteRule punta a una configurazione TargetEndpoint denominata, ma può puntare anche direttamente a un URL.
Name Attributo obbligatorio, che fornisce un nome per RouteRule. I caratteri che puoi utilizzare nel nome sono limitati ai seguenti: A-Za-z0-9._\-$ %. Ad esempio, Cat2 %_ è un nome legale. N/D
Condition Un'istruzione condizionale facoltativa utilizzata per il routing dinamico in fase di esecuzione. Le Conditional RouteRules sono utili, ad esempio, per attivare il routing basato sui contenuti per supportare il controllo delle versioni del backend. N/D No
TargetEndpoint

Una stringa facoltativa che identifica una configurazione TargetEndpoint denominata. Un TargetEndpoint denominato è qualsiasi TargetEndpoint definito nello stesso proxy API nella directory/targets.

Se assegni un nome a un TargetEndpoint, indichi dove devono essere inoltrati i messaggi di richiesta dopo l'elaborazione da parte della pipeline di richiesta ProxyEndpoint. Tieni presente che questa è un'impostazione facoltativa.

Un ProxyEndpoint può chiamare direttamente un URL. Ad esempio, una risorsa JavaScript o Java, che funge da client HTTP, può svolgere il compito di base di un TargetEndpoint, ovvero inoltrare le richieste a un servizio di backend.

N/D No
URL Una stringa facoltativa che definisce un indirizzo di rete in uscita chiamato da ProxyEndpoint, ignorando qualsiasi configurazione TargetEndpoint che potrebbe essere archiviata in /targets N/D No

Come configurare RouteRules

Un TargetEndpoint denominato fa riferimento a un file di configurazione in /apiproxy/targets a cui RouteRule inoltra una richiesta dopo l'elaborazione da parte di ProxyEndpoint.

Ad esempio, la seguente RouteRule fa riferimento alla configurazione /apiproxy/targets/myTarget.xml:

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

Chiamata diretta dell'URL

Un ProxyEndpoint può anche richiamare direttamente un servizio di backend. L'invocazione diretta dell'URL ignora qualsiasi configurazione TargetEndpoints denominata in /apiproxy/targets. Per questo motivo, TargetEndpoint è una configurazione del proxy API facoltativa, anche se, in pratica, l'invocazione diretta da ProxyEndpoint non è consigliata.

Ad esempio, la seguente RouteRule esegue una chiamata HTTP a http://api.mycompany.com/v2.

<RouteRule name="default">
  <URL>http://api.mycompany.com/v2</URL>
</RouteRule>

Route condizionali

RouteRules può essere concatenato per supportare il routing dinamico in fase di runtime. Le richieste in entrata possono essere indirizzate a configurazioni TargetEndpoint denominate, direttamente agli URL o a una combinazione dei due, in base alle intestazioni HTTP, al contenuto del messaggio, ai parametri di query o a informazioni contestuali come l'ora del giorno, le impostazioni internazionali e così via.

Le RouteRule condizionali funzionano come altre istruzioni condizionali su Apigee Edge. Consulta Riferimento per le condizioni e Riferimento per le variabili.

Ad esempio, la seguente combinazione RouteRule valuta innanzitutto la richiesta in entrata per verificare il valore di un'intestazione HTTP. Se l'intestazione HTTP routeTo ha il valore TargetEndpoint1, la richiesta viene inoltrata a TargetEndpoint denominato TargetEndpoint1. In caso contrario, la richiesta in entrata viene inoltrata a http://api.mycompany.com/v2.

<RouteRule name="MyRoute">
  <Condition>request.header.routeTo = "TargetEndpoint1"</Condition>
  <TargetEndpoint>TargetEndpoint1</TargetEndpoint>
</RouteRule>
<RouteRule name="default">
  <URL>http://api.mycompany.com/v2</URL>
</RouteRule>

Route Null

È possibile definire una RouteRule null per supportare scenari in cui il messaggio di richiesta non deve essere inoltrato a TargetEndpoint. Ciò è utile quando ProxyEndpoint esegue tutta l'elaborazione necessaria, ad esempio utilizzando JavaScript per chiamare un servizio esterno o recuperando dati da una ricerca nell'archivio chiave/valore dei servizi API.

Ad esempio, il seguente codice definisce una route null:

<RouteRule name="GoNowhere"/>

Le route nulle condizionali possono essere utili. Nell'esempio seguente, una route null è configurata per l'esecuzione quando un'intestazione HTTP request.header.X-DoNothing ha un valore diverso da null.

<RouteRule name="DoNothingOnDemand">
  <Condition>request.header.X-DoNothing != null</Condition>
</RouteRule>

Ricorda che le RouteRules possono essere concatenate, quindi una Route nulla condizionale sarebbe in genere un componente di un insieme di RouteRules progettate per supportare il routing condizionale.

Un utilizzo pratico di una route nulla condizionale è il supporto della memorizzazione nella cache. Utilizzando il valore della variabile impostata dalla policy di cache, puoi configurare un proxy API per eseguire la route null quando una voce viene pubblicata dalla cache.

<RouteRule name="DoNothingUnlessTheCacheIsStale">
  <Condition>lookupcache.LookupCache-1.cachehit is true</Condition>
</RouteRule>

TargetEndpoint

Mostra un client che chiama un servizio HTTP. La richiesta passa attraverso l&#39;endpoint proxy e poi l&#39;endpoint di destinazione prima di essere
  elaborata dal servizio HTTP. La risposta passa attraverso l&#39;endpoint di destinazione e poi l&#39;endpoint proxy prima di essere restituita al client.

Un TargetEndpoint è l'equivalente in uscita di un ProxyEndpoint. Un TargetEndpoint funge da client per un servizio o un'API di backend: invia richieste e riceve risposte.

Un proxy API non deve avere TargetEndpoints. ProxyEndpoint può essere configurato per chiamare direttamente gli URL. Un proxy API senza TargetEndpoints in genere contiene un ProxyEndpoint che chiama direttamente un servizio di backend o che è configurato per chiamare un servizio utilizzando Java o JavaScript.

Configurazione di TargetEndpoint

/targets/default.xml

TargetEndpoint definisce la connessione in uscita da Apigee Edge a un altro servizio o risorsa.

Ecco una configurazione di esempio di TargetEndpoint:

<TargetEndpoint name="default">
  <PreFlow/>
  <Flows/>
  <PostFlow/>
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <SSLInfo/>
  </HTTPTargetConnection>
  <FaultRules/>
  <DefaultFaultRule/>
  <ScriptTarget/>
  <LocalTargetConnection/>
</TargetEndpoint>

Elementi di configurazione di TargetEndpoint

Un TargetEndpoint può chiamare una destinazione in uno dei seguenti modi:

  • HTTPTargetConnection per chiamate HTTP(S)
  • LocalTargetConnection per il concatenamento proxy-to-proxy locale
  • ScriptTarget per le chiamate a uno script Node.js ospitato su Edge

Configura solo uno di questi in un TargetEndpoint.

Nome Descrizione Predefinito Obbligatorio?
TargetEndpoint
name Il nome di TargetEndpoint, che deve essere univoco all'interno della configurazione del proxy API. Il nome di TargetEndpoint viene utilizzato in ProxyEndpoint RouteRule per indirizzare le richieste per l'elaborazione in uscita. I caratteri che puoi utilizzare nel nome sono limitati ai seguenti: A-Za-z0-9._\-$ %. N/D
PreFlow Definisce i criteri nel flusso PreFlow di una richiesta o di una risposta. N/D
Flows
Definisce i criteri nei flussi condizionali di una richiesta o di una risposta.
N/D
PostFlow
Definisce le policy nel flusso PostFlow di una richiesta o di una risposta.
N/D
HTTPTargetConnection

Con i relativi elementi secondari, specifica una risorsa di backend raggiungibile tramite HTTP.

Se utilizzi HTTPTargetConnection, non configurare altri tipi di connessioni di destinazione (ScriptTarget o LocalTargetConnection).

URL Definisce l'indirizzo di rete del servizio di backend a cui TargetEndpoint inoltra i messaggi di richiesta. N/D No
LoadBalancer

Definisce una o più configurazioni TargetServer denominate. Le configurazioni di TargetServer denominato possono essere utilizzate per il bilanciamento del carico definendo due o più connessioni di configurazione dell'endpoint.

Puoi anche utilizzare TargetServer per disaccoppiare le configurazioni del proxy API dagli URL degli endpoint del servizio di backend concreti.

Consulta Bilanciamento del carico tra server di backend.

N/D No
Properties Un insieme di impostazioni di configurazione HTTP facoltative può essere definito come proprietà di un <TargetEndpoint>. N/D No
SSLInfo Se vuoi, definisci le impostazioni TLS/SSL in un TargetEndpoint per controllare la connessione TLS/SSL tra il proxy API e il servizio di destinazione. Consulta Configurazione di TargetEndpoint TLS/SSL. N/D No
LocalTargetConnection Con i relativi elementi secondari, specifica una risorsa da raggiungere localmente, ignorando le caratteristiche di rete come il bilanciamento del carico e i processori di messaggi.

Per specificare la risorsa di destinazione, includi l'elemento secondario APIProxy (con l'elemento ProxyEndpoint) o l'elemento secondario Path.

Per saperne di più, consulta la sezione Concatenamento di proxy API.

Se utilizzi LocalTargetConnection, non configurare altri tipi di connessioni di destinazione (HTTPTargetConnection o ScriptTarget).

APIProxy Specifica il nome di un proxy API da utilizzare come destinazione per le richieste. Il proxy di destinazione deve trovarsi nella stessa organizzazione e nello stesso ambiente del proxy che invia le richieste. Si tratta di un'alternativa all'utilizzo dell'elemento Percorso. N/D No
ProxyEndpoint Utilizzato con APIProxy per specificare il nome di ProxyEndpoint del proxy di destinazione. N/D No
Path Specifica il percorso dell'endpoint di un proxy API da utilizzare come destinazione per le richieste. Il proxy di destinazione deve trovarsi nella stessa organizzazione e nello stesso ambiente del proxy che invia le richieste. Questa è un'alternativa all'utilizzo di APIProxy. N/D No
FaultRules
Definisce il modo in cui TargetEndpoint reagisce a un errore. Una regola di errore specifica due elementi:
  • Una condizione che specifica il guasto da gestire in base alla categoria, alla sottocategoria o al nome predefiniti del guasto
  • Una o più policy che definiscono il comportamento della regola di errore per la condizione corrispondente

Consulta la sezione Gestione degli errori.

N/D No
DefaultFaultRule

Gestisce eventuali errori (di sistema, di trasporto, di messaggistica o relativi alle norme) che non vengono gestiti esplicitamente da un'altra FaultRule.

Consulta la sezione Gestione degli errori.

N/D No
ScriptTarget
ResourceURL

Definisce il tipo di risorsa (nodo) e il nome dello script Node.js principale che implementa la funzionalità TargetEndpoint.

<ResourceURL>node://server.js</ResourceURL>

Lo script deve essere incluso nei file di risorse del proxy API. Consulta Aggiunta di Node.js a un proxy API esistente.

Se utilizzi ScriptTarget, non configurare altri tipi di connessioni di destinazione (HTTPTargetConnection o LocalTargetConnection).

N/D
EnvironmentVariable

(Facoltativo) Passa le variabili di ambiente allo script Node.js principale.

Consulta Informazioni sul supporto di Edge per i moduli Node.js.

N/D No
Arguments

(Facoltativo) Passa argomenti allo script Node.js principale.

Consulta Informazioni sul supporto di Edge per i moduli Node.js.

N/D No

Configurazione TargetEndpoint TLS/SSL

Gli endpoint di destinazione spesso devono gestire connessioni HTTPS con un'infrastruttura di backend eterogenea. Per questo motivo, sono supportate diverse impostazioni di configurazione TLS/SSL.

TLS/SSL Elementi di configurazione TargetEndpoint

Nome Descrizione Predefinito Obbligatorio?
SSLInfo
Enabled Indica se TLS/SSL è abilitato per l'endpoint. Il valore predefinito è true se <URL> specifica il protocollo HTTPS, e false se <URL> specifica HTTP. true se <URL> specifica HTTPS No
TrustStore Un keystore contenente certificati server attendibili. N/D No
ClientAuthEnabled Un'impostazione che attiva l'autenticazione client in uscita (TLS/SSL bidirezionale) falso No
KeyStore Un keystore contenente le chiavi private utilizzate per l'autenticazione client in uscita N/D Sì (se ClientAuthEnabled è true)
KeyAlias L'alias della chiave privata utilizzata per l'autenticazione client in uscita N/D Sì (se ClientAuthEnabled è true)
Ciphers

Crittografie supportate per TLS/SSL in uscita. Se non vengono specificate cifrature, saranno consentite tutte le cifrature disponibili per la JVM.

Per limitare le cifrature, aggiungi i seguenti elementi che elencano le cifrature supportate:

<Ciphers>
 <Cipher>TLS_RSA_WITH_3DES_EDE_CBC_SHA</Cipher>
 <Cipher>TLS_RSA_WITH_DES_CBC_SHA</Cipher>
</Ciphers>
N/D No
Protocols

Protocolli supportati per TLS/SSL in uscita. Se non vengono specificati protocolli, saranno consentiti tutti i protocolli disponibili per la JVM.

Per limitare i protocolli, aggiungi i seguenti elementi che elencano i protocolli supportati:

<Protocols>
 <Protocol>TLSv1.1</Protocol>
 <Protocol>TLSv1.2</Protocol>
</Protocols>
N/D No
CommonName

Se specificato, un valore rispetto al quale viene convalidato il nome comune del certificato di destinazione. Questo valore è valido solo per le configurazioni TargetEndpoint e TargetServer. Non è valido per le configurazioni VirtualHost.

Per impostazione predefinita, il valore specificato corrisponde esattamente al nome comune del certificato di destinazione. Ad esempio, se utilizzi *.myhost.com come valore per <CommonName>, la corrispondenza e la convalida del nome host di destinazione verranno eseguite solo se il valore esatto *.myhost.com è specificato come nome comune nel certificato di destinazione.

Se vuoi, Apigee può eseguire la corrispondenza con caratteri jolly utilizzando l'attributo wildcardMatch.

Ad esempio, un nome comune specificato come abc.myhost.com in un certificato di destinazione verrà abbinato e convalidato se l'elemento <CommonName> è specificato come segue:

<CommonName wildcardMatch="true">*.myhost.com</CommonName>
N/D No

Esempio di TargetEndpoint con autenticazione client in uscita abilitata

<TargetEndpoint name="default">
  <HttpTargetConnection>
        <URL>https://myservice.com</URL>
    <SSLInfo>
      <Enabled>true</Enabled>
      <ClientAuthEnabled>true</ClientAuthEnabled>
      <KeyStore>myKeystore</KeyStore>
      <KeyAlias>myKey</KeyAlias>
      <TrustStore>myTruststore</TrustStore>
    </SSLInfo>
  </HttpTargetConnection>
</TargetEndpoint>

Per istruzioni dettagliate, consulta Configurazione di TLS da Edge al backend (cloud e cloud privato).

Utilizzo delle variabili di flusso per impostare dinamicamente i valori TLS/SSL

Puoi anche impostare dinamicamente i dettagli TLS/SSL per supportare requisiti di runtime flessibili. Ad esempio, se il proxy si connette a due target potenzialmente diversi (un target di test e un target di produzione), puoi fare in modo che il proxy API rilevi a livello di programmazione l'ambiente che sta chiamando e imposti dinamicamente i riferimenti all'archivio chiavi e all'archivio attendibile appropriati. Il seguente articolo della community Apigee spiega questo scenario in modo più dettagliato e fornisce esempi di proxy API implementabili: Dynamic SSLInfo for TargetEndpoint using variable reference.

Nell'esempio seguente di come impostare il tag <SSLInfo> in una configurazione TargetEndpoint, i valori possono essere forniti in fase di runtime, ad esempio da un callout Java, da un criterio JavaScript o da un criterio Assign Message. Utilizza le variabili del messaggio che contengono i valori che vuoi impostare.

Le variabili sono consentite solo nei seguenti elementi.

<SSLInfo>
    <Enabled>{myvars.ssl.enabled}</Enabled>
    <ClientAuthEnabled>{myvars.ssl.client.auth.enabled}</ClientAuthEnabled>
    <KeyStore>{myvars.ssl.keystore}</KeyStore>
    <KeyAlias>{myvars.ssl.keyAlias}</KeyAlias>
    <TrustStore>{myvars.ssl.trustStore}</TrustStore>
</SSLInfo>

Utilizzo di riferimenti per impostare dinamicamente i valori TLS/SSL

Quando configuri un TargetEndpoint che utilizza HTTPS, devi considerare il caso in cui il certificato TLS/SSL scade o una modifica alla configurazione del sistema richiede l'aggiornamento del certificato. In un'installazione di Edge for Private Cloud, quando configuri TLS/SSL utilizzando valori statici o variabili di flusso, è possibile che tu debba riavviare i Message Processor.

Per saperne di più, vedi Aggiornare un certificato TLS.

Tuttavia, puoi configurare facoltativamente TargetEndpoint in modo che utilizzi un riferimento al keystore o al truststore. Il vantaggio di utilizzare un riferimento è che puoi aggiornarlo in modo che punti a un keystore o un truststore diverso per aggiornare il certificato TLS/SSL senza dover riavviare i processori di messaggi.

Ad esempio, di seguito è riportato un TargetEndpoint che utilizza un riferimento al keystore:

<SSLInfo>
    <Enabled>true</Enabled>
    <ClientAuthEnabled>false</ClientAuthEnabled>
    <KeyStore>ref://keystoreref</KeyStore>
    <KeyAlias>myKeyAlias</KeyAlias>
</SSLInfo>

Utilizza la seguente chiamata API POST per creare il riferimento denominato keystoreref:

curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
-d '<ResourceReference name="keystoreref">
    <Refers>myTestKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
</ResourceReference>' -u email:password

Il riferimento specifica il nome del keystore e il relativo tipo.

Utilizza la seguente chiamata API GET per visualizzare il riferimento:

curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password

Per modificare in un secondo momento il riferimento in modo che punti a un keystore diverso, assicurandoti che l'alias abbia lo stesso nome, utilizza la seguente chiamata PUT:

curl -X PUT -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references/keystoreref \
-d '<ResourceReference name="keystoreref">
    <Refers>myNewKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
</ResourceReference>' -u email:password

TargetEndpoint con bilanciamento del carico target

TargetEndpoints supporta il bilanciamento del carico su più TargetServer denominati utilizzando tre algoritmi di bilanciamento del carico.

Per istruzioni dettagliate, consulta la sezione Bilanciamento del carico tra server di backend.

Norme

La directory /policies in un proxy API contiene tutte le policy disponibili da allegare ai flussi nel proxy API.

Elementi di configurazione delle policy

Nome Descrizione Predefinito Obbligatorio?
Policy
name

Il nome interno del criterio. I caratteri che puoi utilizzare nel nome sono limitati a: A-Za-z0-9._\-$ %. Tuttavia, la UI di gestione di Edge impone ulteriori limitazioni, ad esempio la rimozione automatica dei caratteri non alfanumerici.

Se vuoi, utilizza l'elemento <DisplayName> per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso in linguaggio naturale.

N/D
enabled

Imposta true per applicare la policy.

Imposta false per "disattivare" la policy. La norma non verrà applicata anche se rimane collegata a un flusso.

true No
continueOnError

Imposta questo valore su false per restituire un errore quando un criterio non viene rispettato. Questo è il comportamento previsto per la maggior parte delle norme.

Imposta true per continuare l'esecuzione del flusso anche dopo l'errore di un criterio.

falso No
async

Nota: questo attributo non esegue il criterio in modo asincrono. Nella maggior parte dei casi, lascia il valore predefinito false.

Se impostato su true, l'esecuzione delle norme viene scaricata su un thread diverso, lasciando il thread principale libero di gestire richieste aggiuntive. Al termine dell'elaborazione offline, il thread principale torna e termina la gestione del flusso di messaggi. In alcuni casi, l'impostazione di async su true migliora le prestazioni del proxy API. Tuttavia, l'uso eccessivo di async può influire negativamente sulle prestazioni con un numero eccessivo di cambi di thread.

Per utilizzare il comportamento asincrono nei proxy API, consulta Modello oggetto JavaScript.

falso No

Allegato delle norme

L'immagine seguente mostra la sequenza di esecuzione dei flussi del proxy API:

mostra un client che chiama un servizio HTTP. La richiesta incontra
  ProxyEndpoint e TargetEndpoint, ognuno dei quali contiene passaggi che attivano i criteri. Dopo che il servizio HTTP restituisce la risposta, questa viene elaborata da TargetEndpoint e poi da ProxyEndpoint prima di essere restituita al client. Come per la richiesta, la risposta viene elaborata
  dalle norme all&#39;interno dei passaggi.

Come mostrato sopra:

Le policy vengono associate come passaggi di elaborazione ai flussi. Il nome del criterio viene utilizzato per fare riferimento al criterio da applicare come passaggio di elaborazione. Il formato di un allegato di norme è il seguente:

<Step><Name>MyPolicy</Name></Step>

Le policy vengono applicate nell'ordine in cui vengono collegate a un flusso. Ad esempio:

<Step><Name>FirstPolicy</Name></Step>
<Step><Name>SecondPolicy</Name></Step>

Elementi di configurazione dell'allegato di policy

Nome Descrizione Predefinito Obbligatorio?
Step
Name Il nome della norma da eseguire in base a questa definizione del passaggio. N/D
Condition Un'istruzione condizionale che determina se il criterio viene applicato o meno. Se una policy ha una condizione associata, viene eseguita solo se l'istruzione condizionale restituisce il valore true. N/D No

Flussi

ProxyEndpoint e TargetEndpoint definiscono una pipeline per l'elaborazione dei messaggi di richiesta e risposta. Una pipeline di elaborazione è costituita da un flusso di richiesta e da un flusso di risposta. Ogni flusso di richiesta e flusso di risposta è suddiviso in un PreFlow, uno o più flussi "condizionali" o "denominati" facoltativi e un PostFlow.

  • PreFlow: viene sempre eseguito. Viene eseguito prima di qualsiasi flusso condizionale.
  • PostFlow: viene sempre eseguito. Viene eseguito dopo qualsiasi flusso condizionale.

Inoltre, puoi aggiungere un PostClientFlow a ProxyEndpoint, che viene eseguito dopo che la risposta viene restituita all'app client richiedente. A questo flusso possono essere associate solo le norme MessageLogging e l'estensione Google Stackdriver Logging. PostClientFlow riduce la latenza del proxy API e rende disponibili le informazioni per la registrazione che non vengono calcolate fino a quando la risposta non viene restituita al client, ad esempio client.sent.start.timestamp e client.sent.end.timestamp.Il flusso viene utilizzato principalmente per misurare l'intervallo di tempo tra i timestamp di inizio e fine del messaggio di risposta.

Guarda un breve video su come fare

Video: guarda questo breve video sull'utilizzo di un Message Logging in PostClientFlow.

Ecco un esempio di PostClientFlow con un criterio di registrazione dei messaggi allegato.

    ...
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
    <PostClientFlow>
        <Request/>
        <Response>
            <Step>
                <Name>Message-Logging-1</Name>
            </Step>
        </Response>
    </PostClientFlow>
    ...

La pipeline di elaborazione del proxy API esegue i flussi nella seguente sequenza:

Pipeline di richiesta:

  1. Proxy Request PreFlow
  2. Flussi condizionali della richiesta proxy (facoltativo)
  3. Proxy Request PostFlow
  4. Target Request PreFlow
  5. Flussi condizionali delle richieste target (facoltativo)
  6. Target Request PostFlow

Pipeline di risposta:

  1. Target Response PreFlow
  2. Flussi condizionali di risposta target (facoltativo)
  3. Target Response PostFlow
  4. Proxy Response PreFlow
  5. Flussi condizionali di risposta del proxy (facoltativo)
  6. PostFlow di risposta del proxy
  7. PostClientFlow Response (facoltativo)

Solo i flussi con allegati di criteri devono essere configurati nelle configurazioni ProxyEndpoint o TargetEndpoint. PreFlow e PostFlow devono essere specificati in una configurazione ProxyEndpoint o TargetEndpoint solo quando è necessario applicare un criterio durante l'elaborazione di PreFlow o PostFlow.

A differenza dei flussi condizionali, l'ordine degli elementi PreFlow e PostFlow non è importante: il proxy API eseguirà sempre ciascun elemento nel punto appropriato della pipeline, indipendentemente dalla posizione in cui vengono visualizzati nella configurazione dell'endpoint.

Flussi condizionali

ProxyEndpoint e TargetEndpoint supportano un numero illimitato di flussi condizionali (noti anche come "flussi denominati").

Il proxy API verifica la condizione specificata nel flusso condizionale e, se la condizione è soddisfatta, i passaggi di elaborazione nel flusso condizionale vengono eseguiti dal proxy API. Se la condizione non è soddisfatta, i passaggi di elaborazione nel flusso condizionale vengono ignorati. I flussi condizionali vengono valutati nell'ordine definito nel proxy API e viene eseguito il primo la cui condizione è soddisfatta.

Definendo i flussi condizionali, puoi applicare i passaggi di elaborazione in un proxy API in base a:

  • URI della richiesta
  • Verbo HTTP (GET/PUT/POST/DELETE)
  • Valore di un parametro di query, di un'intestazione e di un parametro del modulo
  • Molti altri tipi di condizioni

Ad esempio, il seguente flusso condizionale specifica che viene eseguito solo quando il percorso della risorsa richiesta è /accesstoken. Qualsiasi richiesta in entrata con il percorso /accesstoken causa l'esecuzione di questo flusso, insieme a tutte le norme associate al flusso. Se il percorso della richiesta non include il suffisso /accesstoken, il flusso non viene eseguito (anche se potrebbe essere eseguito un altro flusso condizionale).

<Flows>
  <Flow name="TokenEndpoint">
    <Condition>proxy.pathsuffix MatchesPath "/accesstoken"</Condition>
    <Request>
      <Step>
        <Name>GenerateAccessToken</Name>
      </Step>
    </Request>
  </Flow>
</Flows>

Elementi di configurazione del flusso

Nome Descrizione Predefinito Obbligatorio?
Flow Una pipeline di elaborazione di richieste o risposte definita da un ProxyEndpoint o TargetEndpoint
Name Il nome univoco del flusso. N/D
Condition Un'istruzione condizionale che valuta una o più variabili per restituire true o false. Tutti i flussi diversi dai tipi PreFlow e PostFlow predefiniti devono definire una condizione per la loro esecuzione. N/D
Request La pipeline associata all'elaborazione dei messaggi di richiesta N/D No
Response La pipeline associata all'elaborazione del messaggio di risposta N/D No

Elaborazione dei passaggi

L'ordine sequenziale dei flussi condizionali viene applicato da Apigee Edge. I flussi condizionali vengono eseguiti dall'alto verso il basso. Viene eseguito il primo flusso condizionale la cui condizione restituisce true e viene eseguito un solo flusso condizionale.

Ad esempio, nella seguente configurazione di Flow, qualsiasi richiesta in entrata che non includa il suffisso del percorso /first o /second causerà l'esecuzione di ThirdFlow, applicando la policy denominata Return404.

<Flows>
  <Flow name="FirstFlow">
    <Condition>proxy.pathsuffix MatchesPath "/first"</Condition>
    <Request>
      <Step><Name>FirstPolicy</Name></Step>
    </Request>
  </Flow>
  <Flow name="SecondFlow">
    <Condition>proxy.pathsuffix MatchesPath "/second"</Condition>
    <Request>
      <Step><Name>FirstPolicy</Name></Step>
      <Step><Name>SecondPolicy</Name></Step>
    </Request>
  </Flow>
  <Flow name="ThirdFlow">
    <Request>
      <Step><Name>Return404</Name></Step>
    </Request>
  </Flow>
</Flows>

Risorse

Le "Risorse" (file di risorse da utilizzare nei proxy API) sono script, codice e trasformazioni XSL che possono essere allegati ai flussi utilizzando i criteri. Questi vengono visualizzati nella sezione "Script" dell'editor proxy API nell'interfaccia utente di gestione.

Consulta File di risorse per i tipi di risorse supportati.

Le risorse possono essere archiviate in un proxy API, un ambiente o un'organizzazione. In ogni caso, una risorsa viene a cui viene fatto riferimento per nome in un criterio. API Services risolve il nome passando dal proxy API, all'ambiente e all'organizzazione.

A una risorsa archiviata a livello di organizzazione è possibile fare riferimento tramite i criteri in qualsiasi ambiente. A una risorsa archiviata a livello di ambiente è possibile fare riferimento nei criteri di quell'ambiente. Una risorsa archiviata a livello di proxy API può essere referenziata solo dai criteri in quel proxy API.