Herramientas de usuario

Herramientas del sitio


simo:documentos:tecnicos:controlador

Capa de controladores

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

simo/documentos/tecnicos/controlador.txt · Última modificación: 2017/11/12 17:11 por lgomez