Post on 22-May-2015
description
Hace poco más de un mes publiqué una entrada introductoria al WSO2 API Manager, APIM, que incluía un ejemplo como usar esta herramienta, el cual
pueden consultar para entender lo que haré en esta entrada.
Básicamente estaremos viendo como exponer servicios usando el APIM y como consumirlos desde una aplicación web luego de autenticarnos.
La idea siempre parte de lo que se aprecia en la siguiente imagen y lo estaremos implementando paso a paso.
Paso 1: desplegar la aplicación que contiene los servicios en el WSO2 Application Server.
Nos descargamos el fuente desde esta ubicación y en mi caso lo guardo en una carpeta que se llama “tutorial” y tendremos la siguiente estructura de
carpetas.
En este paso trabajaremos con el “pizza-shack-api” así que entramos en el directorio hasta llegar a la ruta:
[tutorial]\pizza-shack-api\src\main\java\com\pizzashack\ donde se puede observar los siguientes ficheros.
El único que he cambiado es el PizzaMenu.java debido a un problema con la localización, pues da problema con el punto y la coma en el formato de los
decimales.
Tan pronto lo descargan se ve así:
Luego de realizar el ajuste queda así:
Una vez hecho este cambio vamos a la raíz del proyecto y ejecutamos el comando Maven mvn clean package para que nos cree en la carpeta target el
fichero pizzashack-api-1.0.0.war que será la aplicación web que debemos desplegar en el WSO2 Application Server.
Iniciamos el servidor AS y bien podemos copiar el fichero en la ubicación [AS]\repository\deployment\server\webapps\ y entrar a través de la interfaz
gráfica de la herramienta e ir hasta Home> Manage > Applications > Add> JAX-WS/JAX-RS, y agregarla por esa vía.
En ambos casos ya tendrán desplegada la aplicación que contiene el servicio, tal y como pueden ver a continuación.
Al dar clic en el contexto vemos el dashboard de la aplicación.
Aquí pueden ver las opciones para generar un cliente, copiar su endpoint o ver el diseño del mismo dando clic en WADL.
Volviendo atrás, si dan clic en “Find Services” podrán ver el servicio que se implementa.
Y al dar clic en el enlace tenemos acceso a la descripción del servicio.
Si se fijan verán un servicio para obtener el menú a través de esta URL: http://127.0.0.1:9765/pizzashack-api-1.0.0/api/menu/ si lo probamos con un cliente
veremos lo siguiente:
Nos devuelve el nombre del plato, una descripción, un icono para que sea puesto en la aplicación web que consuma de este servicio y el precio.
Los invito llegado este punto que prueben el resto de los servicios para que vean cómo funcionan, así como revisar el fuente de cada servicio para que
dominen las operaciones implementadas.
Paso 2: publicar estos servicios como APIs en el WSO2 API Manager.
El objetivo de este paso es publicar los servicios como APIs, y para ello debemos acceder al WSO2 API-M Publisher a través de esta URL:
https://localhost:9443/publisher
Una vez autenticados debemos hasta APIs / Add New API tal y como muestra la siguiente imagen.
Crear las 3 APIs una por cada servicio usando la siguiente información:
Delivery API
API Name= pizzaShack
Context = /pizzashack/delivery
Version = 1.0.0
Production Endpoint URL=http://localhost:9765/pizzashack-api-1.0.0/api/delivery
API Resources = Dejar los valores por defecto
Order API
API Name= pizzashack-order
Context = /pizzashack/order
Version = 1.0.0
Production Endpoint URL=http://localhost:9765/pizzashack-api-1.0.0/api/order
API Resources = Dejar los valores por defecto
Menu API
API Name= pizzashack-menu
Context = /pizzashack/menu
Version = 1.0.0
Production Endpoint URL=http://localhost:9765/pizzashack-api-1.0.0/api/menu
API Resources = Dejar los valores por defecto
Una vez terminada esta acción tendremos todas las APIs ya creadas y visibles a través del Browser.
CREATED significa que están en el estado de creadas. Ahora debemos entrar a cada una y modificar el estado en la opción del ciclo de vida para ponerlas
como publicadas.
Si juegan un poco con el ciclo de vida verán que se lleva un control de las acciones realizadas. Algo muy útil para saber que ha pasado con el API en todo
momento.
Luego de cambiar el estado de las 3 APIs se visualizan de la siguiente manera.
Pueden observar cómo ha cambiado su estado.
Así de esta manera hemos creado las 3 APIs y las hemos publicado para que estén visibles en el próximo paso.
Paso 3: Crear una aplicación y subscribir las APIs.
Lo primero es ir al Store del WSO2 API Manager, para poder configurar adecuadamente el consumo de las APIs. Deben acceder a la siguiente URL:
https://localhost:9443/store
Tan pronto nos autenticamos en el Store podemos ver las 3 APIs creadas en el paso anterior.
Ahora debemos dar clic en una de las APIs, y en el combo de las aplicaciones seleccionar la aplicación por defecto o una que ustedes creen. En este ámbito
se entiende por aplicación a la agrupación lógica de un conjunto de APIs sobre la cual realizaremos determinadas acciones. En mi caso creo una nueva
aplicación con el nombre de “Pizza” y accediendo a cada API selecciono en el combobox de las aplicaciones la que he creado.
Al finalizar esta acción las 3 APIs están vinculadas con mi aplicación “Pizza”. La forma de ver esto es ir a la opción “My Subscriptions” en el menú superior y
verán seleccionada en un combobox la aplicación y se van al final de la página verán lo siguiente.
Al inicio de la página tenemos esta configuración:
La cual es muy importante pues nos generará las claves para consumir las APIs, así que le damos al botón “Generate” y obtenemos lo siguiente:
Este token que hemos generado es del tipo “Application Access Tokens”. La herramienta WSO2 API Manager permite generar además de este tipo de token
un “User Access Tokens”.
La diferencia es que el primero nos permite identificar y autenticar una aplicación completa, mientras que el segundo es para identificar y autenticar al
usuario final de una aplicación. Usamos el primer token porque nos permite con un solo token acceder a todas las APIs de la aplicación “Pizza”.
Ahora podemos probar el consumo de una API usando curl con el siguiente comando:
curl -k -H "Authorization: Bearer c4H4fMWbPGw8MNY5gVM9s_DAgXoa" https://localhost:8245/pizzashack/menu/1.0.0
resalto en negrita el token que debe corresponderse con el valor del “Access Token” que pueden observar en la imagen arriba.
Esto nos devuelve lo siguiente.
Con lo cual ya sabemos que nuestras APIs están online.
Paso 4: configurar y desplegar una aplicación web en java que consuma las APIs usando las claves generadas.
Llegado este momento debemos ir al código de la aplicación web que se encuentra en el directorio “pizza-shack-web” y ajustar los parámetros necesarios
en el fichero web.xml que se encuentra en [pizza-shack-web]\src\main\webapp\WEB-INF\web.xml
Luego vamos a la raíz del directorio y ejecutamos el comando Maven mvn clean package.
Esta acción nos genera la aplicación pizzashack.war que procedemos a desplegar también en el WSO2 Application Server.
Accedemos al WSO2 AS y vamos hasta: Home> Manage > Applications> Add> Web Applications buscamos el .war recién creado y le damos al botón
“Upload”.
Como la aplicación web recientemente subida al AS tiene entre sus parámetros el consumerKey y el consumerSecret la aplicación puede generar token
específicos para los usuarios y así de esta manera se restringe el acceso a las APIs.
Paso 5: acceder a la aplicación y consumir las APIs.
Ahora procedemos al siguiente enlace: http://localhost:9765/pizzashack/login.jsp y ponemos las credenciales admin/admin
El sistema nos deja entrar y podemos ver la siguiente pantalla, realmente deliciosa :-D
Ordenamos una pizza.
Y se nos genera un número de identificación.
Con este número vamos al menú superior y seleccionamos “My Orders”.
Introducimos el número y le damos “Find order”.
Como tenemos acceso al código fuente pues podemos ver la implementación tanto de la aplicación JAX-RS como de la aplicación web en JAVA y el consumo
de las APIs, esto lo estaremos analizando en entradas siguientes. Pero igual nos sigue quedando pendiente el tema del monitoreo del consumo de las APIs lo
cual realizaremos en la siguiente entrada conectando a esta solución el WSO2 BAM.
Espero les sea de utilidad.
Algunos enlaces que le pueden servir.
[1] - http://docs.wso2.org/display/AM150/Invoking+APIs+using+a+Web+App+Deployed+in+WSO2+AS [2] - http://lalajisureshika.blogspot.com/2013/06/passing-end-user-details-from-client-to.html [3] - http://asanka.abeysinghe.org/2014/01/oauth-for-application-developer-and.html [4] - http://pushpalankajaya.blogspot.com/2014/01/invoking-apis-using-web-app-with-oauth2.html