Laboratorio 18

Construir una API REST con Spring Boot y Copilot

Hemos creado un proyecto Spring Boot con algunos archivos ya creados, puedes encontrar el proyecto en la carpeta C:\CopilotHackathon\exercisefiles\springboot.

Fuente validada

Lab_18_Spring_Boot_API.docx

Esta pagina fue reconstruida desde el documento del ZIP entregado como fuente principal.

Conformidad visual

Sin imagenes publicadas

El archivo fuente contiene 0 imagenes embebidas. Para garantizar conformidad, no se publican imagenes heredadas de otros materiales.

Criterio GH-300

Practica verificable

Ejecuta los comandos, captura evidencia propia y valida cada sugerencia de Copilot antes de aceptarla.

Alcance de publicacion: Solo se publica el contenido del laboratorio indicado por el archivo Lab_18_Spring_Boot_API.docx. Las imagenes no se muestran porque el ZIP no incluye imagenes embebidas en este documento.

Certificación GH-300

Laboratorio 18

API REST con Spring Boot y GitHub Copilot

Autor: Carlos Crudo

linkedin.com/in/carloscrudo

Construcción de una API REST completa usando Spring Boot con la asistencia de GitHub Copilot para acelerar el desarrollo, generación de tests y refactoring.

Temas que cubre este laboratorio:

Configuración entorno: JDK 17, Apache Maven

Copilot para generación de controladores REST

GET, POST, PUT, DELETE endpoints

Tests unitarios con JUnit + Copilot

Copilot Chat para resolución de errores

Spring Boot: mvn package, test, spring-boot:run

Laboratorio 18: API REST con Spring Boot y GitHub Copilot

Ahora has adquirido una comprensión práctica de cómo habilitar y probar Escaneo secreto Lab 18 - Construye una API REST usando Spring Boot con la ayuda de GitHub Copilot

Objetivo

El objetivo de este laboratorio es aprender a usar GitHub Copilot, utilizando un ejercicio que consiste en construir una API REST usando Spring Boot.

Hemos creado un proyecto Spring Boot con algunos archivos ya creados, puedes encontrar el proyecto en la carpeta C:\CopilotHackathon\exercisefiles\springboot.

Antes de ejecutar este laboratorio, instalemos primero los paquetes de software necesarios y configuremos el entorno.

Tarea 0: Instalar y configurar el entorno

Necesitas descargar e instalar los siguientes paquetes de software para configurar el entorno que ejecute este laboratorio.

  • a. Microsoft JDK 17
  • B. apache maven

Abre el navegador de Edge.

En el campo URL del navegador, copia y pega el enlace para descargar los paquetes de software en la máquina virtual de tu laboratorio.

  • a. Microsoft JDK 17 https://aka.ms/download-jdk/microsoft-jdk-17.0.12-windows-x64.msi
  • b. apache maven https://dlcdn.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.zip

Nota: Repite los mismos pasos para descargar todos los demás paquetes también. Por defecto, los paquetes se guardarán en la carpeta de descargas.

  • a. Instalar Microsoft JDK 17

En la carpeta Descargas (C:\Users\Admin\Downloads) y haz doble clic en Microsoft JDK

Haz clic en Siguiente.

Acepta el EULA y haz clic en Siguiente.

Selecciona Instalar solo para ti (Admin) y haz clic en Siguiente.

En la pantalla de configuración personalizada, ahora configurarás la variable JAVA_HOME. Haz clic en la flecha hacia abajo y selecciona Toda la función se instalará en el disco duro local.

Haz clic en Siguiente.

Haz clic en Instalar.

  • b. Instala apache- maven

Navega a la carpeta Descargas (C:\Usuarios\Admin\Descargas)

Haz clic derecho apache-maven-3.9.9-bin.zip carpeta y selecciona Extraer todo.

En la página "Seleccionar un destino" introduzca el destino como C:\Usuarios\Admin\Descargas y haz clic en Extraer.

Los archivos extraídos estarán tal y como se muestra en la captura de pantalla.

Nota: Asegúrate de que la carpeta se renombre como apache-maven-3.9.9, si ves algún otro nombre.

Variables ambientales de configuración

Haz clic en el logo de Windows y selecciona Configuración

Búsqueda Sistema de edición en la página de configuración de Windows y selecciona la variable Editar Entorno del Sistema.

Haz clic en el botón de Variable de Entorno.

Haz clic en Nuevo en la sección de Administrador en Nuevo en la sección de Administrador.

Ahora configurarás el entorno y las variables de ruta para Maven.

Selecciona Nuevo en la sección de Administrador en la variable de usuario.

En la ventana de Nueva Variable de Usuario, introduce lo siguiente y haz clic en Aceptar

Nombre de la variable: MAVEN_HOME

Valor variable: C:\Usuarios\Admin\Descargas\apache-maven-3.9.9

Ahora selecciona Ruta y haz clic en Editar

En la ventana de la variable Editar entorno, haz clic en Nuevo.

En el campo vacío, introduce lo siguiente %MAVEN_HOME%\bin y haz clic en OK.

Haz clic en Aceptar para terminar de configurar el entorno de usuario y las variables de ruta para Maven.

Ahora configurarás las variables de Sistema para Maven. Selecciona Nuevo en la sección de variables del sistema.

En la ventana de Nueva Variable del Sistema, introduzca lo siguiente y haga clic en Aceptar

Nombre de la variable: MAVEN_HOME

Valor variable: C:\Usuarios\Admin\Descargas\apache-maven-3.9.9

Tarea 1: Crear el código para gestionar una simple solicitud GET

Pasa al archivo 'DemoController.java' y empieza a escribir el código para gestionar una solicitud GET sencilla. En este primer ejercicio, hemos proporcionado un comentario que describe el código que necesitas generar. Solo pulsa enter y espera un par de segundos, Copilot generará el código por ti.

Ya existe una prueba unitaria implementada para este ejercicio, puedes ejecutarla usando el comando mvn test antes y después para validar que el código generado por Copilot es correcto.

Luego, crea una nueva prueba unitaria para el caso cuando no se proporcione ninguna clave en la solicitud.

Después de cada ejercicio, siéntete libre de empaquetar y ejecutar tu aplicación para probarlo.

Package: mvn package

Run: mvn spring-boot:run

Test: curl -v http:*//localhost:8080/hello?key=world*

Abre el Explorador de archivos, expande Local Disk (C:) y expande la carpeta CopilotHackathon->ejerciciofiles > Springboot > copilot-demo > src>main>java>com>Microsoft>hackathon>copilotdemo>controller carpeta para ver 'DemoController.java file.

Haz doble clic DemoController.java archivo. En este primer ejercicio, solo se proporciona un comentario que describe el código que necesitas generar.

Toma el cursor al final del comentario (línea 12), solo pulsa enter y espera un par de segundos, Copilot generará el código por ti. Pulsa la pestaña hasta que te muestre el código completo.

También puedes pulsar Ctrl + Enter para elegir opciones de código.

Amplía la carpeta de prueba y haz clic en CopilotDemoApplicationTests.java. La prueba unitaria ya te la han dado.

Puedes intentar ejecutar el código sin actualizar el pom xml y pedir a Coiplot una solución para explorar el producto.

Abre Pom.xml añade el siguiente plugin y guarda el archivo

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>3.8.1</version>

<configuration>

<source>17</source>

<target>17</target>

</configuration>

</plugin>

Haz clic en Terminal -> Nuevo Terminal desde la barra de herramientas.

Selecciona Gitbash y ejecuta el comando de abajo.

cd exercisefiles/springboot/copilot-demo/

Comando Runmvn clean install -DskipTests

Corre. Si tu montaje falla con error.mvn test

Haz clic en el icono de Copilot en la esquina derecha y selecciona Github Copilot Chat.

Pide al chat de Copilot de Github que te proporcione una solución para tu error.

Mira el chat de Copilot explicando el problema y la solución correspondiente. Si aún no tienes claro la solución, sigue preguntando tus dudas y Copilot te responderá. Lee y entiende el error y la solución a implementar.

Proporciona el método /hello a Copilot y veamos qué te sugiere.

Vuelve a la CopilotDemoApplicationTests.java coge el cursor al final del examen (línea 24) y pulsa Enter. Copilot genera otra prueba para ti. Pulsa la pestaña para aceptarlo.

Proporciona el método /hello desde la prueba hasta Copilot y mira qué sugiere.

Vuelve a ejecutar el Tu código puede verse como abajo. También puedes escribir tu propio código y pedirle a Copilot que lo valide.mvn test

@RestController

public class DemoController {

@GetMapping("/hello")

public String hello(@RequestParam(name = "key", required = false) String key) {

if (key == null) {

return "key not passed";

}

return "hello " + key;

}

}

Comando Runmvn package

¡Corre mvn spring-boot:run

Haz clic en dividir el terminal e introduce elsegundo terminal. También puedes pedirle a tu Copilot que proporcione el comando curl para probar tu código.curl -v http:*//localhost:8080/hello?key=world*

Haz clic en dividir el terminal e introduce elsegundo terminalcurl -v http:*//localhost:8080/hello*

Pulsa Ctrl + C para detener el servicio en ejecución.

Tarea 2: Comparación de fechas

Nueva operación bajo /diffdates que calcula la diferencia entre dos fechas. La operación debe recibir dos fechas como parámetro en formato dd-MM-yyyy y devolver la diferencia en días.

Además, crea una prueba unitaria que valide la operación.

A partir de ahora, tendrás que crear las pruebas unitarias para cada nueva operación. ¿No fue fácil con Copilot?

Ve a DemoController.java introduce el aviso y pulsa Enter. Espera un rato y, una vez que el copiloto prediga el código, pulsa la pestaña para aceptarlo.*//create a New operation under /diffdates that calculates the difference between two dates. The operation should receive two dates as parameter in format dd-MM-yyyy and return the difference in days*

También puedes usar el siguiente código.

@GetMapping("/diffdates")

public String diffdates(@RequestParam(name = "date1", required = false) String date1, @RequestParam(name = "date2", required = false) String date2) throws ParseException {

if (date1 == null || date2 == null) {

return "date not passed";

}

SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");

Date date1Obj = sdf.parse(date1);

Date date2Obj = sdf.parse(date2);

long diffInMillies = Math.abs(date2Obj.getTime() - date1Obj.getTime());

long diff = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS);

return "difference in days: " + diff;

}

A partir de ahora, tendrás que crear las pruebas unitarias para cada nueva operación. Usa Copilot para crear.

Abre CopilotDemoApplicationTests.java bajo la carpeta de prueba, entra en el prompt, luego pulsa Enter. Espera un segundo para que el copilot prediga el código y pulsa tab para aceptar el código predicho.*// create unit test to /diffdates that calculates the difference between two dates. The operation should receive two dates as parameter in format dd-MM-yyyy and return the difference in days.*

Puedes entrar y pulsar tab para crear varias pruebas unitarias

Busca ayuda en el chat de Copilot para problemas a solucionar o para explicar el test de unidad y actualizar el código si es necesario basándose en las entradas de Copilot.

@Test

void diffdates() throws Exception {

mockMvc.perform(MockMvcRequestBuilders.get("/diffdates?date1=01-01-2021&date2=01-02-2021"))

.andExpect(MockMvcResultMatchers.status().isOk())

.andExpect(MockMvcResultMatchers.content().string("difference in days: 31"));

}

@Test

void diffdatesNoDate1() throws Exception {

mockMvc.perform(MockMvcRequestBuilders.get("/diffdates?date2=01-02-2021"))

.andExpect(MockMvcResultMatchers.status().isOk())

.andExpect(MockMvcResultMatchers.content().string("date not passed"));

}

@Test

void diffdatesNoDate2() throws Exception {

mockMvc.perform(MockMvcRequestBuilders.get("/diffdates?date1=01-01-2021"))

.andExpect(MockMvcResultMatchers.status().isOk())

.andExpect(MockMvcResultMatchers.content().string("date not passed"));

}

Abre el terminal ->Gitbash y ejecuta los comandos bajo

cd "exercisefiles\springboot\copilot-demo"
mvn test

Si ves errores de compilación, copia el mensaje de error y pide a Copilot la solución.

Copolit te sugiere importar paquetes con código. Añade el comando a tu código y ejecuta mvn test

¡Corre mvn package

Haz la prueba mvn -Dtest=CopilotDemoApplicationTests*#diffdates test*

¡Corre mvn spring-boot:run

Haz clic en Dividir terminal y ejecuta curl -v http:*//localhost:8080/diffdates?date1=01-01-2021&date2=01-02-2021*

