Estás viendo la documentación de Apigee Edge.
Ir a la
documentación de Apigee X. info
En este tema, aprenderás a usar JavaScript para agregar encabezados HTTP de forma dinámica a un mensaje de respuesta y a analizar una respuesta JSON y mostrar un subconjunto de sus propiedades a la app que realiza la solicitud.
Descarga y prueba el código de muestra
Acerca de este ejemplo de la guía de soluciones
En este ejemplo de la guía de soluciones, se ilustra un patrón de proxy de API en el que implementas el comportamiento de la API en JavaScript. Los ejemplos de JavaScript están diseñados para mostrarte cómo trabajar con variables simples y contenido de mensajes. En una muestra, se muestra cómo obtener y configurar variables. En el segundo ejemplo, se muestra cómo analizar JSON y construir un mensaje a partir del resultado.
Hay dos muestras de JavaScript en el proxy de API:
setHeaders.js: Este JavaScript obtiene los valores de algunas variables que se configuran cuando se invoca un proxy de API. El JavaScript agrega esas variables al mensaje de respuesta para que puedas ver sus valores para cada solicitud que realices.minimize.js: Este JavaScript te muestra cómo trabajar con el contenido de los mensajes. La idea detrás de esta muestra es que un servicio suele mostrar más datos de los necesarios. Por lo tanto, el JavaScript analiza el mensaje de respuesta, extrae algunas propiedades interesantes y, luego, las usa para compilar el contenido del mensaje de respuesta.
El 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"));
El 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);
Puedes acceder a las variables de flujo en JavaScript a través del objeto context. Este objeto forma parte de el modelo de objetos de JavaScript de Edge. Para obtener detalles sobre el modelo de objetos, consulta el modelo de objetos de JavaScript.
Antes de comenzar
Antes de explorar este ejemplo de la guía de soluciones, también debes familiarizarte con estos conceptos fundamentales:
- Qué son las políticas y cómo adjuntarlas a los proxies. Para obtener una buena introducción a las políticas, consulta ¿Qué es una política?.
- La estructura de un flujo de proxy, como se explica en Configura flujos. Los flujos te permiten especificar la secuencia en la que un proxy de API ejecuta las políticas. En este ejemplo, se crean varias políticas y se agregan a un flujo de proxy de API.
- Cómo se organiza un proyecto de proxy de API en tu sistema de archivos, como se explica en Referencia de configuración del proxy de API.
- Conocimientos prácticos de XML, JSON y JavaScript. En este ejemplo, compilas el proxy de API y sus políticas con archivos XML que residen en el sistema de archivos.
Si descargaste el código de muestra, puedes ubicar todos los archivos que se analizan en este tema en la carpeta de muestra javascript-cookbook. En las siguientes secciones, se analiza el código de muestra en detalle.
Información sobre el flujo de proxy
Para que JavaScript se ejecute en un proxy de API, debes adjuntarlo a un flujo con un adjunto de política llamado "paso". Una política de tipo Javascript (ten en cuenta el uso de mayúsculas) simplemente contiene una referencia al nombre de un archivo de JavaScript. Diriges la política a un archivo de JavaScript con el elemento ResourceURL.
Por ejemplo, la siguiente política hace referencia al archivo de JavaScript llamado
setHeader.js.
<Javascript name='setHeaders' timeLimit='200'> <ResourceURL>setHeaders.js</ResourceURL> </Javascript>
Puedes adjuntar esta política a un flujo de proxy de API como lo harías con cualquier otro tipo de política. Cuando adjuntas la política al flujo de proxy de API, indicas dónde se debe ejecutar el JavaScript. Esto te permite ejecutar JavaScript que interactúa con mensajes de solicitud o mensajes de respuesta a medida que esos mensajes 'fluyen' a través del proxy de API. En este ejemplo, ambos JavaScript se ejecutan en el flujo de respuesta, ya que las políticas hacen dos cosas: establecen encabezados HTTP en el mensaje de respuesta y "minimizan" el mensaje de respuesta que Apigee Edge muestra a la app que realiza la solicitud.
Si abres esta configuración de flujo en la IU de administración, verás la configuración de flujo que se muestra a continuación.
Selecciona Proxy Endpoints > default > PostFlow en el Navigator pane.

