Desarrollo de APIS REST con Plataforma: Low-Code vs Spring Boot
Introducción
El objetivo de este tutorial es mostrar el soporte que ofrece la plataforma para el desarrollo de APIS REST, de modo que esta puede usarse como una plataforma Low-Code o bien como una herramienta que da soporte al desarrollo de APIs con una de las tecnologías más usadas para esto, Spring Boot.
Con esto demostraremos que la Plataforma ofrece al desarrollador un conjunto de características muy interesantes de cara a abordar su proyecto:
Desarrollo ágil: todas las piezas que componen un desarrollo se gestionan y se manejan desde un entorno web único, donde se ofrecen herramientas gráficas para eliminar o minimizar el desarrollo.
Desarrollo Business-Centric: el programador puede construir sistemas complejos aislándose de las complejidades de la tecnología subyacente.
Gestión del ciclo de vida del software: la plataforma cubre todas las fases, desde el desarrollo al despliegue.
Desarrollo sobre piezas open-source: ampliamente usadas en el desarrollo empresarial. Prácticamente estándares en su ámbito como Spring Boot, Kafka, MongoDB, Elasticsearch,...
Desarrollo flexible: la plataforma permite seleccionar qué piezas de la plataforma quiere usar el programador, uniendo estas piezas a un desarrollo tradicional.
Un tema a destacar es la flexibilidad de la plataforma, ya que permite usar aproximaciones diversas como se va a mostrar e incluso usar aproximaciones mixtas en las que ciertas partes pueden desarrollarse con entornos visuales de plataforma y otras con una aproximación más tradicional.
Será responsabilidad del equipo técnico decidir cual es la aproximación más adecuada para su proyecto, en función del expertise del equipo, tiempos para el desarrollo, etc.
¿Cómo seguir el tutorial?
Como decíamos al principio, vamos a mostrar cómo se haría el desarrollo de un API REST (y todo lo que hay alrededor de este concepto, como el versionado, ciclo de vida, despliegue, seguridad a integración con UI Javascript) siguiendo el enfoque Low-Code de Plataforma y usando la plataforma junto a un desarrollo en Spring Boot.
Para ello se han creado dos entradas, una para cada aproximación.
Ambas entradas siguen estos pasos:
Preparar del Entorno para el Desarrollo.
Desarrollar un API con Onesait Platform y con Spring Boot para el envío de mensajes:
Funcionalidad del API.
Definir Recurso Message y creación del interfaz del API.
Probar el API con Swagger.
Ampliar la funcionalidad del API para que envíe un mail.
Integrar seguridad a tu API: autenticación.
Completar funcionalidad del API.
Desplegar tu API.
Gestionar el ciclo de vida del API desde Portal API.
INFO
El código de este ejemplo se encuentra disponible en este repositorio Github: https://github.com/onesaitplatform/onesaitplatform-spring-boot-example.
Comparando tiempos
En esta sección analizamos los tiempos necesarios para el desarrollo de la funcionalidad siguiendo la aproximación LowCode, la aproximación que además de Plataforma usa Spring Boot y una tercera aproximación en la que no utilizamos ninguna de las capacidades de plataforma para el desarrollo y despliegue.
También comparamos el expertise necesario por la persona que hace el desarrollo
Desarrollo Plataforma Enfoque Low Code | Desarrollo Plataforma + Spring Boot | Desarrollo Spring Boot sin plataforma | |
---|---|---|---|
1. Preparación del Entorno para el Desarrollo | 1.1. Aprovisionamiento en Entorno Onesait Platform (0h si usamos Lab / 1h instalación en E. Desarrollo) | 1.1. Instalación de Herramientas: SDK Plataforma + Docker + MongoDB (docker/bin) (1h) | 1.1. Instalación de Herramientas: JDK, Maven, IDE (Eclipse…) , MongoDB (docker/bin) (2h) |
1.2. Registro de usuario developer en plataforma, para acceso a herramientas/módulos (5m) | 1.2. Creación del proyecto Spring Boot con Soporte Microservicios: estructura base, dependencias necesarias, propiedades de configuración (conexiones, etc) (30m) | 1.2. Creación del proyecto Spring Boot: estructura base, dependencias necesarias, propiedades de configuración (conexiones, etc) (30m) | |
TIEMPO TAREA 1 Expertise | ~1h User/Developer Junior | ~1h 30m Developer Java | ~2h 30m Developer Java |
2. Desarrollo de una API con envío de mensajes | 2.1. Creación de entidad (Ontología) (5m) | 2.1. Creación entidad Spring Data (15m) | 2.1. Creación entidad Spring Data (15m) |
2.2. Creación de la API, con operaciones custom en lenguaje SQL (15m) | 2.2. Creación de operaciones sobre la entidad con Spring Data | 2.2. Creación de operaciones sobre la entidad con Spring Data | |
2.3. Definición Swagger: ya la da automáticamente la plataforma (0m) | 2.2.1 Creación de la capa de Repository, con operaciones custom no provistas por la interfaz de Spring Data (2h) | 2.2.1 Creación de la capa de Repository, con operaciones custom no provistas por la interfaz de Spring Data (2h) | |
2.4. Funcionalidad envío de mail en la inserción: usando el Flow Engine (15m) | 2.2.2. Creación del controlador REST y servicio subyacente (1h) | 2.2.2. Creación del controlador REST y servicio subyacente (1h) | |
2.3. Documentación Swagger con Swagger Springfox (30m) | 2.3. Documentación Swagger con Swagger Springfox (30m) | ||
2.4. Envío de mail en la inserción con Spring Boot Mail Services | 2.4. Envío de mail en la inserción con Spring Boot Mail Services | ||
2.4.1. Clase de configuración de Mail + propiedades (15m) | 2.4.1. Clase de configuración de Mail + propiedades (15m) | ||
2.4.2. Servicio Java + adaptaciones código existente (30m) | 2.4.2. Servicio Java + adaptaciones código existente (30m) | ||
TIEMPO TAREA 2 Expertise | ~30m Developer Junior | ~4h 30 m Developer Java Advanced | ~4h 30 min Developer Java Advanced |
3. Securización de la API | La Plataforma ya integra la seguridad con OAuth2 y token de API, simple configuración (0min) | 3.1. Utilización de librería de seguridad Onesait Platform para aplicaciones Spring Boot | 3.1. Integrar seguridad del API con Spring Boot |
3.1.1. Clases de configuración + configuración del acceso a la API (30min) | 3.1.1. Configurar repositorio de seguridad (BD, LDAP, ficheros,...) (1h) | ||
3.1.2. Añadir servicio de login a la API (30min) | 3.1.2. Clases de configuración + configuración del acceso a la API (30m) | ||
3.1.3. Añadir servicio de login a la API (30min) | |||
TIEMPO TAREA 3 Expertise | 0m Developer Junior | ~1h Developer Junior Java | ~2h Developer Java Advanced |
4. Completando funcionalidad: envío de SMS | 4.1. Publicar la API REST del proveedor de servicio SMS en el API Manager, encapsulada en un descriptor Swagger2/OpenAPI3 (30m) | 4.1. Utilizar el JDK del proveedor de servicios | 4.1. Utilizar el JDK del proveedor de servicios |
4.2. Modificar el flujo del Flow Engine para invocar a esta API (15m) | 4.1.1. Configuración del servicio SMS (15m) | 4.1.1. Configuración del servicio SMS (15m) | |
4.1.2. Servicio Java de envío SMS + modificación de funcionalidad existente (45m) | 4.1.2. Servicio Java de envío SMS + modificación de funcionalidad existente (45m) | ||
TIEMPO TAREA 4 Expertise | ~45m Developer Junior | ~1h Developer Junior Java | ~1h Developer Junior Java |
5. Tests de integración básicos | 5.1. Herramienta de testing REST básica tipo Postman: probar todas las operaciones de la API (1h) | 5.1. Spring Boot Test + JUnit: probar todas las operaciones con diferentes casos de entrada (1h) | 5.1. Spring Boot Test + JUnit: probar todas las operaciones con diferentes casos de entrada (1h) |
TIEMPO TAREA 5 Expertise | ~1h Developer Junior | ~1h Developer Junior Java | ~1h Developer Junior Java |
6. Despliegue de la API | Plataforma ya despliega la API y la disponibiliza en el API Manager | 6.1. Contenerización de la aplicación vía Soporte Microservicios: Dockerfile (0m) | 6.1. Contenerización de la aplicación: Dockerfile (15m) |
6.2. Subir código a Repositorio Git (0m) | 6.2. Generación Imagen: Repositorio Git, Jenkins, Docker Registry (1h) | ||
6.3. Desplegar la aplicación como un microservicio en plataforma: configurando Gitlab +jenkins +CaaS (15m) | 6.3. Desplegar la aplicación en Kubernetes/CaaS (15m) | ||
6.4. Publicar la interfaz Swagger de nuestro microservicio desplegado en el API Manager como API externa (15m) | |||
TIEMPO TAREA 6 Expertise | 0m Developer Junior | ~30min Developer Junior Java | ~1h 30min Developer Java Advanced |
TIEMPO TOTAL DESARROLLO | ~3h 15m | ~9h 30m | 12h 30m |
EXPERTISE | Developer Junior | Developer Java | Developer Java Advanced |