Verás un error. Busca ayuda de Copilot y soluciona el pequeño problema.

Como chat de copiloto para ayudarte con el comando de curl. Simplemente copia el mensaje de error como si lo pegues en el chat. Copilot te da el comando modificado con explicación

Tarea 3: Validar el formato de un teléfono español

Valida el formato de un número de teléfono español (+34 prefijo, luego 9 dígitos, empezando por 6, 7 o 9). La operación debe recibir un número de teléfono como parámetro y devolver true si el formato es correcto, falso en caso contrario.

Abre DemoController.Java e introduce el prompt . Pulsa tab para aceptar el código.*// Validate the format of a spanish phone number (+34 prefix, then 9 digits, starting with 6, 7 or 9). The operation should receive a phone number as parameter and return true if the format is correct, false otherwise.*

También puedes usar el código de abajo.

*// Validate the format of a spanish phone number (+34 prefix, then 9 digits, starting with 6, 7 or 9). The operation should receive a phone number as parameter and return true if the format is correct, false otherwise. *

@GetMapping("/validatephone")

public boolean validatephone(@RequestParam(name = "phone", required = false) String phone) {

if (phone == null || phone.isEmpty()) {

return false;

}

String regex = "^\\+34[679]\\d{8}$";

return phone.matches(regex);

}

Cambia a CopilotDemoApplicationTests.java. Para escribir una prueba unitaria que pruebe la función anterior, añade Pulse Enter. Pulse la pestaña para aceptar el código.*//Write unit test to validate the format of a spanish phone number (+34 prefix, then 9 digits, starting with 6, 7 or 9). The operation should receive a phone number as parameter and return true if the format is correct, false otherwise*

También puedes usar las pruebas unitarias que aparecen a continuación o escribir tus propias pruebas unitarias.

@Test

void validatephone() throws Exception {

mockMvc.perform(MockMvcRequestBuilders.get("/validatephone?phone=+34666666666"))

.andExpect(MockMvcResultMatchers.status().isOk())

.andExpect(MockMvcResultMatchers.content().string("true"));

mockMvc.perform(MockMvcRequestBuilders.get("/validatephone?phone=+34766666666"))

.andExpect(MockMvcResultMatchers.status().isOk())

.andExpect(MockMvcResultMatchers.content().string("true"));

mockMvc.perform(MockMvcRequestBuilders.get("/validatephone?phone=+34966666666"))

.andExpect(MockMvcResultMatchers.status().isOk())

.andExpect(MockMvcResultMatchers.content().string("true"));

mockMvc.perform(MockMvcRequestBuilders.get("/validatephone?phone=+3466666666"))

.andExpect(MockMvcResultMatchers.status().isOk())

.andExpect(MockMvcResultMatchers.content().string("false"));

mockMvc.perform(MockMvcRequestBuilders.get("/validatephone?phone=+346666666666"))

.andExpect(MockMvcResultMatchers.status().isOk())

.andExpect(MockMvcResultMatchers.content().string("false"));

mockMvc.perform(MockMvcRequestBuilders.get("/validatephone?phone=+3466666666a"))

.andExpect(MockMvcResultMatchers.status().isOk())

.andExpect(MockMvcResultMatchers.content().string("false"));

mockMvc.perform(MockMvcRequestBuilders.get("/validatephone?phone=+34866666666"))

.andExpect(MockMvcResultMatchers.status().isOk())

.andExpect(MockMvcResultMatchers.content().string("false"));

}

@Test

void validatephoneNoPhone() throws Exception {

mockMvc.perform(MockMvcRequestBuilders.get("/validatephone"))

.andExpect(MockMvcResultMatchers.status().isOk())

.andExpect(MockMvcResultMatchers.content().string("false"));

}

Abre el Terminal ->Gitbash y ejecuta los comandos de abajo.

cd exercisefiles/springboot/copilot-demo/
mvn test

¡Corre mvn package

¡Corre mvn spring-boot:run

Divide el terminal y ejecuta los comandos de curl de abajo para validar los números de teléfono.

curl -v http:*//localhost:8080/validatephone?phone=+34866666666*
curl -v http:*//localhost:8080/validatephone?phone=+34666666667*
curl -v http:*//localhost:8080/validatephone?phone=+34666666666*

Tarea 4: Validar el formato de un DNI español

Valida el formato de un DNI español (8 dígitos y 1 letra). La operación debe recibir un DNI como parámetro y devolver true si el formato es correcto, false en caso contrario.

Abre DemoController.Java e introduce el prompt . Pulsa la pestaña para aceptar el código.*// Validate the format of a spanish DNI (8 digits and 1 letter). The operation should receive a DNI as parameter and return true if the format is correct, false otherwise.*

También puedes usar el siguiente código

*// Validate the format of a spanish DNI (8 digits and 1 letter). The operation should receive a DNI as parameter and return true if the format is correct, false otherwise. *

@GetMapping("/validatedni")

public boolean validatedni(@RequestParam(name = "dni", required = false) String dni) {

if (dni == null || dni.isEmpty()) {

return false;

}

String regex = "^\\d{8}[A-Z]$";

return dni.matches(regex);

}

Cambia a CopilotDemoApplicationTests.java. Para escribir una prueba unitaria que pruebe la función anterior, añade //Write unit test para validar el formato de un DNI español (8 dígitos y 1 letra). La operación debe recibir un DNI como parámetro y devolver true si el formato es correcto; false si no, pulse Enter. Pulse la pestaña para aceptar el código.

También puedes usar la prueba unitaria que aparece a continuación o escribir tus propias pruebas unitarias.

@Test

void validatedniNoDni() throws Exception {

mockMvc.perform(MockMvcRequestBuilders.get("/validatedni"))

.andExpect(MockMvcResultMatchers.status().isOk())

.andExpect(MockMvcResultMatchers.content().string("false"));

}

Abre Terminal -> Gitbash y ejecuta los comandos siguientes.

cd exercisefiles/springboot/copilot-demo/
mvn test

¡Corre mvn package

¡Corre mvn spring-boot:run

Terminal dividida y circula por > lasegunda terminalcurl -v http:*//localhost:8080/validatedni?dni=12345678C*

Tarea 5: Del nombre del color al código hexadecimal

Basándose en el archivo de colors.json existente bajo recursos, dado el nombre del color como parámetro de camino, devuelven el código hexadecimal. Si no se encuentra el color, devuelva 404

Consejo: Usa TDD. Empieza creando la prueba unitaria y luego implementa el código.

Abre DemoController.Java e introduce el prompt . Pulsa la pestaña para aceptar el código.*// Based on existing colors.json file under resources, given the name of the color as path parameter, return the hexadecimal code. If the color is not found, return 404*

También puedes usar el código below o escribir tu código.

*//Based on existing colors.json file under resources, given the name of the color as path parameter, return the hexadecimal code. If the color is not found, return 404*

@GetMapping("/color/{name}")

public ResponseEntity<String> color(@PathVariable("name") String name) throws IOException {

InputStream inputStream = getClass().getClassLoader().getResourceAsStream("colors.json");

ObjectMapper objectMapper = new ObjectMapper();

*// create JsonNode from mapper*

JsonNode rootNode = objectMapper.readTree(inputStream);

for (JsonNode color : rootNode) {

*// if color name is found, return the hex code*

if (color.get("color").asText().equals(name)) {

return new ResponseEntity<String>(color.get("code").get("hex").asText(), HttpStatus.OK);

}

}

return new ResponseEntity<String>("Color not found", HttpStatus.NOT_FOUND);

}

Cambia a CopilotDemoApplicationTests.java. Para escribir una prueba unitaria que pruebe la función anterior, añade Pulse Enter. Pulse la pestaña para aceptar el código.*//test for /color/{color} endpoint*

Puedes escribir tus pruebas unitarias. Siempre puedes consultar con Copilot si hay código/corrección/prueba unitaria

Abre el terminal -> Gitbash y ejecuta debajo de los comandos. Puedes ver errores de compilación.

cd exercisefiles/springboot/copilot-demo/
mvn test

Pulsa Ctrl + Alt+ I para abrir el chat de Copilot de Github. Copia el mensaje de error y pégalo en la ventana del chat. Copilot sugiere la solución.

Copilot sugiere importar paquetes perdidos con la función de importación. Cópialo y añádelo a tu código. Pulsa Enter y Copilot te sugiere añadir paquetes que faltan. Pulsa la pestaña y acéptalos para añadirlos al código.