A continuación, se muestra la configuración XML correspondiente para el ProxyEndpoint llamado "default" a continuación.
<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>
Este es un resumen de los elementos del flujo.
- <Request> : El elemento <Request> consta de varios elementos <Step>. Cada paso llama a una de las políticas que creas durante el resto de este tema. Estas políticas adjuntan un JavaScript al flujo de proxy de API, y la ubicación del adjunto de la política determina cuándo se ejecuta el JavaScript.
- <Response> : El elemento <Response> también incluye
<Steps>. Estos pasos también llaman a políticas que son responsables de procesar la respuesta final
del destino (que en este ejemplo es el destino del servicio simulado de Apigee; ten en cuenta la
configuración de HTTPTargetConnection en
/apiproxy/targets/default.xml). - <HTTPProxyConnection> : Especifica el host y la ruta de acceso del URI que
definen la dirección de red que llaman las apps para consumir esta API.
- <RouteRule> : Este elemento especifica qué configuración de TargetEndpoint invoca el ProxyEndpoint.
Agrega código JavaScript a un proxy
JavaScript (como las secuencias de comandos de Python, los archivos JAR de Java, los archivos XSLT, etcétera) se almacenan como recursos. Cuando recién comienzas a trabajar con JavaScript, es más fácil almacenar tus archivos de JavaScript en el proxy de API. A medida que avanzas, JavaScript debe ser lo más genérico y reutilizable posible, y luego almacenarse a nivel del entorno o la organización. Esto evita que tengas que almacenar los mismos archivos de JavaScript en varios proxies de API, lo que puede volverse rápidamente inmanejable.
Para obtener información sobre cómo almacenar recursos a nivel de la organización y el entorno, consulta Archivos de recursos.
Probar
Para obtener instrucciones sobre cómo implementar y llamar al proxy, consulta el archivo README de la guía de soluciones de JavaScript.
Importa e implementa el proxy de API
Después de realizar cambios, puedes guardar el proxy de API en la herramienta de compilación de proxy de API en la IU de administración.
O puedes ejecutar el siguiente comando en el directorio
/api-platform-samples/doc-samples/javascript-cookbook.
$ sh deploy.sh
Prueba JavaScript
Ejecuta el siguiente comando en el directorio
/api-platform-samples/doc-samples/javascript-cookbook.
$ sh invoke.sh
La marca -v de curl se usa en la secuencia de comandos del shell para ver los encabezados HTTP en el mensaje de respuesta
modificado por JavaScript.
Puedes enviar una solicitud directamente de la siguiente manera:
$ curl -v http://{org_name}-test.apigee.net/javascript-cookbook
Si el JavaScript se ejecuta correctamente, verás una respuesta como la siguiente:
< 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"}
Ahora puedes modificar el JavaScript para probar cosas nuevas, volver a implementar el proxy de API y verificar los resultados enviando la misma solicitud. Asegúrate siempre de implementar el proxy de API que contiene tu JavaScript para que los cambios surtan efecto.
Errores de secuencia de comandos
Inevitablemente, verás errores cuando escribas JavaScript. A continuación, se muestra el formato de los errores de JavaScript que verás emitidos por un proxy de 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" } } }
Cuándo usar JavaScript
En Apigee Edge, suele haber más de una forma de implementar una funcionalidad específica. Usa políticas listas para usar siempre que sea posible y evita la tentación de codificar toda la lógica de tu proxy de API en JavaScript. Aunque Apigee Edge aprovecha el JavaScript compilado para mejorar el rendimiento, es poco probable que JavaScript funcione tan bien como las políticas. JavaScript puede ser más difícil de mantener y depurar. Reserva JavaScript para la funcionalidad que es exclusiva de tus requisitos.
Si el rendimiento es una preocupación para la funcionalidad personalizada, usa Java siempre que sea posible.
Resumen
En este tema de la guía de soluciones, aprendiste cómo se puede incluir JavaScript en una configuración de proxy de API para implementar un comportamiento personalizado. El comportamiento personalizado implementado por las muestras demuestra cómo obtener y variables, y cómo analizar JSON y construir mensajes de respuesta personalizados.