Proxy API di programmazione con JavaScript

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

In questo argomento imparerai a utilizzare JavaScript per aggiungere dinamicamente intestazioni HTTP a un di risposta e come analizzare una risposta JSON e restituire un sottoinsieme delle sue proprietà al l'app richiedente.

Scarica e prova il codice campione

Informazioni su questo esempio di libro di ricette

L'esempio di questo libro di ricette illustra un pattern di proxy API in cui implementi il comportamento dell'API in JavaScript. Gli esempi JavaScript sono progettati per mostrarti come lavorare con variabili semplici e contenuti dei messaggi. Un esempio mostra come get e impostare le variabili. Il secondo mostra come analizzare JSON e creare un messaggio dal risultato.

Nel proxy API sono presenti due esempi JavaScript:

  • setHeaders.js: questo codice JavaScript riceve i valori di alcune variabili che vengono impostate quando viene richiamato un proxy API. JavaScript aggiunge queste variabili alla risposta. in modo che tu possa vedere i relativi valori per ogni richiesta che effettui.
  • minimize.js: questo codice JavaScript mostra come utilizzare il messaggio contenuti. L'idea alla base di questo esempio è che un servizio spesso restituisce più dati di quelli necessaria. Quindi, il codice JavaScript analizza il messaggio di risposta, estrae alcune e le utilizza per creare il contenuto del messaggio di risposta.

Il codice di setHeader.js:

context.setVariable("response.header.X-Apigee-Target", context.getVariable("target.name"));
context.setVariable("response.header.X-Apigee-ApiProxyName", context.getVariable("apiproxy.name"));
context.setVariable("response.header.X-Apigee-ProxyName", context.getVariable("proxy.name"));
context.setVariable("response.header.X-Apigee-ProxyBasePath", context.getVariable("proxy.basepath"));
context.setVariable("response.header.X-Apigee-ProxyPathSuffix", context.getVariable("proxy.pathsuffix"));
context.setVariable("response.header.X-Apigee-ProxyUrl", context.getVariable("proxy.url"));

Il codice di minimize.js:

// Parse the respose from the target.
var res = JSON.parse(context.proxyResponse.content);

// Pull out only the information we want to see in the response.
var minimizedResponse = { city: res.root.city,
                          state: res.root.state };
          
// Set the response variable. 
context.proxyResponse.content = JSON.stringify(minimizedResponse);

Puoi accedere alle variabili di flusso in JavaScript tramite l'oggetto di contesto. Questo oggetto fa parte di il modello a oggetti JavaScript Edge. Per maggiori dettagli sul modello a oggetti, consulta Modello a oggetti JavaScript.

Prima di iniziare

Prima di esplorare questo esempio di libro di ricette, dovresti aver acquisito familiarità con queste nozioni fondamentali di base:

  • Quali sono i criteri e come collegarli ai proxy. Per una buona introduzione alle norme, consulta Che cos'è un ?.
  • La struttura di un flusso proxy, come spiegato in Configurazione dei flussi. I flussi ti consentono specificare la sequenza con cui i criteri vengono eseguiti da un proxy API. In questo esempio, vengono creati e aggiunti a un flusso di proxy API.
  • Organizzazione di un progetto proxy API nel file system, come spiegato in Riferimento per la configurazione dei proxy API.
  • Conoscenza pratica di XML, JSON e JavaScript. In questo esempio, crei l'API proxy e i relativi criteri con file XML che risiedono nel file system.

Se hai scaricato il codice campione, puoi individuare tutti i file descritti in nella cartella di esempio javascript-cookbook. Le sezioni seguenti trattano del codice campione in dettaglio.

Comprensione del flusso proxy

Per fare in modo che JavaScript venga eseguito in un proxy API, devi collegarlo a un flusso utilizzando un criterio allegato denominato "Step". Un criterio di tipo JavaScript (nota le lettere maiuscole) contiene semplicemente un riferimento al nome di un file JavaScript. Devi indirizzare il criterio a un file JavaScript utilizzando Elemento ResourceURL.

Ad esempio, il seguente criterio fa riferimento al file JavaScript chiamato setHeader.js.

<Javascript name='setHeaders' timeLimit='200'>
    <ResourceURL>setHeaders.js</ResourceURL>
</Javascript>

Puoi collegare questo criterio a un flusso di proxy API come faresti con qualsiasi altro tipo di criterio. Di collegando il criterio al flusso del proxy API, indichi dove deve essere eseguito JavaScript. Ciò ti consente di eseguire JavaScript che interagisce con i messaggi di richiesta o di risposta come "flusso" di questi messaggi attraverso il proxy API. In questo esempio, entrambi i JavaScript vengono eseguiti flusso di risposta, in quanto i criteri fanno due cose: impostare le intestazioni HTTP sul messaggio di risposta e "riduci a icona" il messaggio di risposta che Apigee Edge restituisce all'app richiedente.

Se apri questa configurazione del flusso nell'interfaccia utente di gestione, ne vedrai la configurazione di seguito.

Seleziona Proxy Endpoints > predefinita > PostFlow nel Navigatore riquadro.

La configurazione XML corrispondente per il ProxyEndpoint denominata "default" viene mostrato di seguito.

