Hace algún tiempo nuestros compañeros Raúl y Noelia nos contaban la importancia de los API Management en la gestión de un API y los patrones usados en la implementación de un API Gateway.

Hoy vamos a hablar de Apigee; en concreto, de Apigee X: una plataforma para desarrollar y administrar APIs incorporada en 2016 a la suite de soluciones de Google. Este API Management nos proporciona, entre otras cosas, una capa proxy que nos hace de fachada de los servicios de backend, proporcionándonos ayuda en las siguientes áreas:

Apigee X 1

Nos permite crear proxies fácilmente de una manera visual a modo de pasos en su ciclo de vida. Este es el diagrama de una petición.

Apigee X 2

Podemos añadir condicionales y realizar acciones preflow y postflow sobre la petición tanto en la ida al target endpoint como en la vuelta desde el mismo. Desde ejecutar un script en Javascript o Python a añadir un validador OAuth.

Posee herramientas para dotar a las APIs de la seguridad necesaria en un entorno productivo. Podemos usar el protocolo 0Auth 2.0, el lenguaje de marcado para confirmaciones de seguridad (SAML), la seguridad en la capa de transporte (TLS) bidireccional y el encriptado.

Nos da la posibilidad de desplegar en cualquier entorno configurado, con unos pocos clics, una revisión determinada de nuestro proxy. En cada modificación que hagamos sobre este, nos permitirá crear una nueva revisión y desplegarla en el entorno que corresponda.

Ofrece en tiempo real datos desglosados del tráfico de las API. Algunos de estos datos son: tiempo de respuesta, latencia, tamaño de la petición, código de error, API product, developer, app.

Estos datos son fácilmente visualizables en su dashboard:

Apigee X 3

Garantizar la disponibilidad de las API dándonos visibilidad en todo momento de datos importantes para el rendimiento del servicio como pueden ser tráfico o latencia. Más adelante con un ejemplo podremos ver esto de una manera más clara.

Apigee X 4

Proporciona de una manera sencilla herramientas para poder ofrecer al desarrollador diferentes tarifas en función de sus necesidades.

Apigee X 5

Como veremos más adelante, podremos controlar y establecer cuotas de llamadas a las API lo que permite garantizar la estabilidad y la continuidad del servicio.

Publica la documentación de las API en un portal personalizable para que los desarrolladores puedan consultar sin problemas.

Variantes

Apigee tiene las siguientes variantes:

Apigee X 6

¿En qué nos puede ayudar?

Para entender un poco más concretamente en qué nos puede ayudar Apigee vamos a recubrir una pequeña API.

Hemos desplegado en CloudRun un servicio que nos van a proporcionar información referente a libros y autores:

Apigee X 6

/authors

Apigee X 7

/books

Apigee X 8

Visto esto pasamos a configurar nuestro proxy. Para ellos nos vamos a la consola de APIGEE. Si no tenemos configurada la organización va a ser lo primero que nos va a pedir. Para este ejemplo vamos a usar la versión de prueba de 60 días.

Una vez dentro de la consola de Apigee veremos lo siguiente:

Apigee X 9

Lo primero que vamos a hacer es crear el proxy. Para ello, dentro del apartado develop pulsamos en “API Proxies” y vamos a “CREATE NEW”:

Apigee X 10
Apigee X 11

Nos ofrecerá tres tipos de plantilla para crear nuestro proxy: “Upload proxy bundle”, si vamos a crearlo mediante la exportación de uno ya existente; “No target”, si nuestro proxy no va a apuntar a ningún backend externo; o “Reverse proxy”, si vamos a tener que redirigir la petición entrante a otro servicio. En nuestro caso vamos a usar “Reverse proxy” ya que vamos a reenviar las peticiones a nuestra API a los servicios correspondientes que desplegamos en Cloud Run. Tras pulsar en ‘Crear’ nos aparecerá un pequeño asistente con tres pasos en los que se nos solicitará la configuración mínima de nuestro proxy.

Paso 1

Apigee X 12

En este apartado debemos seleccionar el nombre de nuestro proxy así como el base path y la ruta de la API a la que apuntaremos. En nuestro caso, la API está desplegada en CloudRun y su endpoint es https://bookstore-zjbkh6lzwa-ew.a.run.app.

Paso 2

Apigee X 13

Podremos configurar las políticas de seguridad. De momento, vamos a dejarlo sin securizar. Añadiremos esto más adelante.

Paso 3

Apigee X 15

El tercer paso es simplemente a modo de resumen. Una vez lo creemos aparecerá una página de confirmación y podremos ir al listado donde ya aparecerá nuestro proxy:

Apigee X 16

Si accedemos dentro de nuestro proxy veremos un resumen además de poder modificar y publicar nuevas versiones:

Apigee X 17

En este caso vemos que la versión desplegada es la 1 y podemos confirmar que el target endpoint corresponde con el de la API que hemos visto antes. Si tuviéramos más revisiones, desde el selector “Revision” podríamos desplegarla.

Ahora podemos modificar la configuración del proxy desde la pestaña “Develop”.

Apigee X 18

Como hemos comentado anteriormente, desde aquí somos capaces de añadir acciones en cualquiera de los puntos del ciclo de vida de la request, como podría ser añadir un paso de autenticación (veremos este ejemplo más adelante). También podremos depurar peticiones al proxy desde la pestaña “Debug” o incluso ver estadísticas de rendimiento desde la pestaña “Performance” dentro de esta misma opción del menú:

