Los productos de gestión de APIs (Interfaces de Programación de Aplicaciones) se encargan de:
- proceso de creación y publicación de API
- aplicación de sus políticas de uso
- control de acceso
- manejo de la comunidad de suscriptores
- y recopilación y análisis de estadísticas de uso
¿Qué es IBM API Connect?
IBM API Connect es una solución de gestión de APIs que permite crear, ejecutar, gestionar y proteger APIs y microservicios. Dentro de API Connect nos encontramos con Microgateway, que es un gateway extensible orientado al desarrollador, escrito en Node.js para reforzar el acceso a microservicios y APIs.
Este post es una alternativa a “Introducing API Microgateway: a Programmable Open Source Gateway for your APIs”. Aquí, en vez del tipo LoopBack, crearemos un proyecto OpenAPI, para cuando queramos hacer uso del gateway a partir de servicios web que ya tengamos desarrollados y documentados con Swagger.
En concreto, dado un servicio web que nos devuelve un JSON con los atributos id y content, haremos uso de Microgateway para filtrar la salida, eliminando el atributo id.
Instalación APIC CLI
Asumiendo que ya tienes instalado: Git, Node y npm; ejecuta «npm install -g apiconnect» para instalar la interfaz de línea de comandos de API Connect.
Documentación de un servicio web RESTful
Partiendo de la receta «Building a RESTful Web Service with Spring» vamos a documentar dicho servicio utilizando SpringFox v2.6.1.
Añadimos dependencias al pom:
Anotamos con @EnableSwagger2 y configuramos el Docket en la aplicación:
Documentamos el POJO Greeting.java de salida:
Documentamos el Controlador:
Si además queremos usar herramientas como el editor online de Swagger, debemos añadir un filtro CORS del estilo de
https://github.com/venosov/gs-rest-service/blob/916e9c61ea0c6e28f8a059c1ad35fa9550671c1d/complete/src/main/java/hello/SimpleCORSFilter.java,
pero en este caso debemos hacer el siguiente ajuste «.header(«Origin», «»)» en los tests
https://github.com/venosov/gs-rest-service/blob/bc443ab9257ee1f170b95653940e36392a983bf5/complete/src/test/java/hello/GreetingControllerTests.java
Arrancamos nuestra aplicación Spring Boot y con todo esto ya tenemos nuestro Rest documentado:
El código fuente completo está disponible en https://github.com/venosov/gs-rest-service/.
También está listo para desplegarse en IBM Bluemix.
Creación de definición de API con API Connect
Creamos el directorio donde queramos albergar la definición, nos metemos en él y levantamos el diseñador:
$ mkdir blog-profile $ cd blog-profile $ apic edit
Necesitaremos tener una cuenta en IBM Bluemix para poder logarnos en la página que se nos abrirá en el navegador.
Pinchamos en el botón «Añadir», en la opción «Importar API de un archivo o URL» que sale en el menú desplegado e introducimos la URI «http://localhost:8080/v2/api-docs?group=greetings»
Ya tenemos la configuración Swagger importada, pero debemos hacer algunos ajustes:
- Marcamos esquema https
- Cambiamos el valor de la propiedad Host por: $(catalog.host)
- Marcamos consumo application/json
- Marcamos produce application/json
- Le damos al botón de guardar.
- Pinchamos en el botón de «Play» que hay abajo a la izquierda (si da el error «PM no en ejecución» se pulsa de nuevo) y permanecemos a la espera hasta que la «Pasarela Micro» esté en ejecución (https://localhost:4001/)
- Pinchamos en ensamblar.
- Creamos un conjunto.
- Le añadimos la «Policy» «Invocar». En URL especificamos: http://localhost:8080$(request.path)
- Le damos al botón de guardar.
- Pinchamos en el play chiquitito que hay encima del dibujo del conjunto (tooltip Probar).
- Elegimos la operación get /greeting
- Pinchamos en Invocar.
- Si da algún error relativo a seguridad, es porque de forma predeterminada, el gateway local de API Connect utiliza un certificado falso y el navegador se queja de ello. Abre ese enlace en una nueva pestaña, selecciona la opción para aceptar el certificado y haz click en Invocar de nuevo.
Creación de una política personalizada
Paramos el Microgateway, nos deslogamos y tiramos el API Connect (Ctrl-C).
Creamos el directorio:
$ mkdir -p policies/removesensitive $ cd policies/removesensitive
Creamos estos 3 ficheros para eliminar atributos (en este caso el ‘id’) de salida:
$ cd ../../
Modificamos el archivo .apiconnect/config para que su contenido sea:
{ userPolicies: ["policies"] }
Juntándolo todo
$ apic edit
- Arrancamos el Microgateway (botón play) y esperamos a que se inicie.
- Pinchamos en el API.
- Pinchamos en la pestaña Ensamblar.
- Añadimos nuestra nueva política.
- Pincharmos en el botón guardar.
- Ejecutamos.
Anexo: DataPower Gateway
Con DataPower Gateway se puede hacer el siguiente gatewayscript equivalente: