Você está lendo a documentação do Apigee Edge.
Acesse a
documentação da Apigee X. info
Neste tópico, você vai aprender a usar o JavaScript para adicionar cabeçalhos HTTP dinamicamente a uma mensagem de resposta e como analisar uma resposta JSON e retornar um subconjunto das propriedades dela para o app solicitante.
Fazer o download e testar o exemplo de código
Sobre este exemplo de manual
Este exemplo de manual ilustra um padrão de proxy de API em que você implementa o comportamento da API em JavaScript. Os exemplos de JavaScript foram projetados para mostrar como trabalhar com variáveis simples e conteúdo de mensagens. Um exemplo mostra como receber e definir variáveis. O segundo exemplo mostra como analisar JSON e construir uma mensagem a partir do resultado.
Dois exemplos de JavaScript estão no proxy de API:
setHeaders.js: esse JavaScript recebe os valores de algumas variáveis que são definidas quando um proxy de API é invocado. O JavaScript adiciona essas variáveis à mensagem de resposta para que você possa conferir os valores delas para cada solicitação feita.minimize.js: esse JavaScript mostra como trabalhar com o conteúdo da mensagem. A ideia por trás desse exemplo é que um serviço geralmente retorna mais dados do que é necessário. Portanto, o JavaScript analisa a mensagem de resposta, extrai algumas propriedades interessantes propriedades e as usa para criar o conteúdo da mensagem de resposta.
O código de 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"));
O código de 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);
É possível acessar variáveis de fluxo em JavaScript pelo objeto de contexto. Esse objeto faz parte do modelo de objeto JavaScript do Edge. Para mais detalhes sobre o modelo de objeto, consulte Modelo de objeto JavaScript.
Antes de começar
Antes de explorar este exemplo de manual, você também precisa conhecer estes conceitos fundamentais:
- O que são políticas e como anexá-las a proxies. Para uma boa introdução às políticas, consulte O que é uma política?.
- A estrutura de um fluxo de proxy, conforme explicado em Como configurar fluxos. Os fluxos permitem especificar a sequência em que as políticas são executadas por um proxy de API. Neste exemplo, várias políticas são criadas e adicionadas a um fluxo de proxy de API.
- Como um projeto de proxy de API é organizado no sistema de arquivos, conforme explicado em Referência de configuração de proxy de API.
- Um conhecimento prático de XML, JSON e JavaScript. Neste exemplo, você cria o proxy de API e as políticas dele com arquivos XML que residem no sistema de arquivos.
Se você fez o download do exemplo de código, poderá encontrar todos os arquivos discutidos neste tópico na pasta de exemplo javascript-cookbook. As seções a seguir discutem o exemplo de código em detalhes.
Noções básicas sobre o fluxo de proxy
Para que o JavaScript seja executado em um proxy de API, é necessário anexá-lo a um fluxo usando um anexo de política chamado "etapa". Uma política do tipo JavaScript (observe a capitalização) contém apenas uma referência ao nome de um arquivo JavaScript. Você aponta a política para um arquivo JavaScript usando o elemento ResourceURL.
Por exemplo, a política a seguir faz referência ao arquivo JavaScript chamado
setHeader.js.
<Javascript name='setHeaders' timeLimit='200'> <ResourceURL>setHeaders.js</ResourceURL> </Javascript>
É possível anexar essa política a um fluxo de proxy de API como faria com qualquer outro tipo de política. Ao anexar a política ao fluxo de proxy de API, você indica onde o JavaScript precisa ser executado. Isso permite executar o JavaScript que interage com mensagens de solicitação ou mensagens de resposta à medida que essas mensagens 'fluem' pelo proxy de API. Neste exemplo, os dois JavaScripts são executados no fluxo de resposta, já que as políticas fazem duas coisas: definir cabeçalhos HTTP na mensagem de resposta e "minimizar" a mensagem de resposta que o Apigee Edge retorna ao app solicitante.
Se você abrir essa configuração de fluxo na interface de gerenciamento, verá a configuração de fluxo abaixo.
Selecione Endpoints de proxy > padrão > PostFlow no painel Navigator.

