Que tal aprender a utilizar o protocolo HTTP para integrar e comunicar a sua aplicação Angular a um back-end? A Nayanne Batista te dá as boas-vindas a mais um curso de Angular.
Audiodescrição: Nayanne Batista se identifica como uma mulher de pele morena. Tem olhos castanhos e cabelos longos e lisos castanho-escuros. Está com uma blusa laranja. Ao fundo, estante de livros com iluminação azulada.
Neste curso, vamos utilizar o projeto Indexa, a nossa agenda de contatos. Você vai entender como utilizar o HttpClient
do Angular para fazer requisições do tipo HTTP, utilizando os métodos GET
, POST
, PUT
, DELETE
e, assim, conseguir enviar e obter dados do servidor.
Para isso, você também vai entender como funcionam os observables (observáveis) e o que é necessário fazer para obter informações deles.
Na parte de roteamento, você vai entender como passar parâmetros nas rotas. Além disso, vamos utilizar boas práticas e fazer algumas melhorias no final do projeto, como, por exemplo, a componentização e a reutilização de componentes em diferentes partes da aplicação.
Para fazer este curso, você precisa ter conhecimento prévio sobre HTML e CSS, assim como ter uma base de TypeScript. Também é preferível ter feito os cursos anteriores, onde já vinhamos desenvolvendo o projeto que vamos finalizar neste curso.
Se você aceita este desafio, então venha conosco mergulhar no Angular!
Que bom que você está aqui conosco para continuar o desenvolvimento do projeto Indexa, a nossa agenda de contatos. O foco neste curso será aprender como fazer a comunicação da nossa aplicação Angular com o back-end. E como podemos fazer isso?
Será que precisamos aprender uma linguagem back-end, como Java, por exemplo, e desenvolver uma API para só então entender como funciona essa integração? A boa notícia é que não. Esse cenário é tão comum que já existem ferramentas que nos auxiliam com isso.
No mercado de trabalho, é muito comum você, como pessoa desenvolvedora front-end, e o seu time estarem desenvolvendo a aplicação enquanto o time de back-end está simultaneamente desenvolvendo a API. Por isso, muitas vezes, você não tem uma API pronta para fazer essa integração. Nesse caso, vamos utilizar uma ferramenta chamada JSON Server.
Para isso, vamos acessar o navegador e buscar por "json-server". O primeiro link que aparece é a documentação do JSON Server, onde temos algumas informações, como as versões e o comando para instalar, que é o npm i json-server
.
O segundo link que aparece na pesquisa é o do GitHub do JSON Server, que também tem algumas informações. Inclusive, no canto superior direito, há uma seção de About (sobre), que numa tradução livre diz: "Obtenha uma API REST fake com zero código em menos de 30 segundos". Será que conseguiremos fazer isso? Vamos lá.
Vamos acessar o VS Code. Como teremos tanto o back-end quanto o front-end na sua máquina, vamos criar uma pasta reservada para o back-end para conseguir executar a API.
No menu lateral esquerdo, na parte superior, vamos clicar nos três pontinhos, em "New Folder", na raiz do projeto. Assim, poderemos criar uma pasta chamada "backend".
Agora, vamos abrir o terminal com o atalho "Ctrl + J" para entrar nessa pasta. Atualmente, o caminho mostra que estamos na pasta 3655/indexa
. Para conseguir acessar essa pasta, vamos digitar cd backend/
. Se você começar a digitar e teclar "Tab", ele autocompleta.
cd backend/
Agora, sim, estamos na pasta "backend". Dentro dessa pasta, vamos digitar o comando npm init -y
. Esse comando vai criar um arquivo de configuração, um package.json
, dentro da pasta "backend".
npm init -y
Ao acessar esse arquivo, já temos algumas configurações. Criamos esse arquivo para conseguirmos modificar um script para iniciar essa aplicação.
package.json
:
{
"name": "backend",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
Agora, vamos instalar o JSON Server. O comando para isso é npm i
ou npm install
seguido da flag -g json-server
para instalá-lo de forma global.
É importante que você utilize a mesma versão que vamos utilizar para evitar algumas incompatibilidades e possíveis erros no código. Por isso, vamos passar também a versão especificada, que é @0.17.4
.
npm i -g json-server@0.17.4
Depois de apertar "Enter" e baixar essa ferramenta, podemos conferir a versão digitando json-server -version
.
json-server -version
Aparecerá a versão que foi baixada:
0.17.4
Agora, vamos alterar os scripts
do package.json
. Onde está escrito test
na linha 7, vamos mudar para start
. Vamos apagar o conteúdo que está entre aspas duplas na linha 7 e digitar outro comando: json-server --watch db.json --port 3000
.
package.json
:
{
"name": "backend",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "json-server --watch db.json --port 3000"
},
"keywords": [],
"author": "",
"license": "ISC"
}
Para executar essa API, teríamos que digitar todo esse comando. Para facilitar e conseguirmos rodar essa API só com o comando npm start
, fizemos essa mudança nesse script.
O que esse comando significa? Ele indica que essa ferramenta vai ficar monitorando o arquivo db.json
na porta 3000
. Ainda precisamos criar esse arquivo db.json
.
Acessando o menu lateral esquerdo, dentro da pasta "backend", vamos clicar com o botão direito e escolher "New file". Vamos nomeá-lo como db.json
.
Será nesse arquivo onde criaremos os endpoints da API. Nele, vamos colar as informações de dois contatos:
db.json
:
{
"contatos": [
{
"nome": "Maria",
"telefone": "99 99999999",
"email": "maria@email.com",
"aniversario": "01/06/1995",
"redes": "",
"observacoes": "",
"id": 1
},
{
"nome": "João",
"telefone": "88 88888888",
"email": "maria@email.com",
"aniversario": "06/01/1990",
"redes": "",
"observacoes": "",
"id": 2
}
]
}
Temos o endpoint contatos
, que é um array. E esse array contém dois objetos com dois contatos. Por isso, possuem todas aquelas propriedades que os contatos têm: nome
, telefone
, email
, id
, entre outros. Vamos formatar o arquivo com o atalho "Alt + Shift + F".
Agora, abriremos o terminal novamente com o "Ctrl + J" e executaremos a API para verificar se está tudo correto. Basta digitar npm start
ainda dentro da pasta "backend".
npm start
Press CTRL-C to stop
Watching db.json…
Logo abaixo, aparece o endpoint http://localhost:3000/contatos
. Se o apertamos com "Ctrl + clique", vai abrir o endpoint os dois contatos que salvamos.
Conseguimos instalar essa ferramenta e configurar a API. O próximo passo é entender as regras para que consigamos nos comunicar com essa API.
Agora que já configuramos a API, vamos entender como o Angular utiliza o HTTP para realizar a comunicação com o back-end. Se você ainda não ouviu falar sobre HTTP, esse é um protocolo muito conhecido de comunicação, envio e recebimento de dados na internet.
Existem vários protocolos, mas o HTTP é um dos mais utilizados. Ele utiliza o modelo cliente-servidor, onde o cliente, normalmente o navegador, solicita informações e recursos e o servidor envia essas informações.
No VS Code, vamos acessar dentro da pasta "src > app > services", o arquivo contato.service.ts
. Atualmente, estamos utilizando a abordagem do local storage no projeto. Mas, pensando em evoluir o projeto, é ideal que modifiquemos essa estratégia e utilizemos algo que esteja mais alinhado com as práticas do mercado, do mundo real.
Por isso, vamos refatorar o serviço e, ao invés de local storage, vamos utilizar o HTTP.
Na classe ContatoService
, vamos excluir as linhas 9 a 11, dos contatos
. Também vamos excluir todo o conteúdo dentro do construtor, das linhas 10 a 18.
Para parar o erro nos métodos, vamos apagar a linha 12, que era todo o conteúdo de obterContatos()
e 16 e 17, que é todo o conteúdo de salvarContato()
.
contato.service.ts
:
export class ContatoService {
constructor() {
}
obterContatos() {
}
salvarContato(contato: Contato) {
}
}
Como o Angular utiliza esse protocolo nas suas aplicações? No Angular, utilizamos o serviço chamado HttpClient
. Esse serviço é injetado no construtor do service e, através dele, temos acesso a todos os métodos do protocolo HTTP.
Para fazer isso, no constructor()
, vamos criar uma propriedade privada com o private
, que se chamará http
e será do tipo HttpClient
. Vamos importá-lo na linha 3 do pacote common/http
e agora temos acesso a todos os métodos desse serviço.
Dentro do método obterContatos
na linha 13, vamos digitar return this.http
. Quando digitamos ponto novamente, já aparecem vários métodos, que são os verbos HTTP que podemos utilizar para obter informações ou enviar, dependendo do caso, dessa API.
Para obter os contatos, queremos receber uma lista desses contatos. Por isso, o método que vamos utilizar é o get
. Então, vai ficar this.http.get
. Em seguida, vamos tipar esse método como array de Contatos
. Utilizamos o generics (<>
) e passamos Contato[]
.
Tipagens, uso de generics e modificadores de acesso como
private
, são recursos do TypeScript, que é a linguagem que o Angular utiliza por padrão. Se você tem dúvida sobre esses recursos, vamos deixar para você sugestões de ótimos cursos que temos na plataforma sobre esse assunto.
Antes de continuar no método obterContatos
, para conseguirmos pegar essa lista de contatos, precisamos indicar de onde queremos que essa informação venha. Por isso, dentro da classe, mas fora dos métodos, na linha 10, vamos criar uma constante com private readonly
e o nome API
.
Essa API
vai representar o caminho, o localhost
na porta 3000 que configuramos. Ela começa com http://localhost:3000
e terá o endpoint /contatos
.
Voltando ao método obterContatos
, vamos abrir e fechar parênteses ao final do return
, porque esse método get
recebe alguns parâmetros. No caso, precisamos passar a URL em formato string como primeiro parâmetro.
A justificativa para criar a constante API
na linha 10 é não ter que digitar toda vez a URL da API nesse método e em outros que vamos criar. Para esse método, vamos passar this.API
. Dessa forma, vamos conseguir obter os contatos da nossa API.
import { HttpClient } from '@angular/common/http';
export class ContatoService {
private readonly API = 'http://localhost:3000/contatos';
constructor(private http: HttpClient) {}
obterContatos() {
return this.http.get<Contato[]>(this.API);
}
salvarContato(contato: Contato) {
}
}
Agora que refatoramos, ou seja, removemos a abordagem do local storage e estamos utilizando o HTTP, vamos executar a aplicação para verificar se está funcionando.
É importante que a API esteja sendo executada durante todo o curso. Se você fechar o projeto e voltar, você deve executar tanto a parte do front-end com o
ng serve
, como o back-end com onpm start
.
Vamos abrir o terminal com "Ctrl + J" e abrir uma aba diferente da atual, onde a API está sendo executada. Basta clicar na seta ao lado do ícone de "+" (New Terminal) e escolher uma nova aba do terminal, do Git Bash, para executar a aplicação front-end. Você também pode usar o atalho "Ctrl + Shift + '".
Agora, digitaremos o comando:
ng serve
[Error] TS2740: Type 'Observable<Contato[]>' is missing the following properties from type 'Contato[]': lenth, pop, push, concat, and 28 more.
Tivemos um erro, cuja mensagem nos informa que o tipo Observable
de Contato[]
não está conseguindo se conectar com as propriedades do tipo contato, que estamos tentando consumir no lista-contato
.
No menu lateral esquerdo, vamos acessar a pasta "paginas > lista-contatos", onde está o arquivo lista-contatos.component.ts
. O erro está em ngOnInit()
:
lista-contatos.component.ts
:
ngOnInit() {
this.contatos = this.contatoService.obterContatos();
}
Modificamos o service e estamos consumindo esse método do service no lista-contatos.component.ts
e está dando um erro por conta da tipagem.
O retorno do método obterContatos
é, na verdade, um Observable
. Por isso que não estamos conseguindo fazer essa conexão do tipo Contato
para o tipo Observable
. Mas vamos te mostrar como resolver esse erro no próximo vídeo.
O curso Angular: comunicando-se com uma API via requisições HTTP possui 119 minutos de vídeos, em um total de 54 atividades. Gostou? Conheça nossos outros cursos de Angular em Front-end, ou leia nossos artigos de Front-end.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.