Shortly es un servicio de acortador de URLs desarrollado con Spring Boot y Java. Permite generar enlaces cortos, gestionar redirecciones y exponer estadísticas básicas de uso.
- Generación de enlaces cortos a partir de URLs largas.
- Redirección automática al hacer clic en el enlace corto.
- Conteo de visitas (hit count).
- Persistencia en PostgreSQL mediante JPA/Hibernate.
- Validación de entradas con Hibernate Validator.
- Manejo global de errores con respuestas unificadas.
- Configuración de CORS externalizada por perfiles.
Descripción general de la arquitectura en capas del proyecto:
- Configuración (
config): Contiene clases de configuración de Spring, comoCorsProperties,CorsConfigySecurityConfig, cargando propiedades externas desdeapplication.properties. - Controladores (
controller): Define los endpoints REST enShortlyController, manejando la generación y redirección de URLs cortas. - Servicios (
service): Implementa la lógica de negocio enUrlManagerServicey su implementaciónUrlManagerServiceImpl. - Repositorios (
repository): Interfaces que extiendenJpaRepositorypara acceder y manipular la entidadUrl. - Modelos (
model): Entidad JPAUrlcon atributos, auditoría (createdAt,modifiedAt) y contador de visitas (hitCount). - DTOs (
dto): Objetos de transferencia de datos comoShortUrlRequest,UrlResponseyApiResponse. - Manejo de errores (
error):GlobalExceptionHandlerunifica las respuestas de error y validaciones. - Utilidades (
util): Clases auxiliares comoResponseUtilpara crear respuestas estándar.
Representación de la estructura de archivos:
src/main/java/com/bjtg/shortly/
├── config/
│ ├── CorsConfigurationSourceClass.java
│ └── SecurityConfig.java
├── controller/
│ └── ShortlyController.java
├── dto/
│ ├── ApiResponse.java
│ └── url/
│ ├── ShortUrlRequest.java
│ └── UrlResponse.java
├── error/
│ └── GlobalExceptionHandler.java
├── model/
│ └── url/
│ ├── Url.java
│ └── UrlBuilder.java
├── repository/
│ └── UrlRepository.java
├── service/
│ ├── UrlManagerService.java
│ ├── UrlShortService.java
│ └── impl/
│ ├── UrlManagerServiceImpl.java
│ └── UrlShortServiceImpl.java
├── util/
│ └── ResponseUtil.java
└── ShortlyApplication.java
- Java 21
- Spring Boot 3.4.3
- Spring Web
- Spring Data JPA (Hibernate)
- Spring Security
- ModelMapper
- PostgreSQL
- Maven
- Java 21+
- Maven 3.6+
- PostgreSQL 14+
-
Clonar el repositorio:
git clone https://github.com/bryamjesus/shortly-springboot.git cd shortly-springboot -
Configurar la base de datos:
- Crear una base de datos en PostgreSQL (por ejemplo,
shortly_db). - Ajustar
src/main/resources/application-dev.propertiescon tus credenciales:spring.datasource.url=jdbc:postgresql://localhost:5432/shortly_db spring.datasource.username=tu_usuario spring.datasource.password=tu_contraseña
- Crear una base de datos en PostgreSQL (por ejemplo,
-
Ejecutar la aplicación:
./mvnw spring-boot:run -Dspring-boot.run.profiles=dev
| Método | Ruta | Descripción | Request Body |
|---|---|---|---|
| POST | /shortly |
Generar un enlace corto | { "url": "<url>" } |
| GET | /shortly/{code} |
Obtiene o redirige a la URL original. El parámetro code debe ser una cadena de 8 caracteres alfanuméricos (A–Z, a–z, 0–9). |
N/A |
-
Generar enlace corto:
curl -X POST http://localhost:8080/shortly \ -H "Content-Type: application/json" \ -d '{"longUrl":"https://www.example.com"}'
-
Redirigir a la URL original:
curl -v http://localhost:8080/shortly/abc123
Se incluyen pruebas de integración con MockMvc para verificar CORS y endpoints:
./mvnw test- Fork del repositorio.
- Crear una rama con la nueva característica (
git checkout -b feature/nombre). - Hacer commit de tus cambios (
git commit -m "Agregar nueva característica"). - Push a la rama (
git push origin feature/nombre). - Crear un Pull Request.
Desarrollado por Bryam Jesús