El sistema SIMO implementa Controladores de tipo REST, su función es proporcionar la interfaz entre el cliente, implementado con HTML y Javascript y el servidor,
Naturalmente, la comunicación entre los dos se realiza mediante el protocolo HTTP, y en particular se implementa utilizando el estilo REST, especificamente este estilo se implementa en el SIMO de la siguiente manera:
Cada recurso (Entidad JPA) está asociado a una
URL base: Ej /convocatorias
Los datos se codifican y transmite usando JSON, las peticiones se realizan en el navegador utilzando Ajax.
Las entidades que dependen o tienen relaciones de composicion con otras entidades (por ejemplo etapa y convocatoria), obtienen su
URL a partir de la
URL de la entidad que las contiene. Ej. /convocatorias/{<id_convocatoria>}/etapas
Se utilizan los verbos HTTP para implementar las operaciones CRUD
El verbo POST se utiliza para creación (Create)
El verbo GET se utiliza para lectura (Read)
El verbo PUT se utiliza para actualizacion (Update)
El verbo DELETE se utiliza para eliminación (Delete)
Otras operaciones aparte de las CRUD básicas se implementan con el verbo PUT y un parámetro de ruta (una porción de la ruta
URL asociada a la operación) que le indica al servidor que operación se necesita invocar. Ej /convocatorias/<Operacion no CRUD>
Las operaciones GET que retornan listas de entidades se presentan en dos versiones, con paginación y sin paginación.
Existen operaciones GET específicas para ser utilizadas en controles de tipo
ComboBox o Select, estas operaciones incluyen en su
URL la palabra list. Ej /convocatorias/list
Spring Boot da soporte natural a controladores de tipo REST, y SIMO naturalmente utiliza estas características utilizando las siguientes anotaciones.
@
RestController: Indica a Spring Boot que el Bean anotado es un controlador REST y confiere automáticamente las siguientes prestaciones:
Proporciona automáticamente serialización de objetos JAVA a JSON y deserialización de objetos JSON a JAVA a través de las librerías Jackson
Maneja automáticamente los parámetros de paginación y ordenamiento
@
RequestMapping: Si se coloca a nivel de clase configura la
URL del recurso REST, si se coloca a nivel de método, la
URL se suma a la
URL base y configura el verbo HTTP asociado al método
@
PathVariable: Indica a Spring Boot que un parámetro de un método está mapeado a una porción de la ruta
URL
@
RequestBody: Deserializa el cuerpo de la petición HTTP (POST o PUT) en un objeto JAVA (normalmente en una entidad JPA)
@
RequestParam: Indica a Spring Boot que un parámetro de un método está mapeado a un parámetro HTTP
@
JsonView: Indica a Spring Boot que
JsonView utilizar para serializar datos, las
JsonViews optimizan la serialización de datos para que solo se serializen los datos que se necesitan en el cliente, de igual forma al deserializar filtran los datos que se deserializan, esta optimización no solo reduce el uso de ancho de banda sino que también ayuda a disminuir las consultas a base de datos cuando se utiliza mapeo tipo LAZY
@
PreAutorize: Implementa control de acceso a nivel de método de controlador
En resumen, un controlador SIMO se implementa escribiendo métodos para las operaciones CRUD y no CRUD que se quieran exponer al cliente, estos métodos se implementan utilizando el modelo de dominio de SIMO (entidades JPA o DTO), sin invocar directamente ningún API relacionado con HTTP o REST.
Estos métodos y el mismo controlador se complementan con las anotaciones listadas las cuales les proporcionan toda la funcionalidad necesaria para que los métodos puedan ser invocados desde el cliente mediante HTTP, JSON y Ajax