| Tabla de contenidos |
|---|
...
Creación del proyecto
| Videolink | ||||
|---|---|---|---|---|
|
...
Con esto tendremos el proyecto creado, con la clase NombreproyectoApplication.java (nombre de proyecto correspondiente), que será la que inicie la ejecución de la aplicación. Una vez tengamos el proyecto creado, podemos pasar a añadir la configuración necesaria.
Estructura de los proyectos Spring Boot
La estructuración de la capa backend será similar a la indicada para las aplicaciones Fundeweb basadas en JSF ya que la filosofía sobre cómo gestionar la lógica de negocio y obtención de datos es la misma. No obstante nuestros backends estarán basados en SpringBoot y no tendrán incorporada la capa Frontend por lo que hay que ajustar las peculiaridades del cambio de tecnología.
...
Basándonos en el esquema anterior nuestra aplicación debe constar de tres capas:
Controladores Rest
Será la clase o clases que expongan la API Rest por lo que establecerán el punto de interconexión entre backend y frontend. Está desacoplada del fontend por lo que las APIs expuestas podrán ser consultada desde cualquier aplicación o navegador lo que hace primordial asegurar la autenticación y autorización de los puntos de interacción de las partes privadas. También debe asegurar que la parte pública no permite acceder a información diferente de la propuesta o a partes privadas.
...
Una vez procesado los datos deberá devolver objetos de tipo DTO ya que no debemos exponer entidades completas, en caso de ser necesario realizará la transformación de entidades a DTO.
Las características generales son:
- Todas los controladores que expongan APIs rest deberán estar dentro del paquete de servicios rest (paquetes con sufijo rest): "es.um.atica.xxx.xxx.rest".
- Proveer los endpoints para que los diferentes servicios accedan a nuestro backend.
- Dividir los endpoints entre públicos y privados: Para ello los endpoints públicos deberán ir en el path ".../public/..." y los privados en ".../private/..."
- Controlar el acceso a los diferentes endpoints privados tanto a nivel de autenticación como de autorización.
- Estará anotada con @RestController
- Deberá indicar el path donde este controlador escucha: @RequestMapping(value = "/public/....")
- Varios manejadores podrán mapear la ruta raiz indicada en @RequestMapping, pero lo recomendable es que cada manejador gestione un contexto /public/alumnos, /public/pdi, etc.
- En las respuestas a las peticiones deberá usar los códigos HTTP para indicar el estado devolviendo 200 sólo si la respuesta es correcta, en caso de errores controlados se deberá hacer uso de los códigos 400
- Deberán tratar las excepciones producidas para dar una respuesta coherente a la parte cliente.
Servicios
Será la clase o clases que gestionan la lógica de negocio gestionarán la obtención de datos bien desde base de datos haciendo uso de los @Repository pertinentes o de clientes Rest / SOAP, coordinarán el flujo de ejecución del código y deberán controlar posibles problemas y situaciones inesperadas para dar una respuesta controlada al cliente que ha invocado a este servicio.
...
- Interfaz: MiInterfaz
- Implementación: MiInterfazImpl
Repository, PAO, Entity, DTO, MODEL
Esta capa será la encargada de dar acceso a los datos de la aplicación almacenados en base de datos o modelar los objetos del sistema que no tienen correspondencia directa con el modelo de base de datos.
El acceso a base de datos se llevará a cabo principalmente por las clases anotadas con @Repository que provee SpringBoot: @CrudRepository , @JpaRepository, @Repository, esto lo podemos consultar en 6. JPA: Acceso a base de datos
Dependiendo del tipo de objeto estará en un paquete diferente.
- Repository: Serán los repositorios que accederán a la base de datos se deberán alojar en "es.um.atica.xxx.xxx.repository"
- PAO/DAO: Serán los encargados de llamar a paquetes/prodecimientos de base de datos, deberán estar en "es.um.atica.xxx.xxx.pao/dao"
Entity: Clases Java que mapean en entidades "es.um.atica.xxx.xxx.entity"
DTO/MODEL: DTO Clases java que mapean entidades a tipos más simples de cara a devolver en los servicios REST "es.um.atica.xxx.xxx.dto". MODEL Clases Java que se usan en la aplicación como modelo de datos pero que no equivalen a entidades "es.um.atica.xxx.xxx.dto"
Excepciones
No debemos lanzar una excepción genérica en nuestro proyecto, debemos crearnos nuestras propias excepciones para tratar errores concretos de nuestra implementación. Actualmente se está trabajando en investigar con profundidad las posibilidades que provee SpringBoot para el manejo de errores, pero independientemente de esto el tratamiento de errores debe ser acorde al Manejo de errores en aplicaciones REST Fundeweb