Abre Terminal -> Gitbash y ejecuta de nuevo los comandos de abajo.

cd exercisefiles/springboot/copilot-demo/
mvn test

Ejecutar para empaquetar tu aplicación.mvn package

Correr para probarmvn spring-boot:run

Puedes pedirle a tu copiloto que te ayude con el comando de curl para probar tu función.

Haz clic en Dividir terminal y ejecuta el comando curl para probar tu aplicación. (Actualizar el puerto)

Prueba con los colores listados en colors.json archivo

Prueba el color que no aparece en colors.json y ve los resultados

Tarea 6: Creador de chistes

Crear una nueva operación que llame a la API https://api.chucknorris.io/jokes/random y devuelve la broma.

Abre DemoController.Java e introduce el prompt . Pulsa la pestaña para aceptar el código.*// new operation that call the API https://api.chucknorris.io/jokes/random and return the joke*

También puedes usar el código de abajo.

*// new operation that call the API https://api.chucknorris.io/jokes/random and return the joke*

@GetMapping("/joke")

public String getJoke() {

RestTemplate restTemplate = new RestTemplate();

String url = "https://api.chucknorris.io/jokes/random";

ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);

*// parse response to get the value*

ObjectMapper objectMapper = new ObjectMapper();

JsonNode rootNode;

try {

rootNode = objectMapper.readTree(response.getBody());

return rootNode.get("value").asText();

} catch (IOException e) {

return new String("Error getting joke");

}

}

Cambia a CopilotDemoApplicationTests.java. Para escribir una prueba unitaria que pruebe la función anterior, añade Pulse Enter. Pulse la pestaña para aceptar el código.*// Create a unit test for new operation that call the API https://api.chucknorris.io/jokes/random and return the joke*

También puedes añadir la prueba unitaria por debajo o escribir tus propias pruebas unitarias.

@Test

void joke() throws Exception{

mockMvc.perform(MockMvcRequestBuilders.get("/joke"))

.andExpect(MockMvcResultMatchers.status().isOk())

*// check that content is a string*

.andExpect(MockMvcResultMatchers.content().string(Matchers.any(String.class)));

}

Abre el terminal -> Gitbahs y ejecuta debajo de los comandos .

cd exercisefiles/springboot/copilot-demo/
mvn test

Empaqueta tu solicitud. ¡Corre mvn package

¡Corre mvn spring-boot:run

Haz clic en Dividir terminal y ejecuta el comando a: en elsegundo terminalcurl -v http:*//localhost:8080/joke*

Tarea 7: Análisis de URL

Dado un parámetro de consulta de una URL, analizarlo y devolver los parámetros de protocolo, host, puerto, ruta y consulta. La respuesta debería estar en formato Json.

Abre DemoController.Java e introduce el prompt . Pulsa la pestaña para aceptar el código.*//write a code for Given a url as query parameter, parse it and return the protocol, host, port, path and query parameters. The response should be in Json format*

También puedes usar el siguiente código.

*// Given a url as query parameter, parse it and return the protocol, host, port, path and query parameters. The response should be in Json format.*

@GetMapping("/parseurl")

public String parseurl(@RequestParam(name = "url", required = false) String url) throws MalformedURLException {

if (url == null || url.isEmpty()) {

return "url not passed";

}

URL urlObj = new URL(url);

String protocol = urlObj.getProtocol();

String host = urlObj.getHost();

int port = urlObj.getPort();

String path = urlObj.getPath();

String query = urlObj.getQuery();

return "{ \"protocol\": \"" + protocol + "\", \"host\": \"" + host + "\", \"port\": \"" + port + "\", \"path\": \"" + path + "\", \"query\": \"" + query + "\" }";

}

Cambia a CopilotDemoApplicationTests.java. Para escribir una prueba unitaria que pruebe la función anterior, añade Pulse Enter. Pulse la pestaña para aceptar el código.*// Create a unit test for new operation that call the API https://api.chucknorris.io/jokes/random and return the joke*

También puedes añadir las pruebas unitarias a continuación o escribir tus propias pruebas unitarias.

@Test