Apigee X 19

En la versión de prueba, Apigee crea una balanceador que hará de punto de entrada de todas las peticiones al proxy. En este caso, por limitaciones de la versión de prueba, no podemos exponer el balanceador a internet por lo que para probarlo vamos a tener que hacerlo con clientes dentro de la misma red. Por esto vamos a crear una máquina virtual desde la que lanzar los curls a los diferentes endpoints.

La primera de ellas es para recuperar los autores (“/bookstore/authors”):

Apigee X 20

La segunda para recuperar los libros (“/bookstore/authors”):

Apigee X 21

Como podemos ver por las respuestas el proxy está funcionando devolviéndonos lo que desde el API le llega.

Sin configurar nada más Apigee ya es capaz de proporcionarnos estadísticas de uso. Si navegamos hasta el apartado “Analyze” dentro de la consola podremos ver datos de tráfico y diferentes métricas tanto del servicio (latencia, tráfico, errores) como del propio cliente (userAgent, SO, tipo de dispositivo o localización de la IP).

Apigee X 22
Apigee X 23

Añadiendo seguridad a nuestras llamadas

Vamos a pasar ahora a securizar el servicio. Como comentábamos, vamos a añadir al Preflow de la entrada al gateway dos acciones. Una para validar un ApiKey (VerifyAPIKey) y otra para eliminar el Apikey (AssignMessage) de la request que más tarde enviaremos al API. Quedando así:

Apigee X 24
Apigee X 25

Hemos usado una autenticación básica pero podríamos usar otros sistemas como OAuth. Además de esto aquí podríamos añadir scripts para tratar la petición o incluso añadir una política de cuotas para restringir las llamadas a la API si el usuario ya llegó a su límite.

Una vez terminada la configuración guardamos y ya podremos desplegar una nueva versión, en este caso la 2.

Si ahora volvemos a lanzar las pruebas de antes, obtendremos lo siguiente:

Apigee X 26

Nos dice que hay un problema con la autenticación debido a que no estamos enviando ningún ApiKey Si volvemos a hacer la petición inventándonos un ApiKey:

Apigee X 27

Evidentemente ApiKey no es correcta ya que nos la acabamos de inventar.

Los siguientes pasos son configurar en la consola los usuarios, aplicaciones y productos que vamos a usar. Esto podemos hacerlo desde el apartado Publish:

Apigee X 28

Vamos a revisar de un primer vistazo cuáles son los artefactos que vamos a manejar desde Apigee. De una manera general, los productos se podrían corresponder con los servicios expuestos de nuestra aplicación. A estos productos se tiene acceso siempre desde una aplicación con la que están vinculados los desarrolladores.

Empezaremos por los usuarios autorizados “Developers”. Añadiremos un usuario de prueba:

Apigee X 29

Una vez creado el usuario tenemos que asignarle una aplicación y productos:

Apigee X 30

Para ello, dentro del mismo apartado vamos a “API Products” y añadimos dos nuevos productos “Books” y “Authors” configurando en API resources el path ”/books” y “/authors”, respectivamente. Con los dos productos creados ya podemos crear la Aplicación y asignar tanto los productos ya creados como el usuario de prueba.

Apigee X 31

Una vez hecho esto nos generará una key a la que ahora sí podremos llamar al Proxy.

Si volvemos a realizar la petición en la que antes obteníamos el error, con esta nueva key generada deberíamos volver a obtener datos:

Apigee X 32

A partir de este momento, desde el apartado de análisis ya podremos tener unos datos un poco más preciosos porque ahora podremos diferenciar las llamadas por aplicación o endpoint:

Apigee X 33

Desde el propio panel de control de cada aplicación dada de alta podemos también revocar permisos de llamada a algunos de sus productos. En este caso vamos a retirar el permiso a la llamada books.

Apigee X 34

Tras modificar la configuración si lanzamos la consulta de los libros obtenemos:

Apigee X 35

Añadiendo cuotas de consumo

Por último, vamos a añadir cuota a la llamada a autores para únicamente permitir una llamada en dos minutos. Volvemos a la pestaña “Develop” de nuestro API Proxy y añadiremos un nuevo step “Impose Quota”.

Apigee X 36

Una vez lo tenemos, guardamos y desplegamos la nueva revisión. Ahora solo falta establecer el límite dentro del propio producto. Vamos al producto Authors y lo configuramos:

Apigee X 37

Ahora volvemos al cliente para lanzar dos llamadas seguidas:

Apigee X 38

En la primera obtenemos los valores pero en la segunda nos devuelve un error “Rate limit quota violation. Quota limit exceeded”.

Conclusiones

Para finalizar, como puntos negativos podríamos decir que, desde nuestro punto de vista, la documentación no es del todo clara (especialmente, tratándose de un producto así) y nos hubiera gustado que la versión de prueba proporcionara al menos una versión limitada de todas las funcionalidades ofertadas en la versión completa.

Sin embargo, como hemos visto, Apigee es una excelente manera de gestionar APIs basándose en el patrón proxy, lo que nos proporciona flexibilidad y sencillez a la hora de diseñarla, depurarla, securizarla, monitorizarla y documentarla. Nos ofrece un producto muy completo que se puede tener funcionando relativamente rápido gracias a su asistente de configuración y su enfoque low-code.

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete