Este repositorio sirve para realizar el código del curso "Crea tu API"
Se generó un proyecto gradle usando Spring Initialzr con la siguiente configuración:
- Project: Gradle
- Language: Java
- Group:
es.lanyu
- Artifact: datosdeportivosapi
- Dependencies: Spring Data JPA, H2 Database, PostgreSQL Driver, Rest Repositories
- Resto de las opciones por defecto
Se puede disponer de toda esta configuración usando la configuración compartida. Para descargar el proyecto usar el botón
Generate - Ctrl + ENTER
.
Ejemplo de las distintas formas de inyectar dependencias sin usar SpringBoot.
Después se siguieron los siguiente pasos:
-
Creación de bean por XML
-
Escaneando componentes con anotaciones
@Component
-
Sobreescribiendo
@Component
con XML- Se puede invertir el orden de los ficheros y ver los cambios en el log
-
Cambiando paquete base para escanear
- Ya no se sobreescribe. No detecta fuera del paquete base
-
Desambiguar varias beans por identificador
-
@Bean
en@Configuration
- Ver cómo se crean todas las dependencias de las tres formas
-
Refactorizar a Spring Boot
-
Propiedades y
@Value
-
Logs
-
Inyección de Dependencias:
@Autowired
El código hasta este punto está etiquetado en la release v0.0.1.
A continuación de lo anterior se borra todo el código de ejemplo de Spring básico y se añade la dependencia datos-deportivos para continuar con persistencia con JPA, Spring Data REST para ofrecer una API RESTful HATEOAS, formateo de salida con Jackson y Entity Listener. Se ven distintos ejemplos en la forma de hacerlo (XML, Configuración Java y Anotaciones).
Para continuar desde aquí hay que hacer clone de este repositorio y situarse en el commit correspondiente a la release v0.0.2. También hay que hacer clone a la misma carpeta de datos-deportivos porque es multiproyecto y seguramente se toquen cosas de ese proyecto para comparar resultados. Una vez se tiene eso se ejecuta la tarea bootRun
desde este proyecto para ver que todas las dependencias se han resuelto. Finalmente se prueba desde el IDE que se use que detecta los tipos del proyecto datos-deportivos (por ejemplo se ve Partido
, Participante
, Gol
, etc... uno cualquiera es suficiente).
Los puntos que se van a ver son:
- Entidades (POJO
@Entity
) y Repositorios (@Repository
) - ORM por XML(I)
- De POJO simple
- Con Herencia
- Con Relación
- Data REST (endpoints HATEOAS)
- Personalizar payload con Jackson
- ORM por XML (II)
- Herencia con varias subclases (SINGLE TABLE)
- Inyectar bean en objetos no gestionados
- En entidades leídas desde BD (
Events
yListeners
en JPA) - En objetos desde las peticiones HTTP (
@JsonComponent
)
- En entidades leídas desde BD (
- Añadir código personalizado
- Personalizar endpoints con
@RestResource
- Añadir método personalizado a repositorio
- Exponer método con
@RepositoryRestController
- Añadir link a endpoint
/search
- Ruta con
@PathVariable
- Detección automática de links con
ConfiguracionRest
- Personalizar endpoints con
Antes de arrancar la API se debe arrancar la BD. Se usa H2 en modo servidor.
Se puede levantar la BD usando el archivo h2-version.jar
. Comprobar que tenemos acceso a la consola de H2 y que está corriendo.
Las propiedades de conexión son las que vienen por defecto:
url=jdbc:h2:tcp://localhost/~/test
username=sa
(sin password)
Entonces ejecutar la API con la última release.
Mejor desde una consola para ver el log java -jar datosdeportivosapi-VERSION.jar
.
Para conseguir este .jar
lo mejor es seguir los pasos indicados en el blog.
Puedes ver la documentación de la API en Postman y usar el deploy en Heroku para probarlo directamente. Para Heroku tener en cuenta que:
- El servicio hiberna despúes 30 minutos sin usar y tardará un poco más en la primera petición
- Usar el environment
Heroku
de Postman