Juan Esteban Orozco Botero
para generar el servicio de catogories:
ng g s core/services/categories
¿Cómo crear un servicio en Angular para conectar con una REST API?
Para establecer una conexión con una REST API desde Angular, primero es imprescindible tener claro cómo funciona el protocolo de comunicación y aprovechar las herramientas que Angular ofrece. En este caso, nos centramos en la creación de un servicio que permita listar, crear y actualizar categorías.
Paso 1: Importar los módulos necesarios
Primero, asegúrate de tener el módulo de HTTP importado en tu aplicación Angular, utilizando el paquete de Angular común:
import { HttpClient } from '@angular/common/http';
La inyección del cliente HTTP se realiza dentro del constructor del servicio, permitiendo realizar solicitudes HTTP a la API.
Paso 2: Configurar las variables de entorno
Es fundamental manejar variables de entorno para definir la URL de la API. En Angular, esto suele hacerse mediante un archivo environment:
import { environment } from '../environments/environment';
Este archivo proporciona la configuración necesaria para conectar con la API externa, incluyendo la URL base, llaves y otros parámetros.
Paso 3: Definir el modelo de datos
Asegúrate de tener un modelo que represente la estructura de datos con la que trabajarás. En este tutorial, creamos un modelo simple de 'Categoría':
export interface Category { id: string; name: string; image: string; }
Paso 4: Implementar los métodos del servicio
Implementa los métodos que interactuarán con la API. A continuación, se presenta un ejemplo básico de los métodos más comunes como 'get', 'post' y 'put':
Obtener todas las categorías
getCategories(): Observable<Category[]> { return this.http.get<Category[]>(`${environment.apiUrl}/categories`); }
Crear una categoría
createCategory(data: Partial<Category>): Observable<Category> { return this.http.post<Category>(`${environment.apiUrl}/categories`, data); }
Actualizar una categoría
updateCategory(id: string, data: Partial<Category>): Observable<Category> { return this.http.put<Category>(`${environment.apiUrl}/categories/${id}`, data); }
¿Cómo conectamos el formulario con la API?
Integrar el formulario en Angular para que interactúe con los métodos del servicio es crucial para la funcionalidad de la aplicación.
Inyectar el servicio en el componente
Primero, importa e inyecta el servicio en el componente:
import { CategoryService } from '../core/category.service'; constructor(private categoryService: CategoryService) {}
Vincular el formulario HTML con la lógica
Asegúrate de asociar los eventos del formulario HTML con la lógica del componente:
<form (ngSubmit)="save()"> <input name="name" [(ngModel)]="category.name" required> <input name="image" [(ngModel)]="category.image" required> <button type="submit">Guardar</button> </form>
Implementar la lógica para guardar los datos
Dentro del componente, implementa la función 'save' que activará el método del servicio para crear o actualizar datos:
save() { if (this.form.valid) { this.categoryService.createCategory(this.form.value).subscribe((response) => { // Lógica después de guardar this.router.navigate(['/admin/categories']); }); } else { console.error('Formulario no válido'); } }
¿Qué debemos tener en cuenta al realizar peticiones?
Durante el proceso de desarrollo, debes validar tanto en el frontend como en el backend. Usamos markAllAsTouched en Angular para marcar campos de formulario y advertir al usuario sobre errores.
Además, la API debería responder con mensajes claros cuando un campo no sea válido. Angular podría mostrar mensajes de errores en el frontend basándose en las respuestas del backend.
¡Sigue explorando y experimenta! Practica listando las categorías en un componente con una tabla y prueba la funcionalidad de creación. Una vez listo, pasa al siguiente nivel aprendiendo cómo gestionar el almacenamiento de imágenes con servicios en la nube. ¡Un fascinante mundo te espera!
Comparto la solución al reto
Juan Esteban Orozco Botero
para generar el servicio de catogories:
ng g s core/services/categories
José Nicolás Aristizabal Ramírez
Buenas tardes, la API no funciona
Luis Francisco Montero
Ya está funcional la API en la sección de recursos de la clase. :D
Santiago Lopera Naranjo
Al día de la publicacion de este comentario. (20/sep/2022) La API del curso no esta funcionando, pero Platzi ya tiene su propia API con la que deberías de continuar sin problema: https://fakeapi.platzi.com/doc/categories
#nucaparesdeaprender.
Enmanuel Josue Sarmiento Benitez
Api caida
Nicolas Molina
ProfesorHola, sentimos los problemas causados y la demora en responder, ya la API está al aire de nuevo.
!api
Enmanuel Josue Sarmiento Benitez
Muchas gracias buen hombre, ahora a terminar este curso que lo había dejado pendiente
Adriana Cardoso
No esta funcionando La API: https://store.nicobytes.site/api
Pablo Antipan Quiñenao
Hola! Gracias por el feedback! Si alguna vez requires contactar el team, puedes escribir al correo team@platzi.com
Saludos!
Nicolas Molina
ProfesorHola, sentimos los problemas causados y la demora en responder, ya la API está al aire de nuevo.
!api
Juan Carlos Castillo Gómez
NO SIRVE LA API: https://store.nicobytes.site/api
Carlos Eduardo Gomez García
¡Hola! Muchas gracias por el reporte, se lo pasamos al team y ya debería estar funcionando nuevamente la API! ¿Puedes probarlo? :D
Nicolas Molina
ProfesorHola, sentimos los problemas causados y la demora en responder, ya la API está al aire de nuevo.
!api
Byron Mesias Cueva Cabrera
Reto cumplido:
Nicolas Molina
ProfesorSuper, te recomiendo poner una clase a las images con un tamaño máximo de ancho
Edgar Benitez
Es muy probable que la rest este caída.
https://store.nicobytes.site/api/categories/
Si la pueden revivir me encantaría. Esta lanzando error 500
Enmanuel Josue Sarmiento Benitez
Hoy 17 días después a tu comentario sigue la api caida
LUIS DAVID MEDINA GAVIRIA
20 dias despues y sigue caida jajajaja
David Trespalacios
Una duda sobre environment.ts ¿Al construir nuestra app con ng build, este archivo queda encriptado o algo así? o queda accesible al mundo?
Massimo Di Berardino
Hola David, las variables de entorno deberían quedar en el servidor no ir como archivo en el front
Juan Carlos Pinzón
Pues sí quedan accesibles, dificil de encontrar, pero ahí están. La idea con este archivo es que ahí se coloquen constantes que podrán usar usadas en cualquier parte de la aplicación. Sin embargo, no es para colocar información delicada como llaves, contraseñas o cosas por el estilo, esto se lo debemos dejar al backend.
environment.ts => constantes simples, comunes no criticas para ser reutilizadas en la aplicación.
Carlos Alejandro Hernández Mejía
Comparto mi solución usando matTable y matDialog para mostrar los formularios.
Jimi Joe Torrico Peredo
jun 4 sigue caida la API Ayuda por favor
Maikol Arley Cucunuba Salazar
Estoy intentando acceder el dia de hoy pero sale: "Internal server error"
Jia Wang
Hola amigo, la API se migró tal cómo dice en: https://platzi.com/clases/2027-angular-forms/58595-recomendaciones/, ahora es la api definida en https://fakeapi.platzi.com/ con la url de API de https://api.escuelajs.co/api/v1/
Un detalle que he notado al migrar el proyecto a la nueva API es que el modelo de producto ha cambiado: ahora _id es id, name es title e image es un array llamado images. Por lo que he tenido que cambiar las referencias en los componentes product-detail, product y products, quizás sería interesante señalar también esto en la página de recomendaciones!
Jorge Quijano
día de este comentario. (16/Ene/2023) La API del curso NO esta funcionando.
Jia Wang
Hola amigo, la API se migró tal cómo dice en: https://platzi.com/clases/2027-angular-forms/58595-recomendaciones/, ahora es la api definida en https://fakeapi.platzi.com/ con la url de API de https://api.escuelajs.co/api/v1/
Un detalle que he notado al migrar el proyecto a la nueva API es que el modelo de producto ha cambiado: ahora _id es id, name es title e image es un array llamado images. Por lo que he tenido que cambiar las referencias en los componentes product-detail, product y products, quizás sería interesante señalar también esto en la página de recomendaciones!
Alejandro Valenzuela
No tenia "Partial<>" lo que hacia era poner opcinal al id(y otros campos a veces) para que no me genere error
export interface Category { _id?: string; name: string; image: string; }
Gracias Nico!
Jheisson Fernando Rojas Rendon
API dañada no funciona.
Seba Cardoso
Este curso ya quedo obsoleto actualmente. Es muy viejo.
Cesar González Caballero
Me he tardado mas en hacer que funcione su codigo por que todo esta desactualizado qu eel tiempo real que es el curso :/
Jorge Morales
Recordar que ahora vamos a usar la API https://fakeapi.platzi.com/,
Patrick Feeney
Deberian actualizar la descripcion del video mencionando el cambiod eapi
Maikol Arley Cucunuba Salazar
La api no esta funcionando, arroja error: "Internal server error"
Nicolas Molina
ProfesorHola, sentimos los problemas causados y la demora en responder, ya la API está al aire de nuevo.
!api
Nicolas Molina
ProfesorHola tienes razón hemos movido esta API conocida como https://store.nicobytes.site/api. Y se ha sido trasladada a https://fakeapi.platzi.com/, la cual cuenta con las mismas características, una mejor documentación y soporte, con esto podrás continuar el curso
Carlos Eduardo Mayorga Rodríguez
Buenos días, gracias Nicolás por la respuesta. Ahora tengo un problema diferente, me indica que hay un problema de CORS, al parecer desde el API no reciben las solicitudes desde localhost. En el curso ya se trato el tema, pero dado que la API es para pruebas de los estudiantes, creo que deberían permitir todos los orígenes. Por favor Nicolás si me puede orientar en los cambios para poder continuar con el curso. Igualmente quisiera saber cual es el curso anterior a este, donde hayan instalado Material y se vea una explicación al respecto. Yo venía realizando los cursos en orden, pero al llegar a este hay muchas cosas que faltan, descargue el repositorio para hacer el curso, pero quisiera ver los temas que tengo perdidos.
Renzo Tincopa Barreto
Hola Carlos
Carlos, ¿podrías agregar imágenes de lo que está sucediendo, por favor?
Quedo atento para ayudarte :green_heart:
Rodrigo Josue Goitia Quiroga
Hola Carlos para tu problema de CORS te dejo la siguiente clase de otro curso de Angular que te explica como solucionarlo:
En caso de que eso no sea una solución, compártenos imágenes y la versión de Angular que estás utilizando.
Sobre tu otra pregunta, el curso que es anterior a este, donde se avanzó el proyecto, es el Curso de Progressive Web Apps con Angular 8