<ProxyEndpoint name="default">
  <PostFlow>
    <Response>
      <!-- Steps reference policies under /apiproxy/policies -->
      <!-- First, set a few HTTP headers with variables for this transaction. -->
      <Step><Name>setHeaders</Name></Step>
      <!-- Next, transform the response from XML to JSON for easier parsing with JavaScript -->
      <Step><Name>transform</Name></Step>
      <!-- Finally, use JavaScript to create minimized response with just city and state. -->
      <Step><Name>minimize</Name></Step>
    </Response>
  </PostFlow>
  <HTTPProxyConnection>
        <!-- BasePath defines the network address for this API proxy. See the script 'invoke.sh' to see how the complete URL for this API proxy is constructed.-->
    <BasePath>/javascript-cookbook</BasePath>
     <!-- Set VirtualHost to 'secure' to have this API proxy listen on HTTPS. -->
    <VirtualHost>default</VirtualHost>
  </HTTPProxyConnection>
  <RouteRule name="default">
    <TargetEndpoint>default</TargetEndpoint>
  </RouteRule>
</ProxyEndpoint>

Ecco un riepilogo degli elementi del flusso.

  • &lt;Request&gt; - La <Request> è composto da più elementi &lt;Step&gt; elementi. Ogni passaggio richiama uno dei criteri che crei attraverso il resto questo argomento. Questi criteri collegano un codice JavaScript al flusso proxy API e la posizione il collegamento ai criteri determina quando viene eseguito il codice JavaScript.
  • &lt;Response&gt; - La <Response> include anche <Steps>. Questa procedura chiama anche i criteri responsabili dell'elaborazione del risposta dal target (che in questo esempio è il target del servizio fittizio di Apigee), HTTPTargetConnection in /apiproxy/targets/default.xml.)
  • &lt;HTTPProxyConnection&gt; - Specifica il percorso dell'host e dell'URI che definiscono l'indirizzo di rete che le app chiamano per utilizzare questa API.
  • &lt;RouteRule&gt; - Questo elemento specifica quale TargetEndpoint viene richiamata dal ProxyEndpoint.

Aggiunta di codice JavaScript a un proxy

JavaScript (come gli script Python, i file Java JAR, i file TCF e così via) vengono memorizzati risorse. Quando hai iniziato a lavorare con JavaScript, è più facile memorizzare i tuoi JavaScript nel proxy API. Man mano che prosegui, JavaScript deve essere creato in modo generico riutilizzabili più facilmente e poi archiviati a livello di ambiente o organizzazione. In questo modo non è necessario archiviare gli stessi file JavaScript in più proxy API, possono diventare rapidamente ingestibili.

Per saperne di più sull'archiviazione delle risorse a livello di organizzazione e ambiente, consulta File di risorse.

Prova

Per istruzioni sul deployment e sulla chiamata del proxy, consulta Libro di ricette JavaScript README.

Importazione e deployment il proxy API

Dopo aver apportato le modifiche, puoi salvare il proxy API nello strumento per la creazione di proxy API nell'interfaccia utente di gestione.

In alternativa, puoi eseguire il comando seguente nella directory /api-platform-samples/doc-samples/javascript-cookbook.

$ sh deploy.sh

Test di JavaScript

Esegui questo comando nella directory /api-platform-samples/doc-samples/javascript-cookbook.

$ sh invoke.sh

Il flag curl -v viene utilizzato nello script shell per visualizzare le intestazioni HTTP nella risposta messaggio modificato da JavaScript.

Puoi inviare direttamente una richiesta come segue:

$ curl -v http://{org_name}-test.apigee.net/javascript-cookbook 

Se il codice JavaScript viene eseguito correttamente, viene visualizzata una risposta simile alla seguente:

< X-Apigee-Demo-Target: default
< X-Apigee-Demo-ApiProxyName: simple-javascript
< X-Apigee-Demo-ProxyName: default
< X-Apigee-Demo-ProxyBasePath: /javascript-cookbook
< X-Apigee-Demo-ProxyPathSuffix: /xml
< X-Apigee-Demo-ProxyUrl: http://rrt331ea.us-ea.4.apigee.com/javascript-cookbook/xml
 
{"city":"San Jose","state":"CA"}

Ora puoi modificare il codice JavaScript per provare nuove soluzioni, eseguire nuovamente il deployment del proxy API e verificare di ricerca inviando la stessa richiesta. Assicurati sempre di eseguire il deployment del proxy API che contiene il codice JavaScript per applicare le modifiche.

Errori di script

È inevitabile che si verifichino errori durante la scrittura in JavaScript. Il formato degli errori JavaScript che che verrà visualizzato da un proxy API è mostrato di seguito.

{  
   "fault":{  
      "faultstring":"Execution of rewriteTargetUrl failed with error: Javascript runtime error: \"TypeError: Cannot find function getVariable in object TARGET_REQ_FLOW. (rewriteTargetUrl_js#1). at line 1 \"",
      "detail":{  
         "errorcode":"steps.javascript.ScriptExecutionFailed"
      }
   }
}

Quando utilizzare JavaScript

Su Apigee Edge, di solito è possibile implementare più funzionalità specifiche in più modi. Utilizza le funzionalità di i criteri predefiniti predefiniti, se possibile, ed evita la tentazione di programmare tutto il proxy API in JavaScript. Anche se Apigee Edge sfrutta JavaScript compilato per migliorare è improbabile che JavaScript funzioni allo stesso modo delle policy. JavaScript può essere più difficili da gestire ed eseguire il debug. Riserva JavaScript per funzionalità specifiche per il tuo i tuoi requisiti.

Se le prestazioni preoccupano per la funzionalità personalizzata, utilizza Java se possibile.

Riepilogo

In questo argomento del libro di ricette hai imparato come includere JavaScript in un proxy API per implementare un comportamento personalizzato. Il comportamento personalizzato implementato dagli esempi dimostrare come ottenere e variabili e come analizzare JSON e creare una risposta personalizzata messaggi.