Para interactuar con un servicio web que consiga datos para nuestra aplicación vamos a utilizar peticiones HTTP asíncronas, también llamadas peticiones AJAX.

Las peticiones se realizan usando la clase HttpClient de Angular, la cual es entregada como un Servicio a través de la inyección de dependencias.

Para poder hacer pruebas hay diversas opciones; en este caso haremos uso del módulo JSON-Server, que simula un entorno donde estamos conectados a algún tipo de backend. Esto nos devolverá un Observable, al cual podremos suscribirnos.

JSON Server

JSON-Server es un falso REST API, apropiado para crear prototipos rápidamente. Permite hacer uso de peticiones tipo GET, POST, PUT, PATCH y DELETE de forma local. Además podremos acceder al listado de objetos, buscar por ID o por alguno de sus campos, filtrar, ordenar, añadir rutas personalizadas, etc.

Página web: https://www.npmjs.com/package/json-server

Para instalarlo, en una Terminal y dentro de la carpeta de nuestro proyecto, ejecutamos el comando:

npm i json-server

Creamos el archivo restData.js, que va a contener nuestros datos, en la carpeta del proyecto:

Imagen 1: restData.js

JSON-Server puede trabajar con archivos JSON o JavaScript. Si utilizamos JSON entonces su contenido será modificado para actualizar cambios hechos por el cliente. Para este ejemplo vamos a trabajar con un archivo JavaScript de manera que al restaurar el proceso los datos vuelvan a su estado original.

Vamos a crear un script para ejecutarlo. Para añadir el script de ejecución, editaremos el archivo package.json en la carpeta del proyecto:

Imagen 2: package.json
"serverAPI": "json-server --port 5000 --watch restData.js"

Para inicializarlo, en la Terminal ejecutamos el comando:

npm run serverAPI

Para acceder, nos conectaremos a: http://localhost:5000/ (podemos cambiar el puerto por cualquier otro, por defecto es el puerto 3000). Debemos tener el servidor siempre en ejecución.

HttpClient

Para poder hacer uso de estas características en Angular, hay que configurar el archivo src/app/app.module.ts:

Imagen 3: app.module.ts

Para gestionar la funcionalidad HTTP creamos un nuevo servicio. En una Terminal ejecutamos el comando:

ng g service --skip-tests=true services/tarea

En el archivo src/app/services/tarea.service.ts, creamos una propiedad privada con la URL del servidor. Además, todo Servicio necesita el decorador @Injectable:

Imagen 4: tarea.service.ts

Importamos todo lo que vamos a necesitar y declaramos HttpClient en el constructor para poder hacer uso de la funcionalidad HTTP:

  • import { HttpClient } from ‘@angular/common/http’;
  • import { Observable } from ‘rxjs’; nos va a facilitar el uso del método subscribe, que nos permitirá ver tanto la respuesta a la petición como cualquier posible error.
  • import { HttpHeaders } from ‘@angular/common/http’; para modificar las cabeceras y así indicar el tipo de objeto que estamos enviando para actualizar (PUT) o crear (POST).
Imagen 5: tarea.service.ts

Peticiones HTTP

El primer paso va a ser crear el método getTareas que devolverá un Observable de tipo Tarea[ ] y, a través de una petición GET, conseguirá todas las Tareas:

getTareas(): Observable<Tarea[]> {
    return this.http.get<Tarea[]>(this.apiUrl);
}

Por otro lado, en el Componente src/app/components/tareas/tareas.component.ts, importamos el Servicio y lo inyectamos en el constructor para poder hacer uso del mismo en nuestro componente:

Imagen 6: tareas.component.ts

Y nos suscribimos al método getTareas que acabamos de crear:

ngOnInit(): void {
  this.tareaService
    .getTareas()
    .subscribe((tareas) => (this.tareas = tareas));
}

Para los métodos deleteTarea (DELETE) y updateTareaRecordatorio (PUT) habrá que pasar por parámetro el «id» de la Tarea para eliminarla o actualizarla.

En los métodos updateTareaRecordatorio (PUT) y addTarea (POST) tenemos que establecer las cabeceras, que indicarán el tipo de objeto que enviaremos, bien para actualizar o bien para crear.

De esta forma tendríamos nuestro servicio terminado:

Imagen 7: tarea.service.ts

Finalmente, completamos nuestro Componente para tener toda la funcionalidad de la aplicación implementada:

Imagen 8: tareas.component.ts
Imagen 9: Lista de tareas App

  • Autor: Borja Viejo Cabanillas
  • Curso: Desarrollo Web Full Stack, MultiCloud y Multiplataforma
  • Centro: Tajamar
  • Año académico: 2021-2022

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.