Spring Boot Rest 5/10 – Exponiendo endpoints mediante Controladores Rest

70

En el anterior artículo de esta serie demostramos cómo insertar información a Mongo DB al arranque de una aplicación Spring Boot. En este artículo, revisaremos cómo exponer nuestros endpoints desde Controladores Rest. ?

Dependencias

Como se especificó en el primer artículo de esta serie, para que las clases a explicar a continuación funcionen en tu proyecto requieres contar con las dependencias adecuadas para ello, en este caso:

implementation 'org.springframework.boot:spring-boot-starter-web'

RestController

Para exponer endpoints Rest mediante Spring Boot, basta con anotar una clase con @RestController y @RequestMapping (con la URI a la que responderá). A partir de ello, anotaremos cada uno de los métodos que requiramos siguiendo los verbos HTTP correctamente, como se muestra a continuación.

@RestController
@RequestMapping("/api/coffee-service")
@Log
public class CoffeeController {

    @Autowired
    private CoffeeService coffeeService;

    @GetMapping("/coffee")
    public List<Coffee> getMenu() {
        log.info("GET CoffeeController getMenu");
        return coffeeService.getMenu();
    }

Como podrás observar, no estamos especificando el status que se responderá, debido a que Spring lo asignará automáticamente de acuerdo al resultado de la operación. Sin embargo, es posible especificarlo programáticamente y dicho tema se aborda en el bonus de este tutorial. Nota que estamos inyectando a las clase el Servicio CoffeeService, el cual se aborda en el siguiente punto.

Servicio

En orden de mantener nuestras clases anotadas con @RestController con únicamente lo correspondiente a recibir y responder requests, podemos separar la lógica y procesamiento en otra clase. En este caso, se definió una clase anotada con @Service para realizar dichas operaciones.

@Service
@Log
public class CoffeeService {

    @Autowired
    private CoffeeRepository coffeeRepository;

    public List<Coffee> getMenu() {
        return coffeeRepository.findAll();
    }

Nota cómo se inyecta el repositorio de Mongo a esta clase y no directamente al controlador. Además, de ser necesarias operaciones más complejas como para un Update o Delete (ejemplos de esto en el repositorio de Github), pueden realizarse en esta clase, dejando al Controlador con una sola responsabilidad y además, mucho más legible.

En el próximo artículo, revisaremos cómo agregar autenticación básica a nuestro servicio. ?

Repositorio de Github

Puedes encontrar el código del proyecto en el siguiente repositorio de Github:

https://github.com/chuucks/coffee-service


La configuración del proyecto de Spring Boot con Gradle, conexión a Mongo DB y autenticación básica de HTTP, en esta plataforma tiene únicamente fines educativos e ilustrativos. Para usar en producción requiere de mayores consideraciones, configuraciones y especificaciones. No dudes en contactarnos para cualquier duda o comentario o incluso abrir un Issue de Github en el repositorio del proyecto. ??

Comments

comments