sábado, 17 de octubre de 2020

Gravietee: Introducción a creación de APIs

 Hoy vamos a ver Gravitee, una de las opciones open source que existen en el mercado para la gestión de APIs. En este post haremos un acercamiento básico sobre como montar o gestionar una API. 

Como backend utilizaremos ejemplos antiguos. Y en principio no nos centraremos en como debemos instalarlo. Aquí hay un docker-compose que será en el que nos basaremos que nos permitirá realizar el ejemplo. 

Lo primero es hablar un poco de Gravitee y sus componentes:

  • Management API: API de gestión. Nos permitirá realizar la administración de forma remota. Enlace a su documentación. 
  • Management UI: Interfaz gráfica para la administración. La cual usaremos mayormente en el ejemplo.
  • API Gateway: El Gateway encargado de realizar todo el trabajo: Redireccionar, comprobar los planes, etc. 
Ahora ya podemos comenzar a crear nuestra API. Para ello debemos acceder a la URL de la consola de administración a través del siguiente enlace


Como veis al entrar la primera vez no tendremos creado ninguna API, como es normal. Ahora procederemos a crearla. Cuando intentamos acceder por primera vez, podremos crear una API de tres formas:

  • Desde cero: Iremos paso a paso indicando como queremos que sea nuestra API
  • A través de un fichero Swagger que defina exteriormente como es nuestra API.
  • A través de una definición de API propia de Gravitee, que contendrá un mayor nivel de configuración sobre la misma. 
Nosotros haremos la API siempre paso a paso. Al darle a crear una API, entraremos en un tutorial que nos irá indicando como queremos configurar la API. Este tutorial se dividirá en las siguientes secciones:
  • General: Nos permitirá indicar el nombre, descripción, versión y context-path de nuestra API.
  • Gateway: Nos permitirá indicar el backend. En este caso: http://sandbox-camel:9090/book.
  • Plan: Este es un apartado importante. El cual nos permitirá indicar el tipo de acceso a la API, limitar el acceso a determinados recursos o especificar el tipo de subscripción que tendrá. En nuestro ejemplo utilizaremos un plan con seguridad Keyless y con el apartado Path Authorization el cual solo permita la ruta / y los métodos GET y DELETE. 
  • Doc: Nos permitirá asociar documentación a nuestra API.
  • Deployment: Indicará un resumen de la configuración actual y además nos permitirá crear la API y desplegarla con un simple click. 
Una vez creada nos redirigirá a una nueva sección con los detalles de la API, desde la cual podremos acceder a sus planes o subscripciones. Al ser una API Keyless no requerimos de subscripción y por tanto vamos a utilizarla ya directamente. Para que sea visible a todo el mundo y podamos verla debemos pulsar el enlace MAKE PUBLIC, en la nueva sección. 


Ya tendremos nuestra API desplegada y operativa en Gravitee. Y al ser Keyless, podemos probarla a través de una llamada GET a http://localhost:8082/book/ sin ningún otro parámetro. Pero recordemos que además le hemos indicado que solo podemos acceder a la ruta raíz. Por tanto si intentamos realizar la siguiente llamada,   http://localhost:8082/book/1, obtendremos este mensaje:

{
"message": "You're not allowed to access this resource",
"http_status_code": 403
}

Ahora vamos a ver un poco más el funcionamiento de los planes. Desde la sección actual iremos a la opción de menú Plans y lo editaremos. Realizando los siguientes cambios:
  • Restrictions: Añadir un límite de 5 llamadas al minuto. 
  • Restrictions: Añadir una cuota de 20 llamadas al día. 
  • Path Authorization - whitelist: Añadir el path pattern '/{book}' asociado a los métodos GET, PUT y POST
Ahora podremos llamar a todos los recursos de nuestro backend pero como mucho 5 veces al minuto y 20 veces al día. Por tanto si hacemos la llamada a http://localhost:8082/book/1 6 veces, obtendremos el siguiente mensaje:

{
"message": "Rate limit exceeded ! You reach the limit of 5 requests per 1 minutes",
"http_status_code": 429
}

Y si la realizamos más de 20 veces al día, este otro:

{
"message": "Quota exceeded ! You reach the limit of 20 requests per 1 days",
"http_status_code": 429
}

Como veís es facil crear políticas de acceso sobre nuestra API. Y además también habreís comprobado que despues de cualquier cambio sobre la API o el plan asociado, Gravitee te pedirá que la vuelvas a desplegar:


Ahora veremos como hacer una API que requiera una validación a través de una clave y por tanto este subscrita a una aplicación, la cual proveerá de la misma. Podemos elegir entre 3 tipos de claves: API Key, Oauth2 o JWT. Para nuestro ejemplo utilizaremos el más sencillo, API Key. 

Para aplicarlo debemos volver a la sección de planes de nuestra API y crear uno nuevo puesto que no podemos modificar la seguridad del plan anterior. Tras crearlo tendremos que publicarlo y volver a desplegar la API. 

Ahora procederemos a ir a la sección subscription y crear una subscripción entre el nuevo plan y la aplicación por defecto ya creada. Al crear la subscripción, veremos los detalles de la misma y la API Key. 



Si volvemos a probar la llamada que nos permite obtener un libro obtendremos la siguiente respuesta:

{
"message": "Unauthorized",
"http_status_code": 401
}

Para una respuesta correcta, deberemos añadir la cabecera X-Gravitee-Api-Key con el valor de nuestra clave. 

curl --location --request GET 'http://localhost:8082/book/1' \
--header 'X-Gravitee-Api-Key: 5bbdac7d-dc88-4102-9e35-d29a6476cefd'
 
Con esto habremos visto los detalles más importantes en la creación de APIs. Pero en el apartado de la izquierda podremos acceder a otras opciones de menú que nos aportarán mayor configuración:
  • Proxy: Permite modificar o añadir más, incluir cabeceras CORS, health check para verificar si el backend esta operativo o incluir una politica de failover que nos permita indicar el número máximo de llamadas a un backend antes de pasar al siguiente. 
  • Design: Nos permite realizar politicies antes o despues de las llamadas. Estas policies tendrán unas acciones asociadas. Y recursos y propiedades asociadas a estas policies. 
  • Analytics: Nos provee una visual sobre el uso de nuestra API. 
  • Audit: Nos indica todas las acciones de configuración que hemos realizado sobre nuestra API. 
  • Notifications: Nos permite añadir alertas en base a distintos eventos. 
  • Messages: Nos permite indicar como queremos recibir los mensajes. 
Espero que os haya servido como mini tutorial y acercamiento a este excelente software de gestión de APIs. También es importante indicar que aunque no esta incluido en el docker-compose, Gravitee cuenta con un portal del usuario donde se pueden visutalizar todas aquellas APIs que son públicas. 

No hay comentarios:

Publicar un comentario