Este post es la documentación de una de las charlas brindadas en el LAOUC Tour 2023, acá les explico de la forma más sencilla, cómo crear un API Rest con Spring Boot y añadirle un pequeño método de seguridad para la autenticación del API, además de probar su consumo usando Postman.

Antes de crear un API con Spring boot, primero debemos entender qué es Spring boot?

Spring Boot es una plataforma de desarrollo de código abierto basada en Java, diseñada específicamente para facilitar la creación de microservicios. Fue creado por el equipo de Pivotal y tiene como objetivo la construcción de aplicaciones Spring autónomas y altamente funcionales.

Algunas de las ventajas de utilizar Spring boot son las siguientes:

1.Esta diseñado para el desarrollo de microservicios

2.Facilita el despliegue de la aplicación por su servidor tomcat embebido

3.Reduce los tiempos de desarrollo

4.Evita una configuración XML compleja en Spring

5.Reduce el tiempo de desarrollo y ejecuta la aplicación de forma independiente

6.Ofrece una aplicación basada en anotaciones

7.No requiere configuraciones manuales ya que el uso de Spring boot configura el proyecto de manera automática

Creación de proyecto con Spring Initializr

Spring Initializr es una herramienta que nos ayuda a crear un proyecto con todas las dependencias y configuraciones de Spring boot, previamente configuradas, esto nos facilita el desarrollo ya que solamente deberemos importar el proyecto y enfocarnos en la lógica de negocio, así nos ahorramos una gran parte de configuración de Spring.

Ingresaremos al siguiente URL: https://start.spring.io/

Y elegiremos los siguiente :

  • Project: Maven
  • Language: Java
  • Spring boot: 3.1.2 (Siempre es recomendable usar la versión estable, no una snapshot o M1)
  • Project Metadata: Llenamos los campos de Group, Artifact, Name, Description y Package name
  • Package name: War
  • Java: 20
  • Dependencies: Añadir Spring Web

Presionamos el botón GENERATE y descargamos el zip con la aplicación.

Descomprimimos el proyecto e iniciaremos Eclipse.

Dentro de Eclipse vamos a abrir nuestra carpeta donde descomprimimos nuestro proyecto:

Al presionar finish vamos a ver que se nos importa el proyecto con al siguiente estructura, aveces dura unos segundos en generarse:

Ahora bien, esta aplicación por sí sola ya trae previamente configurada con las dependencias de Spring boot, en este caso la versión 3.1.5, esto lo podemos ver en nuestro archivo pom.xml:

Creación de controlador:

Para hacer funcionar nuestro API, primero debemos crear un controlador, este será la capa donde se exponen las rutas de acceso a nuestra API, para ello, crearemos una clase llamada Controlador en nuestra carpeta test:

Con la clase creada, crearemos lo siguiente:

package com.example.test;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController //Indicamos el controlador Rest
@RequestMapping("/api") //Mapeamos la ruta /api como ruta de acceso a la clase
public class Controller {
	
	@PostMapping("/consulta") //Mapeamos el método /consulta usando el método Post
	public String consulta(@RequestBody String requestNombre) {	
        	String nombre = requestNombre;
	        String mensaje = "¡Hola, " + (nombre != null ? nombre : "anónimo") + "!";
	        return mensaje;
	}
}

Compilamos el proyecto Maven build: clean install

Después de haberlo compilado y tener el SUCCESS vamos a ejecutar la aplicación.

Para ello lo podemos hacer de 2 maneras, si tenemos un servidor de aplicaciones instalado, lo podemos ejecutar ahí o bien Spring boot trae embebido un servidor tomcat así que si lo ejecutamos como una aplicación java, iniciará automáticamente:

Seleccionamos la clase a ejecutar:

Y veremos como la aplicación inicia:

Prueba con Postman

Abriremos postman y colocaremos lo siguiente:

Cómo aún no colocamos ningún tipo de seguridad ni creamos alguna respuesta más compleja, siempre nos devolverá el nombre que coloquemos en el parámetro requestNombre.

Configuración con clases y seguridad

Ahora que vimos como compilar e iniciar nuestra API, vamos a hacerlo más complejo.

Crearemos un objeto request y response para responder el API por medio de clases, para ello crearemos un paquete nuevo y dentro 2 clases llamadas PersonaRequest y PersonaResponse:

Así quedará la clase PersonaRequest:

package com.example.dto;

public class PersonaRequest {
	private String nombre;

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
}

Así quedará la clase PersonaResponse:

package com.example.dto;

public class PersonaResponse {
	private String mensaje;

    public PersonaResponse(String mensaje) {
        this.mensaje = mensaje;
    }

    public String getMensaje() {
        return mensaje;
    }

    public void setMensaje(String mensaje) {
        this.mensaje = mensaje;
    }
}

De esta manera, una clase se encargará de recibir los parámetros y otra de devolver la respuesta al API.

Ahora modificaremos nuestro método consulta en la clase Controller:

@PostMapping("/consulta")
	public PersonaResponse consulta(@RequestBody PersonaRequest request) {		
        	String nombre = request.getNombre();
	        String mensaje = "¡Hola, " + (nombre != null ? nombre : "anónimo") + "!";
	        return new PersonaResponse(mensaje);
	}

Compilamos, ejecutamos la aplicación y probamos nuevamente con postman:

Bien, ahora ya tenemos una respuesta json con el parámetro nombre, el cual recibe nuestro método consulta.

Seguridad en el API

Vamos a añadir un API Key a nuestra aplicación, este se enviará por medio del header y cuando se procese, el API responderá, sino debe dar un error.

Hay muchas formas de asegurar un API, se puede utilizar Json Web Tokens (JWT), API Keys, Oauth 2, entre otros, hasta se puede añadir una capa de autenticación usando una aplicación externa o bien un ORDS, donde podamos tener client secrets, client ids, roles, entre otros, pero eso quedará para otra publicación del blog.

Para este ejemplo, solamente modificaremos la clase controlador, crearemos una variable que almacene una clave y luego validare

@RestController
@RequestMapping("/api")
public class Controller {

	private String API_KEY = "miApi2023";
	
	@PostMapping("/consulta")
	public PersonaResponse consulta(@RequestBody PersonaRequest request,@RequestHeader("Authorization") String apiKey ) {		
		PersonaResponse respuesta = new PersonaResponse("");
		if (apiKey != null && apiKey.equals(API_KEY)) {
        	String nombre = request.getNombre();
        	respuesta = new PersonaResponse("¡Hola, " + (nombre != null ? nombre : "anónimo") + "!");
        } else {
        	respuesta = new PersonaResponse("Acceso no autorizado");
        }
		return respuesta;
	}
	
}

Compilamos y probamos la aplicación en postman, con la diferencia que debemos enviar el api key por medio del header:

Si la colocamos mal, nos dirá lo siguiente:

De esta manera hemos creado un API sencilla, utilizando Spring boot, Java y Eclipse con un toque de seguridad.

Una respuesta a «Creando un API Rest con Spring Boot, Java y Eclipse»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *