Escuela Colombiana de Ingeniería Julio Garavito - Arquitecturas de Software ARSW - Parcial Segundo Tercio
Con el objetivo de preparar el examen final del segundo tercio, por favor siga las siguientes instrucciones.
- Explore el API de OpenWeather en el siguiente enlace.
- Use la colección de Postman adjunta para validar el funcionamiento del endpoint por fuera de la página de OpenWeather.
- Si no ha terminado por completo el último laboratorio, hagalo, si es necesario desde el inicio y completo. En ese laboratorio esta basado el parcial.
- Revise la documentación de Google Maps para agregar marcadores a un mapa o revise este Codepen
Parcial del segundo tercio
Su compañía lo ha seleccionado para construir una aplicación para consultar el estado del clima en lugares específicos de la tierra.
La aplicación recibirá en un campo el nombre de una ciudad, por ejemplo London
para Londres y deberá mostrar la información del clima para esa ciudad. Para esto utilice el API gratuito de openweathermap (Puede crear una cuenta para obtener la llave para realizar consultas). Se le pide que su implementación sea eficiente en cuanto a recursos así que debe implementar un caché que permita evitar hacer consultas repetidas al API externo. Una vez tenga la funcionalidad básica, extienda su implementación para incluir una funcionalidad para mostrar mapas de la ciudad con diferentes capas del clima (revise la funcionalidad del API de mapas de clima y el ejemplo anexo.). La implementación del mapa puede ir directamente a los servicios externos sin pasar por el servidor intermediario.
Sugerencia realice la implementación de manera incremental. Haga commits regulares.
Ejemplo de la interfaz gráfica
La arquitectura debe tener las siguientes características.
- El cliente Web debe ser un cliente asíncrono que use servicios REST desplegados en Heroku y use Json como formato para los mensajes.
- La aplicación debe estar desplegada en Heroku.
- El servidor de Heroku servirá como un gateway para encapsular llamadas a otros servicios Web externos.
- La aplicación debe ser multiusuario (Sin registro y sin seguridad )
- Todos los protocolos de comunicación serán sobre HTTP.
- Los formatos de los mensajes de intercambio serán siempre JSON.
- La interfaz gráfica del cliente debe ser los más limpia y agradable posible y debe utilizar Bootstrap. Para invocar métodos REST desde el cliente usted puede utilizar la tecnología que desee.
- Debe construir un cliente Java que permita probar las funciones tanto del servidor fachada como del cliente externo. El cliente utiliza simples conexiones http para conectarse a los servicios. Este cliente debe hacer pruebas de concurrencia a sus servidor Spring. 9 .La fachada de servicios tendrá un caché que permitirá que llamados que ya se han realizado a las implementaciones concretas con parámetros específicos no se realicen nuevamente. Puede almacenar el llamado como un String con su respectiva respuesta, y comparar el string respectivo. Recuerde que el caché es una simple estructura de datos.
- Si el dato del cache tiene más de 5 min se debe solicitar nuevamente al servidor externo.
- Se debe poder extender fácilmente, por ejemplo, es fácil agregar nuevas funcionalidades, o es fácil cambiar el proveedor de una funcionalidad.
- Debe utilizar maven para gestionar el ciclo de vida, git y github para almacenar al código fuente y heroku como plataforma de producción.
AJUSTE LOS DIAGRAMAS DE ARQUITECTURA QUE SEAN NECESARIOS PARA REFLEJAR LAS DESICIONES DE ARQUITECTURA QUE TOMO SOBRE EL DESARROLLO DEL PARCIAL.
- La aplicación funcionando en Heroku con el nombre (APELLIDO-ARSW-T2) y el código fuente almacenado en un proyecto GitHub con el nombre (APELLIDO-ARSW-T2).
- Los fuentes deben estar documentados y bien estructurados para generar el Javadoc.
- El Readme.md debe describir el diseño, la forma de ejecutar el progrema localmente, explicar cómo se puede extender y cómo podría, por ejemplo, hacer que una función específica la implementara un proveedor de servicios diferente.
- Indique la urls de Github, Heroku
- Suba el zip del proyecto al aula con el nombre (APELLIDO-ARSW-T2).
- Guarde una copia de su proyecto.
- Cliente escrito en JS asíncrono invocando servicios REST (10%)
- Servidor fachada exponiendo servicios REST (10%)
- Conexión a servicios externos (10%)
- Cliente Java para Tests concurrentes para el servicio en Heroku y para el del proveedor externo(10%)
- Cache tolerante a la concurrencia y una sola instancia para la aplicación (10%)
- Implementa la funcionalidad de los mapas de manera asíncrona (15%)
- Diseño y descripción del diseño son de alta calidad (30%)
- Extensible
- Usa patrones
- Modular
- Organizado
- Javadoc publicado
- Identifica la función de componentes individuales demuestra conocimiento del funcionamiento general de la arquitectura.
- Inicie con la aplicación web basada en spring que le propone Heroku en su guía inicial para java. (https://devcenter.heroku.com/articles/getting-started-with-java)
- Para invocar un servicios get desde java puede hacerlo de manera fácil como muestra el siguiente código, revise la clase de pruebas adjunto al examen para más información:
@Test
public void shouldReturnAllCases() throws UnirestException {
HttpResponse<JsonNode> response = Unirest
.get("https://covid-19-coronavirus-statistics.p.rapidapi.com/v1/stats")
.header("x-rapidapi-host", "covid-19-coronavirus-statistics.p.rapidapi.com")
.header("x-rapidapi-key", "34f05cff54msh30ba6f36c91c183p166499jsn555917ef62b8")
.asJson();
assertNotNull(response.getBody());
assertEquals((int)HttpStatus.SC_OK,response.getStatus());
}
- Parseo de un JSON
<!DOCTYPE html>
<html>
<body>
<h2>Create Object from JSON String</h2>
<p id="demo"></p>
<script>
var txt = '{"name":"John", "age":30, "city":"New York"}'
var obj = JSON.parse(txt);
document.getElementById("demo").innerHTML = "name: " + obj.name + ", age: " + obj.age;
</script>
</body>
</html>
- Código de página con Mapa embebido (Ver archivo)