Introducción

Hypermedia es la interrelación entre recursos mediante enlaces. La idea es sólo conocer un recurso principal y de ahí descubrir como acceder al resto de los recursos. Esto permite aumentar la interoperabilidad entre recursos con mucha menos información.

Por ejemplo:

Tenemos la tabla persona donde podemos consultar edad, nombre y sexo. En otra tabla  grupo se almacena el grupo al que pertenece la persona. En otra tabla país se almacena el país al que pertenece la persona.  Si necesitamos consultar los datos, grupo y país de una persona tendríamos que consumir los recursos,

http://localhost:8080/personah/3

De los resultados obtenemos el id del grupo. Para conocer el nombre del grupo,

http://localhost:8080/grupoh/2

De los resultados obtenemos el id del país. Para conocer el nombre del país,

http://localhost:8080/paish/2

Usando hypermedia podríamos presentar:

Y navegaríamos por los link para obtener toda la información requerida sin necesidad de conocer cada uno de los recursos.

Programar hypermedia

Crear Entity

Creamos los entity PersonaHateoas, GrupoHateoas y PaisHateoas.

PersonaHateoas

GrupoHateoas

PaisHateoas

Crear Repository

Creamos los repository PersonaHateoasRepository, GrupoHateoasRepository y PaisHateoasRepository.

PersonaHateoasRepository

GrupoHateoasRepository

PaisHateoasRepository

Crear Controller

Creamos los repository PersonaHateoasController, GrupoHateoasController y PaisHateoasController.

PersonaHateoasController

GrupoHateoasController

PaisHateoasController

Explicación de PersonaHateoasController

Todas las demás clases ya las conocemos, solo vamos a explicar algunos detalles de la clase PersonaHateoasController.

  1. Hateoas (Hypermedia As The Engine Of Application State). Aunque en nuestros ejemplos estamos modelando tablas de una Base de Datos, normalmente conocido como CRUD (Create Read Update and Delete),  lo que estamos haciendo es exponer  la capa de datos y dejando que el consumidor interprete e implemente la lógica del negocio. Siguiendo la filosofía de REST deberíamos de exponer los distintos casos de uso del sistema y no solo una simple interfaz. La intención de Hateoas es alejarse de CRUD y basarse en un enfoque hypermedia.
  2. application/hal+json. Existen diferentes formas de exponer los recursos en hypermedia, uno de los más extendidos es HAL (Hypertext Application Language). Es una extensión de json con la capacidad de definir enlaces y controles. application/hal+json es el tipo mime para HAL.
  3. Método personaToResource con parámetro PersonaHateoas. Crea los link y los retorna como un Resource (Recurso).
  4. Método personaToResource con parámetro List<PersonaHateoas>.  Recorre la lista de PersonaHateoas para cargar los Recursos.

Resultado

Al ejecutar

http://localhost:8080/personah

El resultado es:

Otros

Descargar proyecto

Se puede descargar el proyecto completo de https://github.com/arielolivagh/administrarPersona/releases/tag/v2.0

Categories: API REST, Spring, SpringBoot

2 Responses so far.

  1. arieloliva dice:

    Mencionas enlaces y controles ¿Que son los controles?

Leave a Reply


Orígenes de Datos SQL Server en WebLogic

Contenido1 Orígenes de Datos1.1 Configurar Jtds1.2 Configurar Driver propio de […]

Instalar Weblogic 12

Contenido1 Descargar2 Instalar2.1 Instalar WebLogic2.2 Configurar dominio3 Validar instalación y […]

API REST 5. Hypermedia

Contenido1 Introducción2 Programar hypermedia2.1 Crear Entity2.1.1 PersonaHateoas2.1.2 GrupoHateoas2.1.3 PaisHateoas2.2 Crear […]

API REST 4. Calidad al implementar aplicacion Web

Contenido1 Introducción1.1 Nivel 1. Uso correcto de URIs1.2 Nivel 2. […]

API REST 3. Publicar y consumir

Contenido1 Descripción2 Publicar y Consumir2.1 Usando CRUD2.1.1 Crear Persona2.1.2 Consultar […]