Qué es una API REST y cómo crear la tuya con Java y Spring Boot

Hoy en día, la mayoría de las aplicaciones modernas —desde redes sociales hasta tiendas online— funcionan gracias a las APIs REST. Si estás aprendiendo desarrollo en Java, dominar este concepto es clave para trabajar en proyectos reales y entrar en el mundo profesional.

En este artículo veremos qué es una API REST, por qué es tan importante y cómo empezar a crear una con Spring Boot.


¿Qué es una API REST?

Una API REST (Representational State Transfer) es un conjunto de reglas que permite que distintas aplicaciones se comuniquen entre sí a través de internet usando el protocolo HTTP.

En pocas palabras, una API REST define cómo los clientes (por ejemplo, un frontend en Angular o una app móvil) pueden consultar, crear, actualizar o eliminar datos en el servidor..

Ejemplo de acciones típicas en una API REST:

  • GET → Obtener información (ej: listar productos).
  • POST → Crear un nuevo recurso (ej: registrar un usuario).
  • PUT → Actualizar un recurso existente (ej: modificar un pedido).
  • DELETE → Eliminar un recurso (ej: borrar un comentario).

¿Por qué aprender API REST?

  • Es el estándar actual en el desarrollo backend.
  • Se utiliza en aplicaciones web, móviles y microservicios.
  • Abre puertas a frameworks modernos como Spring Boot en Java.
  • Mejora tu perfil profesional y tus oportunidades laborales.

Cómo crear una API REST en Java con Spring Boot (Vista Rápida)

  1. Configura tu proyecto con Spring Initializr.
    • Dependencias: Spring Web, Spring Data JPA, MySQL Driver.
  2. Crea tu entidad (modelo de datos): El modelo o entidad mediante anotaciones JPA permite mapear dicha entidad con una tabla en BDD.
  3. Crea tu repositorio: Un repositorio es patrón de diseño que permite o actúa como intermediario entre la capa de servicios de una aplicación y la base de datos.
  4. Crea tu servicio y controlador REST: Un servicio define la lógica de la aplicación y un controlador expone uno o varios endpoints al exterior.

Con esta estructura ya tienes una API REST básica que expone productos a través de HTTP.

1. Configura tu proyecto con Spring Initializr.

Para crear una API REST con Spring Boot podemos crear el proyecto desde el IDE que puede ser: Spring Tool Suite STS o Intellij IDEA (Versión Premiun) o también desde la web Spring Initializr, esta web es la página oficial para crear un arquetipo de proyecto con Spring Boot: https://start.spring.io/

Ya una vez en la web vamos a definir las propiedades del proyecto como se muestra en la imagen a continuación:

Como primer paso definimos el tipo de proyecto (Maven) y el lenguaje (Java), posteriormente seleccionamos la versión de Spring Boot, seguido indicamos el Project Metadata y finalmente las dependencias, en este caso las necesarias son Spring Web para exponer los endpoints, Spring Data JPA para poder persistir o guardar información en una BDD en este caso MySQL y MySQL Driver para conectarnos a MySQL Server.


Finalmente vamos a descargar el arquetipo de proyecto dando click en el botón GENERATE CTRL.

Vamos a descomprimir el archivo generado y copiarlo en un lugar donde tengas permisos de lectura y escritura, posteriormente importamos el proyecto en un IDE de preferencia, personalmente uso la versión free de Intellij IDEA, la estructura inicial es como se muestra a continuación.

2. Crea tu entidad (modelo de datos) y conexión a BDD:

Creamos una clase Java, esta clase es nuestro modelo que se va mapear con una tabla en BDD, para poder hacer este mapeo utilizamos anotaciones JPA.

@Entity
@Table(name = "products")
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Double price;

    //Getters y setters
    public Long getId() { return id;    }
    public void setId(Long id) { this.id = id;  }
    public String getName() { return name;  }
    public void setName(String name) {  this.name = name;  }
    public Double getPrice() {    return price;    }
    public void setPrice(Double price) {   this.price = price;   }
}

🚀 Resumen

  • @Entity: indica que la clase es una entidad JPA, es decir, se va a mapear a una tabla de la base de datos.
  • @Table(name = "products"): especifica que la tabla asociada se llama products.
  • @Id: clave primaria de la tabla.
  • @GeneratedValue(strategy = GenerationType.IDENTITY): el valor se genera automáticamente en la base de datos, normalmente con autoincremento (MySQL, PostgreSQL, etc.).

Conexión a BDD

En el archivo application.properties vamos a configurar la conexión a base de datos, en la línea 2 lo que hacemos es definir la url de conexión en este caso la base de datos se llama productdb, en la línea 3 y 4 definimos el usuario y la clave del motor de base de datos, en la línea 5 definimos el driver de conexión, en la línea 6 indicamos como se va realizar la inicialización de las tablas y finalmente en la línea 7 indicamos que muestre las sentencias SQL que se ejecutan en consola cuando por ejemplo obtenemos un registro.

spring.datasource.url=jdbc:mysql://localhost:3306/produtdb
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

3. Crea tu repositorio

