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:

  1. Preparar del Entorno para el Desarrollo.

  2. Desarrollar un API con Onesait Platform y con Spring Boot para el envío de mensajes:

    1. Funcionalidad del API.

    2. Definir Recurso Message y creación del interfaz del API.

    3. Probar el API con Swagger.

    4. Ampliar la funcionalidad del API para que envíe un mail.

  3. Integrar seguridad a tu API: autenticación.

  4. Completar funcionalidad del API.

  5. Desplegar tu API.

  6. 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



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