API Rest desarrollada con Spring boot data-rest y data-jpa que se utilizara como backend en Programación Avz II.
Esta API hace uso de HATEOAS y expone los siguientes endpoints:
- /reporters
- /categories
- /news
Informacion sobre los rest repositories de spring, responses de codigos http y verbos disponibles.
Este proyecto se puede ejecutar dentro de un container utilizando Docker, de la siguiente forma:
Lista de comandos: cheatsheet
-
Instalar Docker en nuestro sistema:
-
Buildear el proyecto:
-
Como hacemos uso de MySQL como base de datos, necesitamos tener instalada la misma. Con docker esto es facil:
docker run --name mysql-db -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=newspaper_db -p 3306:3306 -d mysql:latest -
Una vez que nuestro container de MySQL este corriendo, lo podemos verificar con el comando "docker ps", estamos listos para buildear el proyecto. Generalmente es necesario tener instalado Maven, pero Spring boot nos provee un wrapper del mismo para poder buildear sin necesidad de tener maven instalado. Ubicados sobre el directorio del proyecto, podemos ver los archivos mvnw y mvnw.cmd . Un paso adicional para aquellos que esten con Linux es modificar el archivo application.yml bajo el directorio /resources, cambiar el valor de url, por el siguiente jdbc:mysql://localhost:3306/newspaper_db.
-
Si estamos desde Linux o la consola de Git Bash:
./mvnw package -
Si estamos desde la consola de Windows:
./mvnw.cmd package
-
-
Una vez que el proceso de build este terminado satisfactoriamente y veamos el archivo "newspaper-1.0.0.jar" dentro del directorio /target. Podemos generar la imagen de Docker que necesitamos. Sobre el directorio que contiene el archivo Dockerfile, ejecutamos:
docker build -t docker:newspaper . -
Con la imagen de Docker lista, pueden verlo con el comando, "docker images". Podemos seguir con el paso siguiente, levantar ambos containers juntos, por un lado el container de MySQL y por el otro el container de la API. Para esto, ejecutamos:
-
Detener el container ejecutado en el paso 2:
docker stop mysql-db -
Eliminar el container detenido anteriormente:
docker rm mysql-db -
Sobre el directorio del proyecto ejecutar el archivo docker-compose.yml. Los que esten con LINUX instalar -> docker-compose y modificar en el archivo docker-compose.yml la ip 192.168.99.100 por localhost. Guardar y ejecutar:
docker-compose up
Listo, ya podemos acceder a la api utilizando el puerto 8080 y la ip asignada a la docker machine, la misma se puede ver con el comando "docker-machine ip". Generalmente http://192.168.99.100:8080
-
Otra forma de poder ejecutar la api es instalando las herramientas necesarias en nuestro equipo, de la siguiente forma.
-
Instalar y confgiurar el motor de base de datos MySQL
-
Instalar Java JDK 1.8
-
Modificar las propiedades en el archivo application.yml para poder conectar con la base de datos instalada en el paso 1.
- datasource.url
- datasource.username
- datasource.password
-
Ejecuta la aplicacion de spring boot.
Desde la terminal de Linux o Git Bash
./mvnw spring-boot:runDesde la consola de Windows
./mvnw.cmd spring-boot:run -
Si todo se configuro correctamente ya podemos ingresar a la api con "http://localhost:8080/"
Pueden usar POSTMAN
GET localhost:8080/categories o {docker-machine-ip}:8080/categories
Response:
{
"_embedded" : {
"categories" : [ {
"name" : "sports",
"_links" : {
"self" : {
"href" : "http://localhost:8080/categories/1"
},
"category" : {
"href" : "http://localhost:8080/categories/1"
},
"news" : {
"href" : "http://localhost:8080/categories/1/news"
}
}
}, {
"name" : "local",
"_links" : {
"self" : {
"href" : "http://localhost:8080/categories/2"
},
"category" : {
"href" : "http://localhost:8080/categories/2"
},
"news" : {
"href" : "http://localhost:8080/categories/2/news"
}
}
}, {
"name" : "world",
"_links" : {
"self" : {
"href" : "http://localhost:8080/categories/3"
},
"category" : {
"href" : "http://localhost:8080/categories/3"
},
"news" : {
"href" : "http://localhost:8080/categories/3/news"
}
}
}, {
"name" : "economy",
"_links" : {
"self" : {
"href" : "http://localhost:8080/categories/4"
},
"category" : {
"href" : "http://localhost:8080/categories/4"
},
"news" : {
"href" : "http://localhost:8080/categories/4/news"
}
}
}, {
"name" : "politics",
"_links" : {
"self" : {
"href" : "http://localhost:8080/categories/5"
},
"category" : {
"href" : "http://localhost:8080/categories/5"
},
"news" : {
"href" : "http://localhost:8080/categories/5/news"
}
}
}, {
"name" : "entertainment",
"_links" : {
"self" : {
"href" : "http://localhost:8080/categories/6"
},
"category" : {
"href" : "http://localhost:8080/categories/6"
},
"news" : {
"href" : "http://localhost:8080/categories/6/news"
}
}
} ]
},
"_links" : {
"self" : {
"href" : "http://localhost:8080/categories{?page,size,sort}",
"templated" : true
},
"profile" : {
"href" : "http://localhost:8080/profile/categories"
}
},
"page" : {
"size" : 20,
"totalElements" : 6,
"totalPages" : 1,
"number" : 0
}
}POST localhost:8080/news o {docker-machine-ip}:8080/news
Body:
{
"title" : "Test title 4",
"body" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae urna ipsum. Pellentesque in quam nisl. Sed auctor mi vel sagittis suscipit.",
"date" : "2017-09-24",
"reporter" : "http://localhost:8080/reporters/1",
"category" : "http://localhost:8080/categories/1"
}Response: status 201 Created
Headers:
content-type →application/hal+json;charset=UTF-8
date →Thu, 19 Oct 2017 13:31:14 GMT
location →http://localhost:8080/news/2
transfer-encoding →chunked
Body:
{
"title": "Test title 4",
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae urna ipsum. Pellentesque in quam nisl. Sed auctor mi vel sagittis suscipit.",
"date": "2017-09-24T00:00:00.000+0000",
"_links": {
"self": {
"href": "http://localhost:8080/news/2"
},
"news": {
"href": "http://localhost:8080/news/2"
},
"category": {
"href": "http://localhost:8080/news/2/category"
},
"reporter": {
"href": "http://localhost:8080/news/2/reporter"
}
}
}