Consumindo APIs com Angular II

Gustavo Barska
Nerdzão/Nerdgirlz
Published in
3 min readJul 9, 2019

Nesse segundo artigo vamos utilizar o módulo HttpClientModule do Angular, que será responsável pelas requisições Http (Get, Post, Put, Delete). Através dele, nossos componentes vão consumir os endpoints da nossa API.

Para isso precisaremos importar o serviço core do angular, responsável por requisiçoes http:

app.module.ts

Vamos importar o módulo HttpClientModule

import { HttpClientModule } from '@angular/common/http';

Depois vamos adicionar sua referência no array imports:

imports: [BrowserModule,AppRoutingModule,HttpClientModule],

Agora vamos criar um novo arquivo para o model que irá representar a nossa entidade Hero

/shared/models/hero-model.ts

Para facilitar a nossa vida, vamos criar um outro arquivo para adicionar um serviço a nossa aplicação que vai conter os métodos de request http

/shared/services/herohttp-service.ts

Vamos precisar importar nossa model, a API core HttpClient e adicionar o decorator Injectable pois nosso serviço será injetado.

import { HttpClient } from '@angular/common/http';
import { Hero } from '../models/hero-model';
import { Injectable } from '@angular/core';

Vamos criar um serviço chamado HeroHttpService:

@Injectable({providedIn: 'root'})export class HeroHttpService {}

E em seguida vamos criar uma variável para armazenar o endpoint da nossa API:

private endpoint = 'https://demo8672629.mockable.io/heroes/';

Por enquanto nosso serviço está assim:

Agora que nós já temos a estrutura do nosso serviço, vamos adicionar o HttpClient via injeção de dependência:

constructor(private http: HttpClient) {}

Pronto, com esse setup já podemos iniciar a construção dos métodos (Get, Post, Put, Delete).

Vamos adicionar o metodo get e nele vamos utilizar nossa instância do HttpClient informando os parametros: tipo de resposta que nesse caso será <any> e a URL (this.endpoint)

get(){return this.http.get<any>(this.endpoint);}

Vamos repetir o mesmo processo para os métodos post, delet e put, alterando alguns parametros:

Nosso método post precisa receber um objeto Hero para enviar a API

post(hero: Hero) {return this.http.post<any>(this.endpoint,hero);}

OBS: Note que o método update é exatamente a mesma coisa com uma pequena diferença

update(hero: Hero) {return this.http.put<any>(this.endpoint, hero);}

e por último adicionamos o método delete:

delete(){return this.http.delete(this.endpoint);}

Pronto, nosso serviço finalizado está da seguinte forma:

Vamos começar a editar nossos componentes, iniciando pelo componente Card:

card.component.ts

Primeiro precisaremos adicionar um array para armazenar nossos heróis:

heroesArray: Hero[] = [];

Agora vamos importar nosso serviço herohttp-service.ts:

import { HeroHttpService } from '../shared/services/herohttp-service';

e adicionar uma injeção de dependência no nosso construtor:

constructor(private heroHttpService: HeroHttpService) { }

Agora sempre que o nosso componente for carregado, queremos que ele receba via request Get da nossa API uma lista de todos os heróis cadastrados, para isso vamos utilizar um dos Hooks do angular o ngOnInit()

O ngOnInit é o método que é chamado sempre que nosso componente é iniciado (Obs: após o construtor).

Então dentro do ngOnInit vamos chamar o metodo get do nosso serviço e adicionar o array de resposta na nossa variável heroesArray

O método heroHttpService.get(), nos devolve um observable. Desta forma podemos utilizar o subscribe para adicionar um listener na request enviada ao servidor e saber se o request foi realizado com sucesso ou se tivemos algum erro.

Após receber o retorno da API, vamos preencher nosso array de heróis com o valor recebido e em seguida imprimir no console.

Por último, vamos precisar alterar o template do component card novamente para replicar nossos cards para cada herói do array:

Primeiro vamos adicionar um ngFor e em cada iteração avariável hero receberá os dados de um herói diferente do array

<div *ngFor="let hero of heroesArray" class="card hero-card m-4">

Depois, vamos utilizar string interpolation para plotar as informaçoes dos heróis nos parágrafos:

<h5 class="card-title">{{hero.superHeroName}}</h5>

O arquivo finalizado ficará assim :

Para encerrar, vamos consertar nosso avatar. Primeiro vamos alterar o conteúdo da nossa variável heroAvatar:

card.component.ts

heroAvatar = 'http://localhost:4200/assets/img/';

Depois vamos alterar nosso template novamente:

card.component.html

<img class="card-img-top rounded-circle img-background align-items-center" alt="Card image cap" [src]="heroAvatar+hero.image">

Pronto, nossa aplicação já está pronta para consumir a API.

Segue o link para o projeto completo até aqui no Github:

https://github.com/gbarska/meetup-itau-angular-heroes.git

Nesse artigo mostramos apenas a implementação do método GET mas caso queira conferir o projeto CRUD completo com os métodos PUT, POST, DELETE, veja no repositório abaixo:

https://github.com/gbarska/angular-heroes-medium2

--

--