void parseUrl() throws Exception{

mockMvc.perform(MockMvcRequestBuilders.get("/parseurl?url=https://learn.microsoft.com/en-us/azure/aks/concepts-clusters-workloads?source=recommendations"))

.andExpect(MockMvcResultMatchers.status().isOk())

*// validate json fields*

.andExpect(MockMvcResultMatchers.jsonPath("$.protocol").value("https"))

.andExpect(MockMvcResultMatchers.jsonPath("$.host").value("learn.microsoft.com"))

.andExpect(MockMvcResultMatchers.jsonPath("$.path").value("/en-us/azure/aks/concepts-clusters-workloads"))

.andExpect(MockMvcResultMatchers.jsonPath("$.query").value("source=recommendations"));

}

@Test

void parseUrlNoUrl() throws Exception{

mockMvc.perform(MockMvcRequestBuilders.get("/parseurl"))

.andExpect(MockMvcResultMatchers.status().isOk())

.andExpect(MockMvcResultMatchers.content().string("url not passed"));

}

Abre Terminal -> Gitbash y ejecuta los comandos siguientes.

cd exercisefiles/springboot/copilot-demo/
mvn test

Ejecutar para empaquetar tu aplicación.mvn package

¡Corre mvn spring-boot:run

Divide el terminal y prueba tu aplicación: curl -v http:*//localhost:8080/parseurl?url=https://www.google.com/search?q=chuck+norris*

Tarea 8: Contar palabras

Dada la ruta de un archivo y cuenta el número de ocurrencias de una palabra proporcionada. El camino y la palabra deberían ser parámetros de consulta. La respuesta debería estar en formato Json.

Abre DemoController.Java e introduce el prompt . Pulsa la pestaña para aceptar el código.*//write a code for Given the path of a file and count the number of occurrences of a provided word. The path and the word should be query parameters. The response should be in Json format*

Cambia a CopilotDemoApplicationTests.java. Para escribir una prueba unitaria que pruebe la función anterior, añade Pulse Enter. Pulse la pestaña para aceptar el código.*// Given the path of a file and count the number of occurrences of a provided word. The path and the word should be query parameters. The response should be in Json format.*

Abre Terminal -> Gitbash y ejecuta debajo de los comandos.

cd exercisefiles/springboot/copilot-demo/
mvn test

Ejecutar para empaquetar tu aplicación/mvn package

¡Corre mvn spring-boot:run

Haz clic en Dividir terminal y ejecuta el comando curl para probar tu aplicación.

Rizo http://localhost:8080/countword?path=src/test/resources/test.txt

Tarea 9: Contenedorizar la aplicación

Utiliza el archivo Docker proporcionado para crear una imagen docker de la aplicación. Hay algunos comentarios en el archivo Docker que te ayudarán a completar el ejercicio.

Para construir, ejecutar y probar la imagen docker, también puedes usar Copilot para generar los comandos.

Por ejemplo, crea un archivo DOCKER.md donde puedas almacenar los comandos para construir, ejecutar y probar la imagen de Docker. Verás que Copilot también te ayudará a documentar tu proyecto y comandos.

Ejemplos de pasos a documentar: Construir la imagen del contenedor, ejecutar el contenedor, Probar el contenedor.

Haz doble clic en Docker desde Dekstop e inicia sesión con tu cuenta.

Abre el archivo Docker en código Visual Studio, añade el código de abajo y guarda el archivo.

*# Build a java application image based on openjdk 17 and run it on port 8080*

FROM openjdk:17-jdk-alpine

EXPOSE 8080

COPY target*/*.jar app.jar*

*ENTRYPOINT ["java","-jar","/app.jar"]*

Pulsa Ctrl + Alt +I para abrir la ventana de chat de GitHub Copilot. Pregunta a Copilot abajo. Copilot proporciona pasos para contenerizar la aplicación.

how to build, run and test the docker image with the Dockerfile provided to create a docker image of the application

Sigue elprimer paso: construye la imagen de Docker. Abre Terminal -> Gitbash y ejecuta el comando para construir la imagen Docker.

cd exercisefiles/springboot/copilot-demo/
docker build -t my-application .

Después de crear la imagen, puedes ejecutarla usando el comando docker run.

docker run -p 8080:8080 my-application

Una vez que el contenedor Docker esté en funcionamiento, puedes probarlo enviando peticiones a tu aplicación.

curl <http:*//localhost:8080/hello?key=world*

para proteger tu código y datos.