Saltar a contenido

Semana 14 - Conceptos y términos técnicos

I. Arquitectura y Patrones de Diseño

Término Técnico Significado / Descripción Fuentes
API (Application Programming Interface) Un conjunto de reglas y especificaciones que permiten que dos piezas de software se comuniquen. Es el contrato que define qué puede pedir un cliente y qué responderá el servidor.
REST (Representational State Transfer) Un estilo arquitectónico que prescribe cómo debe diseñarse una API para que sea escalable, simple y uniforme. Produce un servicio web sin estado que expone recursos a través de URLs, utiliza métodos HTTP y devuelve datos normalmente en formato JSON.
Patrón de diseño Una solución reutilizable a un problema común en el diseño de software. Mejora la mantenibilidad, escalabilidad y claridad del sistema.
MVC (Modelo-Vista-Controlador) Patrón de diseño que separa responsabilidades en tres capas: Modelo (datos y lógica de negocio), Vista (representación al usuario, como JSON) y Controlador (orquesta peticiones y respuestas).
Modelo (Capa) La capa del patrón MVC que incluye las Entidades JPA, repositorios, servicios, reglas de negocio y validaciones de la aplicación.
Vista (Capa en API REST) La representación del recurso que se entrega, que en el contexto de una API REST es el JSON serializado (o DTOs).
Controlador (Capa) La capa que recibe peticiones HTTP, coordina la lógica de negocio llamando al servicio y devuelve la respuesta, implementado como @RestController en Spring Boot.
Sin estado (Stateless) Restricción REST que obliga a que cada petición contenga toda la información necesaria, beneficiando la escalabilidad horizontal.
Recurso (REST) Cualquier cosa que pueda ser nombrada (un usuario, un pedido) y que se identifica mediante una URI única.
Endpoint La combinación de un verbo HTTP y una ruta que apunta a un recurso o colección (ej. GET /usuarios/5).
Cliente REST Cualquier programa que consume la API siguiendo el contrato REST (ej. navegador, aplicación móvil, scripts CLI).
DTO (Data Transfer Object) Objeto de transferencia de datos. Son objetos que representan la Vista en una API REST y se usan para evitar exponer directamente las entidades JPA.
Servicio en la Nube Un entorno de ejecución remoto (IaaS, PaaS o SaaS) donde se despliega la API REST, ofreciendo escalabilidad automática, alta disponibilidad y balanceo de carga.
JSON (JavaScript Object Notation) Formato ligero, nativo en JavaScript, fácil de leer y escribir, y universalmente soportado, que se utiliza generalmente como formato de mensaje en APIs REST.

II. Componentes y Anotaciones de Spring Boot y REST

Término Técnico Significado / Descripción Fuentes
Spring Boot Un framework basado en Java que simplifica el desarrollo de aplicaciones empresariales, permitiendo crear proyectos standalone con mínima configuración.
Spring Initializr Herramienta web que se utiliza para generar y descargar un proyecto base de Spring Boot, seleccionando las dependencias (starters) necesarias.
Starters (Spring Boot) Plantillas preconfiguradas que Spring Boot proporciona para incluir dependencias comunes, autoconfiguración y un servidor embebido (ej. Spring Web, Spring Data JPA).
@RestController Anotación que combina @Controller y @ResponseBody, indicando que la clase maneja peticiones REST y retorna datos directamente (JSON).
@RequestMapping Anotación que define la ruta base para todos los endpoints del controlador o de una clase.
@GetMapping Anotación de método HTTP para operaciones de lectura (Read).
@PostMapping Anotación de método HTTP para crear recursos (Create).
@PutMapping Anotación de método HTTP para reemplazar completamente un recurso (Update/Replace). Es idempotente.
@PatchMapping Anotación de método HTTP para realizar actualizaciones parciales de un recurso (Update/Partial).
@DeleteMapping Anotación de método HTTP para eliminar un recurso (Delete).
ResponseEntity Clase utilizada para construir respuestas HTTP completas, permitiendo configurar el cuerpo y el código de estado (ej. 201 Created, 204 No Content).
@Service Anotación que marca una clase como un componente de servicio, donde reside la lógica de negocio. Es una especialización de @Component.
@Transactional Anotación que habilita el manejo automático de transacciones de base de datos, asegurando que las operaciones se realicen de forma atómica y que se haga rollback en caso de error. Se puede usar a nivel de clase o método.
@Autowired Anotación utilizada para la inyección de dependencias (ej. inyectar un Repositorio en un Servicio).
@PathVariable Anotación para extraer un valor de una variable de la ruta URI (ej. el ID en /productos/{id}).
@RequestParam Anotación para obtener parámetros de consulta de la URL (ej. /buscar?nombre=valor).
@RequestBody Anotación para mapear el cuerpo de la petición HTTP (normalmente JSON) a un objeto Java (DTO).
@Valid Anotación usada en parámetros de métodos de controlador para invocar la validación de un DTO (basada en anotaciones como @NotBlank, @Min).
@Validated Anotación utilizada para habilitar la validación de parámetros de método en la clase Controladora.
@CrossOrigin Anotación que gestiona las políticas de CORS (Cross-Origin Resource Sharing).
Composición de servicios Patrón donde un servicio orquesta operaciones utilizando múltiples otros servicios para completar una transacción compleja.
Cache simple (en memoria) Patrón avanzado de servicio que utiliza estructuras de datos como ConcurrentHashMap para almacenar resultados de consultas frecuentes y evitar llamadas repetidas a la base de datos.

