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