El Api BS ApiRestPokeAPI, consume la información de los pokemons, el detalle de estos y las evoluciones expuesta en PokéAPI.
/pokemon/ : Consulta la información de los pokemones, el detalle de estos, como Tipo de pokemón(type), Peso(weight) y Lista de habilidades(ability).
/pokemon/{id} : Consulta la información del pokemon, el detalle como Tipo de pokemón(type), Peso(weight) y Lista de habilidades(ability); por Identificador de Pokemón.
/evolution/{id} : Consulta la información del pokemon(Description), y sus evoluciones(Evolutions); por Identificador de Evolución.
- Historia 1: Developer funcionalidad (Consultar sista Pokemón,y detalles como type,weight,ability ).
- Historia 2: funcionalidad (Consultar Pokemon y sus evoluciones).
- Subir a repositorio (Se utilizo repositorio Github-ApiRestPokeAPI)
- Covertura de test (Junit5, Mochito), se integro con Codecov-ApiRestPokeAPI.
- Implementación de memoria en cache (Se utilizo Ecache).
- Despliegue Api BS ApiRestPokeAPI en la nube (Se utilizo Heroku Cloud como nube herokuCloud-ApiRestPokeAPI)
- Documentar el despliegue de API en la nube.
- Manejar listado de errores.
- Consumir API desde front-end (opcional).
Requisitos mínimos: asegúrese de que el siguiente software esté instalado en su PC:
Para este proyecto se utilizaron los siquientes recursos:
Este proyecto no tiene licencia.
El proyecto ejecutar con IntellijIdea o usar maven para construir el proyecto y ejecutar pruebas.
Construir el proyecto,ejecución de test unitarios (así como generar informes de jacoco):
mvn clean install
Ejecución de test unitarios
mvn test
Arrancar directamente con Spring Boot
mvn spring-boot:run
Necesitas tener una cuenta de Heroku. Si no tienes uno, puede crearlo desde Heroku’s Signup Page.
-
Descargue e instale la CLI de Heroku:
Puede descargar Heroku CLI desde Heroku Dev Center.
- Inicie sesión con su email y password:
heroku login
Se le pedirá que ingrese el correo electrónico y la contraseña de su cuenta de Heroku.
heroku: Press any key to open up the browser to login or q to exit:
Opening browser to https://cli-auth.heroku.com/auth/cli/browser/888fc87d-092a-4bc8-8d3e-84f01f3e4eca?requestor=SFMyNTY.g2gDbQAAAAwzOC4yNS4xNS4yMDduBgC4gASAggFiAAFRgA.Ov5Qw929rGNZjqcbqyZNSRgnyw91JCaFHWEwMlRf_fE
Logging in... done
Logged in as [email protected]
¡Eso es todo! Has iniciado sesión en Heroku. Ahora podemos continuar con el despliegue. 3. Descargar Git de repositorio ApiRestPokeAPI.
git clone -b main https://github.com/ZOMELI/ApiRestPokeAPI.git
- cree una nueva aplicación de heroku usando un
heroku create <YOUR_UNIQUE_APP_NAME>
:
heroku create heroku-deploy-48491134
Creating stark-sword-398... done, stack is cedar
http://heroku-deploy-48491134.herokuapp.com/ | [email protected]:heroku-deploy-48491134.git
Git remote heroku added
- Implementar la API en Heroku, usando el comando
git push heroku <YOUR_BRANCH_GIT>
:
git push heroku main
Counting objects: 47, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (25/25), done.
Writing objects: 100% (47/47), 10.25 KiB, done.
Total 47 (delta 19), reused 42 (delta 17)
-----> Heroku receiving push
-----> Java app detected
-----> Installing OpenJDK 1.8... done
-----> Installing Maven 3.6.2... done
-----> Installing settings.xml... done
-----> executing /app/tmp/repo.git/.cache/.maven/bin/mvn -B -Duser.home=/tmp/build_3k0p14ghrmdzs -Dmaven.repo.local=/app/tmp/repo.git/.cache/.m2/repository -s /app/tmp/repo.git/.cache/.m2/settings.xml -DskipTests=true clean install
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building ApiRestPokeAPI-1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.062s
[INFO] Finished at: Tue Mon 08 23:27:20 UTC 2022
[INFO] Final Memory: 12M/490M
[INFO] ------------------------------------------------------------------------
-----> Discovering process types
Procfile declares types -> web
-----> Compiled slug size is 948K
-----> Launching... done, v3
http://heroku-deploy-48491134.herokuapp.com deployed to Heroku
Ahora, revisemos el estado de los procesos de la aplicación, con el comando heroku ps --app <YOUR_UNIQUE_APP_NAME>
:
heroku ps --app heroku-deploy-48491134
=== web (Free): java -Dserver.port=$PORT $JAVA_OPTS -jar target/ApiRestPokeAPI-0.0.1-SNAPSHOT.jar (1)
web.1: idle 2022/08/08 19:16:18 -0500 (~ 18m ago)
El proceso web está activo. Revise los registros para obtener más información, con el comando heroku logs --tail --app <YOUR_UNIQUE_APP_NAME>
:
heroku logs --tail --app heroku-deploy-48491134
2022-08-08T22:43:37 app[web.1]: . ____ _ __ _ _
2022-08-08T22:43:37 app[web.1]: /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
2022-08-08T22:43:37 app[web.1]: ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
2022-08-08T22:43:37 app[web.1]: \\/ ___)| |_)| | | | | || (_| | ) ) ) )
2022-08-08T22:43:37 app[web.1]: ' |____| .__|_| |_|_| |_\__, | / / / /
2022-08-08T22:43:37 app[web.1]: =========|_|==============|___/=/_/_/_/
2022-08-08T22:43:37 app[web.1]: :: Spring Boot :: (v2.7.2)
2022-08-08T22:43:37 app[web.1]:
2022-08-08T22:43:37 app[web.1]: 2022-08-08 22:43:37.662 INFO 4 --- [ main] c.z.v.a.ApiRestPokeApiApplication : Starting ApiRestPokeApiApplication v0.0.1-SNAPSHOT using Java 1.8.0_332-heroku on 8e71da91
-54a2-438a-8530-63a4eb21b926 with PID 4 (/app/target/ApiRestPokeAPI-0.0.1-SNAPSHOT.jar started by u14902 in /app)
2022-08-08T22:43:37 app[web.1]: 2022-08-08 22:43:37.665 INFO 4 --- [ main] c.z.v.a.ApiRestPokeApiApplication : No active profile set, falling back to 1 default profile: "default"
2022-08-08T22:43:38 app[api]: Build succeeded
2022-08-08T22:43:40 app[web.1]: 2022-08-08 22:43:40.619 INFO 4 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 58981 (http)
2022-08-08T22:43:40 app[web.1]: 2022-08-08 22:43:40.629 INFO 4 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2022-08-08T22:43:40 app[web.1]: 2022-08-08 22:43:40.630 INFO 4 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.65]
2022-08-08T22:43:41 app[web.1]: 2022-08-08 22:43:41.315 INFO 4 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2022-08-08T22:43:41 app[web.1]: 2022-08-08 22:43:41.315 INFO 4 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2964 ms
2022-08-08T22:43:43 app[web.1]: 2022-08-08 22:43:43.452 INFO 4 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 58981 (http) with context path ''
2022-08-08T22:43:43 app[web.1]: 2022-08-08 22:43:43.460 INFO 4 --- [ main] c.z.v.a.ApiRestPokeApiApplication : Started ApiRestPokeApiApplication in 6.584 seconds (JVM running for 6.946)
2022-08-08T22:43:43 heroku[web.1]: State changed from starting to up
6.Se ve bien!. Ahora podemos visitar la aplicación con heroku open --app <YOUR_UNIQUE_APP_NAME>
.
heroku open --app heroku-deploy-48491134
curl --location --request GET 'https://zomeli-villanueva-48491134.herokuapp.com/pokemon?limit=2&offset=4'
Response:
{
"count": 1154,
"previous": "https://zomeli-villanueva-48491134/pokemon/?offset=2&limit=2",
"next": "https://zomeli-villanueva-48491134/pokemon/?offset=6&limit=2",
"pokemons": [
{
"id": "5",
"name": "charmeleon",
"url": "https://zomeli-villanueva-48491134/pokemon/5/",
"weight": "190",
"types": [
{
"name": "fire",
"url": "https://zomeli-villanueva-48491134/type/10/"
}
],
"abilities": [
{
"name": "blaze",
"url": "https://zomeli-villanueva-48491134/ability/66/"
},
{
"name": "solar-power",
"url": "https://zomeli-villanueva-48491134/ability/94/"
}
]
},
{
"id": "6",
"name": "charizard",
"url": "https://zomeli-villanueva-48491134/pokemon/6/",
"weight": "905",
"types": [
{
"name": "fire",
"url": "https://zomeli-villanueva-48491134/type/10/"
},
{
"name": "flying",
"url": "https://zomeli-villanueva-48491134/type/3/"
}
],
"abilities": [
{
"name": "blaze",
"url": "https://zomeli-villanueva-48491134/ability/66/"
},
{
"name": "solar-power",
"url": "https://zomeli-villanueva-48491134/ability/94/"
}
]
}
]
}
curl --location --request GET 'https://zomeli-villanueva-48491134.herokuapp.com/pokemon/4/'
Response:
{
"id": "4",
"name": "charmander",
"url": "https://zomeli-villanueva-48491134/pokemon-species/4/",
"weight": "85",
"types": [
{
"name": "fire",
"url": "https://zomeli-villanueva-48491134/type/10/"
}
],
"abilities": [
{
"name": "blaze",
"url": "https://zomeli-villanueva-48491134/ability/66/"
},
{
"name": "solar-power",
"url": "https://zomeli-villanueva-48491134/ability/94/"
}
]
}
curl --location --request GET 'https://zomeli-villanueva-48491134.herokuapp.com/evolution/10'
Response:
{
"id": "10",
"pokemon": "pichu",
"url": "https://zomeli-villanueva-48491134/pokemon/172/",
"evolutions": [
{
"name": "pikachu",
"url": "https://zomeli-villanueva-48491134/pokemon/25/"
},
{
"name": "raichu",
"url": "https://zomeli-villanueva-48491134/pokemon/26/"
}
]
}