Uno de los procesos asíncronos más comunes son las peticiones de datos desde una API. Para esto, Angular posee su propio cliente HTTP destinado a cumplir con el propósito llamado HttpClientModule.
Consumo de API con Angular
Paso 1: Comienza importando el módulo HttpClientModule, en el módulo principal de tu aplicación desde @angular/common/http.
Paso 2: Crea un servicio para realizar todos los llamados a una API que necesites. En este servicio tienes que importar el cliente HTTP de Angular y crear un método por cada endpoint para el que necesites efectuar una petición.
El método ngOnInit() es el lugar apropiado para los llamados asincrónicos, recuerda que no es buena práctica hacerlo en el constructor.
Todo el cliente HTTP de Angular está basado en Observables, por lo tanto, es recomendable suscribirse al método del servicio para obtener los datos cuando la API responda.
TIP: No es necesario que hagas un .unsubscribe() luego del llamado a la API. Angular ya lo hace por ti, cuando usas su cliente HTTP.
Jugando con observables
Si no tienes a tu disposición una API Rest que devuelva datos para tu aplicación, voy a enseñarte un pequeño truco para que aun así puedas continuar con tu desarrollo con un mock de datos.
Un Mock es una simulación de los datos reales que devolverá la API, salvo que esta vez obtendrás dichos datos desde el servicio a través de un Observable.
// services/api.service.tsimport{Observable,of}from'rxjs';@Injectable({providedIn:'root'})exportclassApiService{constructor(){}getProducts():Observable<Producto[]>{returnof([{id:1,name:'Automobil de juguete',precio:100,image:'https://static3.depositphotos.com/1000865/118/i/600/depositphotos_1183767-stock-photo-toy-car.jpg'},{id:2,name:'Muñeca de trapo',precio:180,image:'https://kinuma.com/8869-home_default/muneca-de-trapo-mali.jpg'},{id:3,name:'Pelota de futbol',precio:120,image:'https://media.istockphoto.com/photos/soccer-ball-isolated-3d-rendering-picture-id1257575611?k=20&m=1257575611&s=612x612&w=0&h=g530fFJspT42xFGY7HycLvpBKLXpJ2XAkKCRyY-SK80='},{id:4,name:'Castillo',precio:220,image:'https://i.imgur.com/44nzvkQ.jpg'}])}}
En el ejemplo anterior, desde RxJS se está importando "Observable" y "of" que te ayudarán a preparar tus datos.
Con Observable puedes tipear la respuesta de tus métodos de la siguiente manera Observable<Producto[]> para indicar que este devolverá un observable con un array de productos. La función of convierte lo que sea que le pongas dentro (un objeto, un array, un número, etc), en un observable.
De esta forma, sin tener una API real, puedes simular la interacción de tu componente con datos provenientes de una proceso asincrónico.
En el servicio:
1- crear el servicio desde la terminal
2- importar el modulo HttpCliente en el servcio e inyectar e servicio en el constructor.
3 en el servicio se crea el metodo para hace la petición de la API:
return this.http.get<Product[]>('https://fakestoreapi.com/products');
En el componente:
1- importar el servicio
2- inyectar el servicio en el constructor: private productsService: ProductsService
3- crear el metodo en el ngOnInit
this.productsService.getAllProducts()
.subscribe(data => {
this.products = data;
Por ultimo ya estaba creado un array tipado y se debe ajustar los campos con los campos de la API.
Gracias UwU
Poner atención al tercer paso donde TIPAMOS el tipo de datoq ue nos regresa el método get()
Chicos, hay una extension llamada JSON Viewer que les va a permitir ver los datos de un API de manera organizada, de lo contrario cuando abran la url no van a entender nada
¡Excelente aporte! Gracias
muchas gracias por el aporte
Para la parte de tipado otra forma sería tomar la respuesta que nos da la API y crear una interfaz a partir de esta data. Para crear la interfaz uso https://app.quicktype.io/.
Una locura la manera en la que angula de manera indirecta le enseña a los desarrolladores algo de arquitectura.
crazy 👽
Excelente explicación, y muy buen curso, explicas muy bien Nicolas!
Deberías actualizar tu curso de Angular 8 en ese me perdí un poco :(
Les recomiendo guardar la url de la API en una variable:
Acaso hay algo mas hermoso que nico explicando extraordinariamente las cosas?
<3 _ <3
Si,, cuando las entiendes!
Maravillosa clase. Todo claro y bien explicado.
El manejo de las peticiones a API suele ser algo complejo y en Angular se ve muy fácil de manejar.
El mejor momento para ejecutar código asíncrono es en:
ngOnInit()
entonces no se puede también llamar en el constructor?
@Diego35, en el constructor no es recomendable hacer peticiones asincrónicas, es recomendable siempre hacerlo en el ngOnInit()
cool, me ha encatado esto!
Sí, pienso lo mismo! Me encantó esta clase sobre como obtener datos de una API.
un Observable es un patrón de diseño que donde hay un sujeto que se suscribe a unos observadores.
++Observable++: flujo de datos, o coleccion de eventos, coleccion de elementos asincronas
++Observers++: funciones que estan escuchando ese flujo de datos (calback). Tambien es un Patron e igual Patron Iterador(Funcion map en programacion funcional https://www.educative.io/edpresso/how-observer-and-iterator-patterns-work-in-rxjs)
++**Sujeto: **++ sirve para distribuir varios Observers a la vez
++Subscripcion:++ representa la ejecucucion de un Observable
Ventajas de un Observable Vs Promesa
promesa: 1 sola respuesta y NO es cancelable
Observable: flujo de respuestas, SI es cancelable
Otra manera de manejar una subscripción es la siguiente:
el complete es la función que siempre se ejecuta. Ya sea que se reciba algo por la suscripción. O que caiga un error. Después de una de esas dos siempre se ejecuta el complete().
Que genialidad la forma en la que uso la interfaz para estandarizar la data
Que buena clase, nico explica muy bien, igual a repasar y practicar
Excelente explicación :).
Excelente clase, no entendia muy bien el modulo de http
Excelente clase ⭐
Al finalizar esta leccion el video se salta 4 lecciones, deberias seguir en la leccion 15-
Es cierto me paso lo mismo.
No comprendo que hace el suscribe y el observable, y como funcionan.
un Observable es un patrón de diseño que donde hay un sujeto que se suscribe a unos observadores.
Observable: flujo de datos, o coleccion de eventos, coleccion de elementos asincronas
Observers: funciones que estan escuchando ese flujo de datos (calback). Tambien es un Patron e igual Patron Iterador(Funcion map en programacion funcional https://www.educative.io/edpresso/how-observer-and-iterator-patterns-work-in-rxjs)
**Sujeto: ** sirve para distribuir varios Observers a la vez
Subscripcion: representa la ejecucucion de un Observable
Ventajas de un Observable Vs Promesa
promesa: 1 sola respuesta y NO es cancelable
Observable: flujo de respuestas, SI es cancelable