Antipattern: richiamare un proxy all'interno di un proxy utilizzando codice personalizzato o come target

Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di Apigee Edge.

Apigee ti consente di richiamare un proxy API da un altro proxy API. Questa funzionalità è utile soprattutto se hai un proxy API che contiene codice riutilizzabile che può essere utilizzato da altri proxy API.

Antipattern

L'invocazione di un proxy API da un altro utilizzando HTTPTargetConnection nell'endpoint di destinazione o codice JavaScript personalizzato comporta un hop di rete aggiuntivo.

Richiama il proxy 2 dal proxy 1 utilizzando HTTPTargetConnection

Il seguente esempio di codice richiama il proxy 2 dal proxy 1 utilizzando HTTPTargetConnection:

<!-- /antipatterns/examples/2-1.xml -->
<HTTPTargetConnection>
  <URL>https://api-test.example.com/proxy2</URL>
</HTTPTargetConnection>

Richiama il proxy 2 dal proxy 1 dal codice JavaScript

Il seguente esempio di codice richiama il proxy 2 dal proxy 1 utilizzando JavaScript:

<!-- /antipatterns/examples/2-2.xml -->
var response = httpClient.send('https://api-test.example.com/proxy2);
response.waitForComplete();

Flusso codice

Per capire perché questo ha uno svantaggio intrinseco, dobbiamo comprendere il percorso seguito da una richiesta come illustrato dal seguente diagramma:

1) Il client invia una richiesta al proxy 1, 2) la richiesta dal proxy 1 al proxy 2 comporta un salto di rete,
            3) richiesta dal proxy 2 al target.
Figura 1: Flusso di codice

Come mostrato nel diagramma, una richiesta attraversa più componenti distribuiti, tra cui il router e il processore di messaggi.

Negli esempi di codice riportati sopra, l'invocazione del proxy 2 dal proxy 1 significa che la richiesta deve essere indirizzata tramite il percorso tradizionale (Router > MP) in fase di esecuzione. Ciò sarebbe simile all'invocazione di un'API da un client, con conseguente esecuzione di più hop di rete che aumentano la latenza. Questi hop sono non necessari, poiché la richiesta del proxy 1 ha già raggiunto il server proxy.

Impatto

L'invocazione di un proxy API da un altro proxy API comporta salti di rete non necessari, ovvero la richiesta deve essere trasmessa da un Message processore di messaggi a un altro.

Best practice

  • Utilizza la funzionalità di concatenazione dei proxy per richiamare un proxy API da un altro. La catena di proxy è più efficiente in quanto utilizza la connessione locale per fare riferimento all'endpoint di destinazione (un altro proxy API).

    L'esempio di codice mostra la catena di proxy utilizzando LocalTargetConnection nella definizione dell'endpoint:

    <!-- /antipatterns/examples/2-3.xml -->
    <LocalTargetConnection>
      <APIProxy>proxy2</APIProxy>
      <ProxyEndpoint>default</ProxyEndpoint>
    </LocalTargetConnection>

    Il proxy API invocato viene eseguito nello stesso processore di messaggi; di conseguenza, evita il salto di rete come mostrato nella figura seguente:

    1) Il client invia una richiesta al proxy 1, 2) Richiesta dal proxy 1 al proxy 2 effettuata tramite chiamata pseudo-locale, 3) Richiesta dal proxy 2 al target.
    Figura 2: flusso di codice con accodamento di proxy

Per approfondire