III. JPA, Entidades y Bases de Datos

Término Técnico Significado / Descripción Fuentes
JPA (Java Persistence API) API de persistencia utilizada en Spring Data JPA para definir entidades y manejar el mapeo objeto-relacional (ORM).
ORM (Object-Relational Mapping) Mapeo de objetos Java (entidades) a registros de bases de datos relacionales.
Entidad (JPA) Una clase Java anotada con @Entity que representa una tabla en la base de datos relacional. Cada instancia es una fila.
@Entity Indica que la clase debe ser mapeada a una tabla en la base de datos.
@Table Especifica el nombre de la tabla en la base de datos a la que se mapea la entidad.
@Id Marca un campo como la clave primaria de la entidad.
@GeneratedValue Define la estrategia (ej. IDENTITY, SEQUENCE) para generar automáticamente los valores de la clave primaria.
@Column Especifica detalles sobre cómo un atributo se mapea a una columna (nombre, si es nullable, longitud, si es único).
@Transient Indica que un campo de la clase no debe ser persistido en la base de datos.
@Enumerated Mapea un campo de tipo enum a una columna en la base de datos, especificando si se almacena como STRING o ORDINAL.
@CreationTimestamp Anotación utilizada para establecer automáticamente la marca de tiempo cuando se crea la entidad.
Lombok Herramienta que reduce el código repetitivo al generar automáticamente getters, setters y constructores. @Data es una anotación de Lombok que combina varios métodos de generación de código.

IV. Repositorios y Acceso a Datos

Término Técnico Significado / Descripción Fuentes
Repositorio (Spring Data JPA) Una interfaz que actúa como una capa de abstracción entre la lógica de negocio y la base de datos, proporcionando métodos CRUD. Spring Data JPA genera su implementación automáticamente.
CRUD Acrónimo de las operaciones básicas: Create, Read, Update, Delete.
JpaRepository<T, ID> La interfaz de repositorio más completa en Spring Data JPA, que extiende PagingAndSortingRepository y ofrece funcionalidades completas de JPA.
CrudRepository<T, ID> Interfaz que proporciona las operaciones CRUD básicas (save, findById, findAll, deleteById).
PagingAndSortingRepository Interfaz que añade funcionalidad de paginación y ordenamiento a los repositorios.
Query Methods (Métodos derivados) Consultas generadas automáticamente por Spring Data JPA basándose en la convención de nombres del método de la interfaz (ej. findByNombreAndActivo).
@Query Anotación utilizada para escribir consultas personalizadas cuando los métodos derivados no son suficientes. Permite usar JPQL o SQL nativo.
JPQL (Java Persistence Query Language) Lenguaje de consulta orientado a entidades (objetos Java) que se usa con @Query.
SQL nativo Consultas escritas directamente en el lenguaje de la base de datos, que deben ser marcadas con nativeQuery = true dentro de @Query.
@Modifying Anotación requerida en métodos @Query que realizan operaciones de modificación de datos (UPDATE o DELETE).
Pageable Interfaz utilizada en los repositorios para manejar los parámetros de paginación (número de página, tamaño) y ordenamiento.
Sort Objeto utilizado para definir los criterios de ordenamiento en las consultas.

V. Relaciones y Serialización (JPA y Jackson)

