Spring Cloud Gateway también conocido como puerta de enlace o Edge. Es un servidor de enrutamiento dinámico. En otras palabras, nos permite tener un punto de acceso centralizado a nuestros Microservicios. Además, podemos extender su funcionalidad agregando filtros o predicados, entre otras cosas.
Configuración de Spring Cloud Gateway
Creamos un proyecto usando Spring Boot https://start.spring.io/ o nuestro IDE favorito, nos aseguramos de seleccionar las dependencias:
- Eureka Discovery Client
- Gateway
Este proyecto también será registrado por Eureka Server así que agregamos la siguiente configuración:
Configuramos ahora el nombre de la aplicación y el puerto donde se desplegara. Podemos hacer esto en un archivo properties o yml.
Al igual que la configuración anterior, Spring Cloud Gateway puede configurarse en un archivo properties o en un archivo yml, pero para una lectura más fácil aquí mostraré la configuración tipo yml.
Rutas
La configuración mínima indispensable para el Edge o Puerta de Entrada, son las rutas. Estas rutas redireccionarán las peticiones desde el Gateway hasta el servicio que responderá la petición.
El siguiente es un ejemplo de una configuración básica de una ruta en yml:
- id: Identificador unico de la ruta
- uri: Dirección donde el Edge buscara el servicio para redirigir debe empezar por lb (Load balancer)
- Predicates: Serie de reglas que deben de cumplirse para la redirección
- Filters: Nos ayudan a trabajar con el request y response que pasen por la ruta declarada.
En el caso del ejemplo se está enrutando a un Microservicio llamado empleados y si queremos obtener una respuesta de él podemos usar el Spring Cloud Gateway apuntado al puerto del Edge y no al Puerto del Microservicio.
Predicados o Predicates
Son una lista de reglas que deben de cumplirse para que la redirección al servicio sea exitosa. Entre las reglas más comunes.
Los predicados pueden ser de varios tipos, por dirección a redireccionar, por cabecera, por tipo de método, query o cookie.
Lista de ejemplos posible:
Significado de los predicados:
- Path: Permite la redirección de las peticiones que cumplan con la ruta declarada
- Header: Revisa que dentro del request venga el header declarado con el valor indicado
- Method: Indica que solo recibe los métodos declarados
- Query: Indica que debe aparecer el parámetro de búsqueda en el query de la URL
- Cookie: Revisa que la cookie indicada este presente
Filtros de Fábrica Spring Cloud Gateway
Existen filtros que nos ayudan a manipular el request y response, esto significa que puedes agregar información al request o al response dentro de los headers o como parametro en el request la manera de agregarlo es en el archivo application.yml dentro de la sección de configuración de path deseado en un formato de clave valor separado por coma.
Filtros globales Spring Cloud Gateway
Existe una manera de hacer que un filtro pase por todos nuestros requests y response sin necesidad de declararlo uno por uno, en el siguiente ejemplo vamos a agregar un header al request y una cookie al response de todas las peticiones que pasen por el Spring Cloud Gateway.
Para entender el ejemplo anterior debemos destacar varias cosas:
- Implementa las interfaces GlobalFilter y Ordered
- El metro sobreescrito getOrder es utilizado para dar un orden en caso de tener más clases de filtros globales.
- En el método sobreescrito filter se encuentra escrita toda la lógica para interactuar con nuestro request y response.
- En la línea 8 muestra la seccion donde puedes manipular el request en este caso agregando una cabecera.
- La Línea 10 muestra como manipular un response
- En la Línea 13 se agrega una cookie a la respuesta si se cumple con la condición de que exista un header especifico.
- En la Línea 15 se manipula la respuesta para que tome un formato de texto plano
Filter Factory
Si no queremos que el Filtro pase por todos los request y response, sino solo por los que especifiquemos, podemos crear un filtro personalizado de la siguiente manera.
Lo que hace el código anterior es agregar una Cookie al response de la petision con los valores descritos en el archivo yml y debe de destacarse lo siguiente:
- Por convención, el nombre de la clase debe terminar en “FilterFactory”
- Se extiende de la clase AbstractGatewayFilterFactory
- Se necesita usar una clase de configuración, puedes usar un InnerClass, esta clase de configuración almacenara los valores que se enviaran desde el archivo yml.
- La funcionalidad se codifica dentro del método apply
- El valor de retorno del Metodo name debe coincidir con la llave en el archivo yml
- El metodo shortcutFieldOrder indica el orden en el que se asignaran los valores
- Ahora este filtro solo se aplicará donde en los request configurados dentro del archivo application.yml
Conclusiones
Ahora conoces para qué sirve y que puedes lograr configurando Spring Cloud Gateway y sabes, configurar predicados y filtros para ampliar su funcionalidad. No olvides practicar para poder usarlo en el mundo laboral.