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.
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