Término Técnico Significado / Descripción Fuentes
Relaciones en JPA Mecanismo utilizado para modelar asociaciones entre entidades, correspondientes a las asociaciones entre tablas en bases de datos relacionales.
@OneToOne Define una relación uno a uno: una instancia de una entidad asociada a exactamente una instancia de otra.
@OneToMany Define una relación uno a muchos: una instancia de una entidad asociada a múltiples instancias de otra.
@ManyToOne Define una relación muchos a uno: múltiples instancias de una entidad asociadas a una sola instancia de otra.
@ManyToMany Define una relación muchos a muchos: requiere una tabla intermedia, ya que múltiples instancias de A se asocian a múltiples instancias de B.
@JoinColumn Anotación que especifica la columna de la clave foránea en la base de datos, usada típicamente en el lado propietario de la relación.
@JoinTable Anotación que define la tabla intermedia (o pivote) necesaria para las relaciones muchos a muchos.
mappedBy Se usa en el lado "inverso" o no propietario de una relación bidireccional para especificar el campo en la otra entidad que gestiona la clave foránea.
Serialización JSON El proceso de convertir objetos Java (entidades) a una cadena de texto en formato JSON para su transferencia.
Bucles infinitos (en JSON) Problema de serialización que ocurre cuando dos objetos se referencian mutuamente en una relación bidireccional, causando recursión infinita.
@JsonManagedReference Anotación de Jackson que se usa en el lado "padre" de una relación bidireccional, indicando que este campo debe incluirse en la serialización JSON.
@JsonBackReference Anotación de Jackson que se usa en el lado "hijo" de una relación bidireccional, indicando que este campo no debe incluirse en la serialización JSON para prevenir bucles infinitos.
CascadeType.ALL Propagación de operaciones (guardar, actualizar, eliminar) del padre a las entidades asociadas.
FetchType.LAZY Estrategia de carga de datos donde la colección o entidad asociada se carga de la base de datos solo cuando se accede a ella, lo cual es mejor para el rendimiento.
FetchType.EAGER Estrategia de carga de datos donde la colección o entidad asociada se carga inmediatamente al cargar la entidad principal.

VI. Documentación de API con OpenAPI

Término Técnico Significado / Descripción Fuentes
OpenAPI Estándar de especificación que permite estandarizar la descripción de una API REST.
springdoc-openapi Herramienta utilizada en Spring Boot para generar automáticamente la documentación OpenAPI.
JSON OpenAPI El archivo JSON que contiene la descripción completa de la API según el estándar OpenAPI. Por defecto, se expone en la ruta /v3/api-docs.
Swagger UI Interfaz gráfica de usuario que visualiza y permite interactuar con la documentación OpenAPI generada. Se accede por defecto en /swagger-ui/index.html.
OpenAPI bean Objeto de configuración en Java utilizado para personalizar la metadata (título, versión, descripción) del documento OpenAPI generado.
@Operation Anotación utilizada para documentar el propósito o resumen de un método específico del controlador REST.
@ApiResponse / ApiResponses Anotaciones utilizadas para documentar los posibles códigos de respuesta HTTP y sus descripciones para una operación (ej. código "200" OK).

VII. Servicios (Capa de Negocio)

Término Técnico Significado / Descripción Fuentes
Servicio (Capa) Capa que encapsula la lógica de negocio y coordina transacciones, validaciones de dominio y composición de repositorios. Expone métodos coherentes para el controlador.
@Service Anotación que marca una clase como componente de servicio. Facilita la detección automática y la inyección de dependencias.
@Transactional (en Servicios) Define límites transaccionales: asegura atomicidad de operaciones; soporta configuración de propagación e aislamiento a nivel de método.
Validaciones de negocio Reglas propias del dominio (no solo bean validation). Se aplican en métodos de servicio para garantizar consistencia y evitar estados inválidos.
Composición/Orquestación Un servicio puede coordinar varios repositorios y otros servicios para cumplir un caso de uso complejo.
Mapeo DTO/Entidad Conversión entre entidades y DTOs para aislar la capa de presentación. Herramientas comunes: ModelMapper, MapStruct.
Paginación y Filtros Los servicios reciben Pageable/Sort y aplican filtros de negocio antes de devolver resultados a controladores.
Idempotencia Propiedad deseable en operaciones de actualización para evitar efectos secundarios al reintentar. Se diseña en la lógica de servicio.
Caché (Spring Cache) Mejora rendimiento con @Cacheable, @CacheEvict, @CachePut. Integraciones típicas: Caffeine, Ehcache, Redis.
Asincronía (@Async) Permite ejecutar tareas en segundo plano (envío de correos, cálculos). Requiere habilitar @EnableAsync y planificar el pool de hilos.
Eventos de dominio Comunicación desacoplada con ApplicationEventPublisher y @EventListener para reaccionar a sucesos del negocio.

