APIs Technology

Azure API Management es el servicio que ha creado microsoft que cubre la gestión de APIs. Es la competencia a apigee de google y a API Connect de IBM. Se trata de un producto muy completo que nos permite hacer las operaciones de API Management habituales. En esta entrada vamos a introducir el producto con varios ejemplos de configuraciones. 

Exposición de una API sencilla

El objetivo de este punto es crear una API que funcione como un pass through a https://httpbin.org​, este servicio está abierto de forma gratuita a todo el mundo, y contiene un conjunto de endpoints muy útiles para hacer pruebas. En la API que expondremos en Azure, sólo mostraremos el endpoint ​/ip​, que devuelve la ip desde la que nos conectamos:

 

Después rellenaremos el nombre de la API, el host al que apuntamos y el basePath (que en este caso será el mismo que el nombre de la API): 

Una vez creada la API, añadiremos la operación (​/ip)​ pulsando en ​add Operation y rellenaremos los datos del endpoint: 

Una vez guardado el endpoint podremos enviar peticiones a ​/ip desde la pestaña de ​test​, una herramienta que nos proporciona Azure para enviar peticiones y probar nuestra API: 

Si hiciéramos la llamada desde postman, recibiríamos un 401, porque tendremos que enviar un apikey: 

Para generar el apikey tendremos que publicar la API y suscribirnos a ella. Para hacer esto iremos a la sección de Productos, agregaremos un nuevo producto y rellenaremos el nombre (​demo​), la descripción (​demo también), dejaremos el producto como “Publicado” y lo relacionamos con la API que acabamos de crear (de nombre ​demo​).

 

Después iremos a la sección de suscripciones y crearemos una nueva suscripción, añadiendo un nombre, seleccionando como ámbito el Producto y relacionándolo con el producto que acabamos de crear. 

Posteriormente, la suscripción aparecerá en la sección principal de suscripciones, pulsaremos en la parte derecha, y elegiremos la opción de Mostrar u Ocultar Claves:

De esa forma veremos en claro la clave principal, que será el apikey, copiaremos este apikey y lo enviaremos como cabecera de ​ocp-apim-subscription-key para recibir un 200 en postman:

Modificación del path que exponemos

En la sección anterior exponíamos el endpoint: ​https://pepper-api.azure-api.net/demo/ip para conectarnos a ​https://httpbin.org/ip , es decir, el path expuesto por Azure, y el path al que nos conectamos son el mismo (/​ ip)​ . Es muy habitual que esto no sea así, y tengamos que realizar una operación de transformación del path. Vamos a exponer en azure un endpoint con path ​/myip​ y que se conecte el endpoint ​/ip​ del target. 

Ahora cuando llamemos a ​/myip, recibiremos un 404 del target, porque nos estaremos conectando a ​https://httpbin.org/myip​, un endpoint que no existe: 

Para solucionar esto, tenemos que comprender el flujo de una petición en Azure API Management, al editar nuestra API veremos la siguiente disposición gráfica:

En la siguiente imagen, a la izquierda del todo tenemos nuestros endpoints o bien podemos seleccionar ​All operations.​ Para cada endpoint, o para ​All operations vemos 4 cajas a la derecha, que representan el flujo de la petición, el de ​All operations es un flujo que afecta a todas las operaciones y el de cada endpoint sólo afectará a ese endpoint. El flujo es el natural de la petición, del ​Frontend va al ​Inbound processing donde se aplicarán todas las operaciones que realicemos antes de llamar al target, después va al ​Backend (el target), que en este caso es ​https://httpbin.org​, luego va a ​Outbound processing​, donde realizaremos las operaciones después de llamar al target, por ejemplo si quisiéramos modificar el cuerpo de la respuesta que recibe el cliente, ese sería el lugar.

 

Para solucionar el problema que tenemos ahora (exponemos un endpoint que se llama /myip y nos queremos conectar a un endpoint que se llama ​/ip​), tendremos que aplicar una modificación en el path antes de realizar la petición al target, por ello, tendremos que trabajar en​Inbound Processing.​ Pulsaremos sobre ​AddPolicy:

Y la configuraremos para apuntar a /ip:

Una vez hecho esto podremos llamar a ​myip​ recibiendo un 200: 

Es importante saber, que además de la vista con la interfaz de Azure sobre la que hemos trabajado, podremos editar los xml que incluyen el código que muestra la interfaz, para ello pulsaremos en ​</>: 

Veremos un xml donde podemos ver las distintas secciones del flujo (​inbound​, ​outbound​, etc), y las políticas que estamos usando en cada sección: 

Cuando tengamos que realizar operaciones complejas no nos bastará con la interfaz gráfica, y tendremos que acudir a esta vista, que nos permitirá añadir código en C# para personalizar al extremo las operaciones, o añadir configuraciones de las políticas que no son posibles desde la interfaz.

Variables en Azure API Management

En este punto vamos a añadir una cabecera haciendo uso de una variable. Como en otros API Managers tendremos dos tipos de variables, por un lado las predefinidas, que nos permitirán leer y escribir cabeceras, el path, el body, etc, y por otro lado las que creemos nosotros mismos, que nos permitirán guardar en memoria un determinado valor para usar después. Por ejemplo, con esta configuración: 

En la sección ​Inbound:​ 
●  Gracias a la política ​set-variable,​ estaremos creando una variable llamada ​operation que tendrá como valor ​fromvariable​. 
●  En ​set-header​, estaremos añadiendo una cabecera, cuya key será ​X-CLOUDAPPI y cuyo valor será el establecido para la variable anterior. 
Es decir, al llamar a nuestro endpoint ​/myip,​ enviaremos al target la cabecera X-CLOUDAPPI:fromvariable.​ Podríamos seguir complicando la configuración como en la imagen. 

En este caso, realizaremos una operación aritmética en C# para setear el valor de operation.​ Vara ello leeremos el valor de la cabecera de nombre ​one y de su homóloga de nombre ​two​, y las sumaremos. Luego enviaremos ese valor en la cabecera anterior. De esta manera podremos enviar un par de cabeceras (​one y ​two)​ , desde postman y API Connect enviará la suma al target en una nueva cabecera (​X-CLOUDAPPI​).

La posibilidad de ejecutar código en C#, las variables por defecto que nos permiten acceder a los parámetros de la petición, y el conjunto de política que nos proporciona el producto, nos van a permitir adaptar al máximo el comportamiento de nuestro API Manager. 

// ¿Quieres saber más sobre API Management?

¡Descubre como implementarlo!

Author

Sandra Ciruelos

Leave a comment

Tu dirección de correo electrónico no será publicada.