A configuração XML correspondente para o ProxyEndpoint chamado "padrão" é mostrada abaixo.
<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>
Confira um resumo dos elementos do fluxo.
- <Request> : o elemento <Request> consiste em vários <Step> elementos. Cada etapa chama uma das políticas criadas no restante deste tópico. Essas políticas anexam um JavaScript ao fluxo de proxy de API, e o local do anexo da política determina quando o JavaScript é executado.
- <Response> - O elemento <Response> também inclui
<Steps>. Essas etapas também chamam políticas responsáveis por processar a resposta final
do destino (que, neste exemplo, é o destino de serviço simulado do Apigee. Observe a
configuração HTTPTargetConnection em
/apiproxy/targets/default.xml.) - <HTTPProxyConnection> : especifica o host e o caminho do URI que
definem o endereço de rede que os apps chamam para consumir essa API.
- <RouteRule> : esse elemento especifica qual configuração de TargetEndpoint é invocada pelo ProxyEndpoint.
Adicionar código JavaScript a um proxy
O JavaScript (como scripts Python, arquivos JAR Java, arquivos XSLT e assim por diante) é armazenado como recursos. Quando você está começando a trabalhar com JavaScript, é mais fácil armazenar os arquivos JavaScript no proxy de API. À medida que você avança, o JavaScript precisa ser o mais genérico e reutilizável possível e, em seguida, armazenado no nível do ambiente ou da organização. Isso evita que você precise armazenar os mesmos arquivos JavaScript em vários proxies de API, o que pode se tornar rapidamente incontrolável.
Para saber como armazenar recursos no nível da organização e do ambiente, consulte Arquivos de recursos.
Faça um teste
Para instruções sobre como implantar e chamar o proxy, consulte o README do manual do JavaScript.
Importar e implantar o proxy de API
Depois de fazer as mudanças, você pode salvar o proxy de API na ferramenta de criação de proxy de API na interface de gerenciamento.
Ou você pode executar o seguinte comando no diretório
/api-platform-samples/doc-samples/javascript-cookbook.
$ sh deploy.sh
Testar o JavaScript
Execute o seguinte comando no diretório
/api-platform-samples/doc-samples/javascript-cookbook.
$ sh invoke.sh
O flag da curl -v é usado no script de shell para conferir os cabeçalhos HTTP na mensagem de resposta
modificada pelo JavaScript.
É possível enviar uma solicitação diretamente da seguinte maneira:
$ curl -v http://{org_name}-test.apigee.net/javascript-cookbook
Se o JavaScript for executado corretamente, você verá uma resposta como esta:
< 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"}
Agora você pode modificar o JavaScript para tentar novas ações, reimplantar o proxy de API e verificar os resultados enviando a mesma solicitação. Sempre implante o proxy de API que contém o JavaScript para que as mudanças entrem em vigor.
Erros de script
Você inevitavelmente verá erros ao escrever JavaScript. O formato dos erros de JavaScript que serão emitidos por um proxy de API é mostrado abaixo.
{ "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 usar o JavaScript
No Apigee Edge, geralmente há mais de uma maneira de implementar funcionalidades específicas. Use políticas prontas sempre que possível e evite a tentação de codificar toda a lógica do proxy de API em JavaScript. Embora o Apigee Edge aproveite o JavaScript compilado para melhorar a performance, é improvável que o JavaScript funcione tão bem quanto as políticas. O JavaScript pode ser mais difícil de manter e depurar. Reserve o JavaScript para funcionalidades exclusivas dos seus requisitos.
Se a performance for uma preocupação para funcionalidades personalizadas, use o Java sempre que possível.
Resumo
Neste tópico do manual, você aprendeu como o JavaScript pode ser incluído em uma configuração de proxy de API para implementar um comportamento personalizado. O comportamento personalizado implementado pelos exemplos demonstra como receber e variáveis e como analisar JSON e construir mensagens de resposta personalizadas.