Un repositorio realiza el acceso a la base de datos para las operaciones CRUD (create, read, update, delete), para esto creamos una interfaz que extiende de JpaRepository que a su vez es parte de Spring Data JPA (el módulo de persistencia de Spring), esta interface ya tiene los métodos CRUD por lo que al extender no tenemos que programar esos métodos sino sólo usarlos como ya veremos más adelante.

public interface ProductRepository extends JpaRepository<Product, Long> {
}

4. Crea tu servicio y controlador REST

En este punto tenemos la opción de crear una clase que implemente las funcionalidades de la capa de servicio, sin embargo la idea es crear rápidamente nuestra API REST, es por eso que vamos usar directamente el repositorio en el controlador, ahora te preguntarás que es un controlador en Spring? Bueno un controlador no es más que una clase Java con anotaciones especiales que hacen que esta clase permita exponer endpoints o servicios de tipo resful al exterior y que pueda ser consumidos por un cliente por ejemplo Postman, Angular, React etc.

@RestController
@RequestMapping("/api/products")
public class ProductController {
    private ProductRepository repository;

    public ProductController(ProductRepository repository) {
        this.repository = repository;
    }

    //GET
    //http://localhost:8080/api/products
    @GetMapping
    public List<Product> findAll() {
        return repository.findAll();
    }

    //POST
    //http://localhost:8080/api/products
    @PostMapping
    public Product save(@RequestBody Product product) {
        return repository.save(product);
    }
    
    //GET por ID
    //http://localhost:8080/api/products/{id}
    @GetMapping("/{id}")
    public Product findById(@PathVariable Long id) {
        return repository.findById(id)
                .orElseThrow(() -> new RuntimeException("Producto no encontrado"));
    }  
    
    //PUT   
    //http://localhost:8080/api/products/{id}
    @PutMapping("/{id}")
    public Product update(@PathVariable Long id, @RequestBody Product product) {
        Product existingProduct = repository.findById(id).orElseThrow(() -> new RuntimeException("Product not found"));
        existingProduct.setName(product.getName());
        existingProduct.setPrice(product.getPrice());
        return repository.save(existingProduct);
    }
    
    //DELETE
    //http://localhost:8080/api/products/{id}
    @DeleteMapping("/{id}")
    public void delete(@PathVariable Long id) {
        repository.deleteById(id);
    }
}

Explicando un controlador REST en Spring Boot: Ejemplo API REST Productos

Uno de los pilares del desarrollo backend moderno es la creación de APIs RESTful. En Java con Spring Boot, esto se logra fácilmente con la anotación @RestController, que convierte una clase en un punto de entrada de la API.

¿Qué hace el controlador ProductController?

Este controlador expone los endpoints principales de una API REST que trabaja con productos. Cada endpoint está asociado a un verbo HTTP:

  • GET → Consultar datos.
  • POST → Crear nuevos registros.
  • PUT → Actualizar registros existentes.
  • DELETE → Eliminar registros.

Explicación paso a paso

1. Anotaciones principales

  • @RestController: convierte la clase en un controlador REST que responde con JSON.
  • @RequestMapping("/api/products"): define la ruta base de la API, en este caso /api/products.

2. Inyección de dependencias

El repositorio ProductRepository se recibe en el constructor. Esto permite acceder a la base de datos mediante Spring Data JPA.

3. Endpoints implementados

  • GET /api/products → devuelve una lista con todos los productos.
  • POST /api/products → recibe un JSON y guarda un nuevo producto.
  • GET /api/products/{id} → busca un producto por ID y devuelve error si no existe.
  • PUT /api/products/{id} → actualiza los datos de un producto ya registrado.
  • DELETE /api/products/{id} → elimina un producto existente por ID.

4. Manejo de errores

Si un producto no existe, se lanza una excepción RuntimeException. En un proyecto real, se recomienda usar un manejador global de excepciones con @RestControllerAdvice.

Finalmente esta es la estructura del proyecto:

Para ejecutar el proyecto abrimos la clase ProductApplication y realizamos los pasos que se visualizan en la imagen a continuación:

Y obtendremos una salida por consola indicándonos que la aplicación se levanto correctamente:

Ejemplo para probar con Postman

  • GEThttp://localhost:8080/api/products
  • POSThttp://localhost:8080/api/products con un JSON como: { "name": "Laptop", "price": 1200.00 }

Puedes acceder al repositorio desde este enlace: https://github.com/elivarl/apirest-blog-product

Conclusión

Este ejemplo te muestro cómo se implementa el ciclo CRUD completo en una API REST usando Spring Boot. Con sólo unas pocas líneas de código, se obtiene una API lista para ser consumida desde aplicaciones frontend o móviles.

Este proyecto es un ejemplo perfecto para entender cómo crear una API REST en Spring Boot. Si estás empezando con APIs REST en Java, este es el punto de partida ideal para practicar y llevar tus proyectos al siguiente nivel.

👉 En mi curso “Aprende a crear una API RESTful con Java y Spring Boot” te enseño paso a paso cómo construir APIs profesionales, incluyendo validaciones, manejo de errores, capas de servicio y conexión con bases de datos.

Accede al curso gratuito aquí

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top