Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
In questo argomento imparerai a utilizzare JavaScript per aggiungere dinamicamente le intestazioni HTTP a un messaggio di risposta e ad analizzare una risposta JSON e restituire un sottoinsieme delle relative proprietà all' app richiedente.
Scarica e prova il codice campione
Informazioni su questo esempio di cookbook
Questo esempio di cookbook illustra un pattern di proxy API in cui implementi il comportamento dell'API in JavaScript. Gli esempi di JavaScript sono progettati per mostrarti come lavorare con variabili semplici e contenuti dei messaggi. Un esempio mostra come ottenere e impostare le variabili. Il secondo esempio mostra come analizzare JSON e creare un messaggio dal risultato.
Nel proxy API sono presenti due esempi di JavaScript:
setHeaders.js: questo JavaScript recupera i valori di alcune variabili che vengono impostate quando viene richiamato un proxy API. Il codice JavaScript aggiunge queste variabili al messaggio di risposta in modo che tu possa visualizzarne i valori per ogni richiesta che effettui.minimize.js: questo JavaScript mostra come lavorare con i contenuti dei messaggi. L'idea alla base di questo esempio è che un servizio spesso restituisce più dati del necessario. Pertanto, il codice JavaScript analizza il messaggio di risposta, estrae alcune proprietà interessanti proprietà e le utilizza per creare i contenuti del messaggio di risposta.
Il codice per 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 per 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 context. Questo oggetto fa parte di del modello oggetto JavaScript di Edge. Per informazioni dettagliate sul modello oggetto, consulta Modello oggetto JavaScript.
Prima di iniziare
Prima di esplorare questo esempio di cookbook, dovresti anche avere familiarità con questi concetti fondamentali concetti:
- Che cosa sono le policy e come collegarle ai proxy. Per una buona introduzione alle policy, consulta Che cos'è una policy?.
- La struttura di un flusso di proxy, come spiegato in Configurare i flussi. I flussi consentono di specificare la sequenza in cui le policy vengono eseguite da un proxy API. In questo esempio, vengono create e aggiunte diverse policy a un flusso di proxy API.
- Come è organizzato un progetto di proxy API nel file system, come spiegato in Riferimento per la configurazione dei proxy API.
- Una conoscenza pratica di XML, JSON e JavaScript. In questo esempio, crei il proxy API e le relative policy con file XML che risiedono nel file system.
Se hai scaricato il codice campione, puoi trovare tutti i file descritti in questo argomento nella cartella di esempio javascript-cookbook. Le sezioni che seguono descrivono il codice campione nel dettaglio.
Comprendere il flusso del proxy
Per eseguire JavaScript in un proxy API, devi collegarlo a un flusso utilizzando un collegamento di policy chiamato 'Step'. Una policy di tipo Javascript (nota la capitalizzazione) contiene semplicemente un riferimento al nome di un file JavaScript. Indichi il file JavaScript alla policy utilizzando l' elemento ResourceURL.
Ad esempio, la seguente policy fa riferimento al file JavaScript denominato
setHeader.js.
<Javascript name='setHeaders' timeLimit='200'> <ResourceURL>setHeaders.js</ResourceURL> </Javascript>
Puoi collegare questa policy a un flusso di proxy API come faresti con qualsiasi altro tipo di policy. Collegando la policy al flusso del proxy API, indichi dove deve essere eseguito il codice JavaScript. In questo modo puoi eseguire codice JavaScript che interagisce con i messaggi di richiesta o di risposta mentre questi messaggi 'scorrono' attraverso il proxy API. In questo esempio, entrambi i codici JavaScript vengono eseguiti nel flusso di risposta, poiché le policy eseguono due operazioni: impostano le intestazioni HTTP nel messaggio di risposta e "riducono al minimo" il messaggio di risposta restituito da Apigee Edge all'app richiedente.
Se apri questa configurazione del flusso nell'interfaccia utente di gestione, vedrai la configurazione del flusso riportata di seguito.
Seleziona Endpoint Proxy > default > PostFlow nel riquadro di navigazione.

Di seguito è riportata la configurazione XML corrispondente per il ProxyEndpoint denominato "default".
<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.
- <Request> - L'elemento <Request> è composto da diversi elementi <Step>. Ogni passaggio chiama una delle policy che crei nel resto di questo argomento. Queste policy collegano un codice JavaScript al flusso del proxy API e la posizione del collegamento della policy determina quando viene eseguito il codice JavaScript.
- <Response> - L'elemento <Response> include anche
<Steps>. Questi passaggi chiamano anche le policy responsabili dell'elaborazione della risposta finale
dalla destinazione (che in questo esempio è la destinazione del servizio di simulazione di Apigee; nota l'impostazione
HTTPTargetConnection in
/apiproxy/targets/default.xml.) - <HTTPProxyConnection> - Specifica l'host e il percorso URI che
definiscono l'indirizzo di rete che le app chiamano per utilizzare questa API.
- <RouteRule> - Questo elemento specifica quale configurazione TargetEndpoint viene richiamata dal ProxyEndpoint.
Aggiungere codice JavaScript a un proxy
Il codice JavaScript (come gli script Python, i file JAR Java, i file XSLT e così via) viene archiviato come risorse. Quando inizi a lavorare con JavaScript, è più facile archiviare i tuoi file JavaScript nel proxy API. Man mano che avanzi, il codice JavaScript deve essere reso il più generico e riutilizzabile possibile e poi archiviato a livello di ambiente o organizzazione. In questo modo non dovrai archiviare gli stessi file JavaScript in più proxy API, il che può diventare rapidamente ingestibile.
Per scoprire 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 il file README del cookbook JavaScript.
Importare ed eseguire il deployment del proxy API
Dopo aver apportato le modifiche, puoi salvare il proxy API nello strumento di creazione del proxy API nell'interfaccia utente di gestione.
In alternativa, puoi eseguire il seguente comando nella directory
/api-platform-samples/doc-samples/javascript-cookbook.
$ sh deploy.sh
Testare JavaScript
Esegui il seguente comando nella directory
/api-platform-samples/doc-samples/javascript-cookbook.
$ sh invoke.sh
Il flag curl -v viene utilizzato nello script della shell per visualizzare le intestazioni HTTP nel messaggio di risposta
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, vedrai 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 funzionalità, rifare il deployment del proxy API e verificare i risultati 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
Inevitabilmente, si verificheranno errori durante la scrittura di codice JavaScript. Di seguito è riportato il formato degli errori JavaScript che vedrai emessi da un proxy API.
{ "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, in genere esiste più di un modo per implementare funzionalità specifiche. Utilizza le policy predefinite, se possibile, ed evita la tentazione di codificare tutta la logica del proxy API in JavaScript. Anche se Apigee Edge sfrutta il codice JavaScript compilato per migliorare il rendimento, è improbabile che JavaScript funzioni come le policy. Il codice JavaScript potrebbe essere più difficile da gestire e di cui eseguire il debug. Riserva JavaScript per funzionalità specifiche per le tue esigenze.
Se il rendimento è un problema per le funzionalità personalizzate, utilizza Java, se possibile.
Riepilogo
In questo argomento del cookbook hai imparato come includere JavaScript in una configurazione di proxy API per implementare un comportamento personalizzato. Il comportamento personalizzato implementato dagli esempi mostra come ottenere e impostare le variabili e come analizzare JSON e creare messaggi di risposta personalizzati.