Crear API bajo la arquitectura REST con Spring Data JPA,MySQL y Postman

En este ejemplo vamos a ver Spring Data JPA, una herramienta altamente productiva para múltiples opciones, como en nuestro, una API REST.

Crear API  bajo la arquitectura REST con Spring Data JPA,MySQL y Postman

Componentes usados

  • IDE Spring Boot con Eclipse STS

  • MySQL

  • Spring Data JPA con hibernate

  • Postman con Json

1-Creación de un Proyecto de tipo Maven

Creamos la estructura de paquetes usando un patrón de diseño tipo DAO

Agregamos las dependencias

Configuramos el archivo de propiedades

Como estamos trabajando con JPA una de las características de esta herramienta es que es independiente de la Base de Datos que se utilice. El código que hagamos en Java va a funcionar en cualquier motor de Base de Datos SQL

2-Creamos la BD sin tablas

Ahora al momento de correr la aplicación debemos asegurarnos de que este creada la base de datos, aunque no tenga tablas.Creamos el modelo de Dominio, creamos una entidad llamada Usuario.

Corremos la aplicación y vemos que se crea la tabla usuario con todos sus campos, gracias a hibernate


SEGUNDA PARTE: CONSTRUIMOS NUESTRO SERVICIO REST

3- Empezamos a desarrollar la lógica con Java para poder crear nuestro servicio REST

Creamos la estructura DAO para la entidad Usuario, Creamos la interface UsuarioDao

Utilizo JpaRepository para poder obtener todas las operaciones que tienen que ver con la base de datos, y poder inyectarla desde otras capas y poder trabajar en ellas

Creamos el controlador

Corremos el proyecto

Vemos que la respuesta es un JSON

El servicio esta funcionando, esta devolviendo una data en una anotación JSON

/

@RestController
@RequestMapping("/usuarios")
public class UsuarioController {

    @Autowired
    private UsuarioDao usuarioDao;

    @GetMapping
    public List<Usuario> listar(){
        return usuarioDao.findAll();    
    }
    @PostMapping
    public void insertar(@RequestBody Usuario usuario) {
       usuarioDao.save(usuario);
    }
    @PutMapping
    public void modificar(@RequestBody Usuario usuario) {
       usuarioDao.save(usuario);
    }
    @DeleteMapping(value="/{id}")
    public void eliminar(@PathVariable("id") Long id) {
       usuarioDao.deleteById(id);
    }

   }

Completamos las demas operaciones del Controller

Podemos definir otras operaciones, como por ejemplo hacer un POST para insertar un elemento. La teoría de los servicios REST dice que el GET debe ser para obtención de datos, el POST para una inserción de datos, el PUT para una actualización total de datos, y el DELETE para una eliminación de datos

Ahora una operación POST no se puede probar directamente en el browser, para eso necesitamos una herramienta conocida como POSTMAN

4- Creamos un método para insertar un elemento con POSTMAN

¿Como hace java para recibir un Json y convertirlo en objeto ? con la anotación @RequestBody

Abro el POSTMAN

Si es la primera vez que lo usan crean un Workspace

OK EMPEZEMOS

Operacion tipo POST

Insertamos nuestro primer objeto Usuario con POSTMAN

Vemos que la consulta da Status 200 OK

Revisamos la base de datos para ver si se inserto el objeto

Hacemos un GET ahora, después de insertar un objeto

Hacemos un PUT, para actualizar o modificar un elemento de la B.D,Creamos el método modificar en el controlador

Hacemos un GET y vemos que el campo se actualizo correctamente

Hacemos un DELETE, para eliminar un elemento de la B.D,Creamos el método eliminar en el controlador

Vamos a eliminar el elemento con id=60

CONCLUSIONES

Tomando de ejemplo el metodo Listar que devuelve una List ¿Porque no usar un ResponseEntity List<Usuario> y devolver el Status y el body? ¿O en que caso usar uno y en que caso usar el otro?

Ya hemos probado los 4 métodos, y bueno ¿Qué ventaja tengo haciendo esto? Las aplicaciones modernas tienen una tendencia a crear un Back-End netamente de servicios REST , donde expongamos toda la data en formato JSON y otro formato que sea adecuado para el proyecto. En la cual mediante alguna aplicación Front-End de alguna librería o Framework moderno básicamente en JS que es lo más usual como Angular React o Next JS, se puedan consumir estas rutas y recibir las respuestas con el objetivo de crear alguna interfaz de usuario Entonces, lo primero que uno debe aprender es a construir un buen Back-End. Este proyecto que hemos hecho es una introducción, abarcando los conceptos principales, de cómo construir un Back-End robusto, permitir como funciona un servicio REST.

También sobre esto hay más buenas practicas:

  • Como manipular y entender el Status Code

  • Como devolver un código de respuesta idóneo según el caso

  • Como controlar las excepciones y errores de manera global

  • Como aplicar el modelo de madurez de Richardson, específicamente en la HYPERMEDIA con Spring HATEOAS(este es un tema más avanzado)

Como conclusión de lo que hemos hecho, hemos desarrollado y entendido una demostración simple de Spring MVC, con Spring Data JPA. A parte hemos hecho Spring REST para poder crear estos servicios de forma tan rápida y productiva. También le hemos agregado Spring JPA dentro de los servicios con el objetivo de que puedas visualizar que es muy fácil integrar las diferentes opciones que Spring te puede ofrecer