XIII. Controladores (Capa API REST)

Término Técnico Significado / Descripción Fuentes
Controlador (Capa) Punto de entrada HTTP de la API. Orquesta la petición, valida entrada, delega a servicios y construye la respuesta.
@RestController Define una clase de controlador REST (combina @Controller y @ResponseBody). Retorna JSON por defecto.
@RequestMapping Configura la ruta base y/o verbos HTTP. Útil para versionado (/api/v1).
@GetMapping / @PostMapping / @PutMapping / @PatchMapping / @DeleteMapping Mapean métodos a verbos HTTP para operaciones CRUD.
@PathVariable Extrae variables desde la ruta (ej. /productos/{id}).
@RequestParam Obtiene parámetros de consulta (ej. /buscar?nombre=valor).
@RequestBody Mapea el cuerpo JSON de la petición a un DTO.
ResponseEntity Construye respuestas HTTP con cuerpo y código de estado (200, 201, 204, 400, 404).
@Valid / @Validated Activa validaciones de DTO y parámetros; integra con el manejador global de errores.
Paginación (Pageable, Page) Soporte para paginar y ordenar resultados en endpoints GET.
Serialización (Jackson) Convierte objetos Java a JSON; cuidado con relaciones y bucles infinitos.
DTOs Separan la capa de presentación de las entidades JPA; controlan qué datos se exponen.
CORS (@CrossOrigin) Permite peticiones desde otros dominios. Configurable por anotación o global.
HATEOAS (avanzado) Agrega enlaces en respuestas para navegabilidad de recursos.
Documentación (@Operation, @ApiResponses) Anota endpoints para generar documentación con OpenAPI/Swagger.
Buenas prácticas Mantener controladores delgados, delegar la lógica a servicios, usar códigos HTTP adecuados y versionar rutas.

IX. Seguridad

Término Técnico Significado / Descripción Fuentes
Spring Security Framework de seguridad para autenticación, autorización y protección de endpoints. Se integra de forma declarativa y extensible.
Autenticación vs Autorización Autenticación verifica identidad; autorización controla qué acciones puede realizar el usuario autenticado.
Roles y Authorities Permisos granulares (authority) y roles (ROLE_ADMIN). Se usan en reglas de acceso y anotaciones.
SecurityFilterChain Bean que define la cadena de filtros de seguridad (HTTP). Configura rutas públicas/privadas, CORS, CSRF, sesiones y excepciones.
UserDetailsService Componente que carga usuarios por nombre de usuario desde base de datos u origen externo.
PasswordEncoder (BCrypt) Codificador de contraseñas seguro. BCryptPasswordEncoder es recomendado por su resistencia a ataques de fuerza bruta.
AuthenticationProvider / AuthenticationManager Encargados de verificar credenciales y producir un Authentication válido.
JWT (Bearer Token) Token firmado que representa al usuario. Se usa en APIs stateless junto con SessionCreationPolicy.STATELESS.
OAuth2 Resource Server Configuración para validar JWT emitidos por un proveedor externo (Keycloak, Auth0). Dependencia: spring-boot-starter-oauth2-resource-server.
CSRF Protección contra falsificación de peticiones. En APIs REST stateless normalmente se deshabilita; en apps con sesión y formularios se habilita.
CORS Permite peticiones desde otros orígenes. Se configura vía CorsConfigurationSource o anotaciones como @CrossOrigin.
Seguridad a nivel de método Control con @PreAuthorize, @PostAuthorize, @Secured. Se habilita con @EnableMethodSecurity (Spring Security 6).
SecurityContextHolder Almacena el contexto de seguridad actual (usuario autenticado y authorities) accesible desde servicios/controladores.
Manejo de excepciones AuthenticationEntryPoint (401) y AccessDeniedHandler (403) para respuestas consistentes ante credenciales inválidas o permisos insuficientes.
Política de sesión SessionCreationPolicy.STATELESS para APIs con JWT; STATELESS evita almacenar sesiones en el servidor.