Alura > Cursos de Mobile > Cursos de Android > Conteúdos de Android > Primeiras aulas do curso Jetpack Compose: realizando a comunicação com REST API

Jetpack Compose: realizando a comunicação com REST API

Utilizando REST API em Apps Android - Apresentação

Olá, pessoal! Beleza? Eu sou o Alex Felipe, instrutor da Alura, e estou aqui para te dar as boas-vindas ao curso de Jetpack Compose: comunicação com Rest API.

Nesse curso, iremos utilizar como exemplo um aplicativo conhecido como AnyFlix. A ideia dele é fazer a simulação de uma plataforma de streaming de vídeo. Como funcionalidades, teremos:

Além dessas funcionalidades, o aplicativo também é capaz de armazenar todo o progresso das pessoas usuárias. Então ele consegue manter todas as informações de filmes adicionados, mesmo que o aplicativo seja fechado e aberto novamente.

Porém, essa técnica não é suficiente, porque se você limpar o aplicativo ou perder o dispositivo e precisar reinstalá-lo, as informações são perdidas.

É aí que a REST API entra em ação, pois é uma ferramenta muito importante para garantir que essas informações sejam mantidas, mesmo que você limpe o aplicativo, perca o dispositivo, e assim por diante.

Além disso, você vai entender que a REST API vai além de manter as informações. Ela é uma ferramenta extra externa que também permite que o nosso aplicativo consiga realizar tarefas mais pesadas, como fazer um pagamento ou enviar um e-mail.

Vamos aprender a fazer toda essa integração/comunicação. Dessa forma, conheceremos uma técnica muito importante em qualquer aplicativo do nosso dia a dia que utilize recursos online.

Para esse curso, é muito importante que você tenha alguns conhecimentos prévios, como:

Caso você não tenha a mínima ideia do que seja esse conteúdo, não se preocupe! Na Alura, temos diversos conteúdos que vão te ensinar todos os detalhes que serão cobrados nesse curso.

Gostou da ideia do curso? Conto com a sua presença na primeira aula!

Vamos lá?!

Utilizando REST API em Apps Android - Entendendo o projeto

Como primeiro passo, vamos conhecer o projeto que iremos utilizar durante o curso. Ele é chamado de AnyFlix e a proposta dele é simular um aplicativo de plataforma de streaming.

A ideia é fazer um catálogo de filmes, em que podemos acessar cada um deles e, por exemplo, colocá-los na nossa lista. Dessa forma, conseguimos visualizá-los em outro momento.

Faremos uma simulação dessas funcionalidades, para ver como elas acontecem no aplicativo. Assim, ficaremos cada vez mais familiarizados.

Simulação das funcionalidades

No simulador abaixo, vamos clicar no botão "Adicionar à lista":

Tela do aplicativo AnyFlix formada por um cabeçalho preto escrito "Informações" em branco com um botão de voltar à sua esquerda. Abaixo, sobre um fundo cinza-escuro, o pôster de um filme à esquerda com informações sobre ele em branco à direita. Logo abaixo, o botão retangular cinza-claro "Adicionar à lista". Por fim, a seção "Você também pode se interessar por…", contendo um carrossel de pôsteres de filmes.

Ao fazer isso, perceba que ele muda seu aspecto visual, como também a sua mensagem. O botão que antes era cinza-claro agora está vermelho, e a mensagem foi substituída por "Remover da lista".

Isso indica que o filme já está na lista, e se quisermos removê-lo, basta clicar novamente no mesmo botão. Após clicar novamente, o botão retorna para o estado anterior. Podemos fazer isso várias vezes.

Tela igual à descrita anteriormente, porém com o botão "Adicionar à lista" substituído pelo botão "Remover da lista", conforme descrito acima na transcrição.

A grande diferença é que quando adicionamos um filme à lista e o botão fica vermelho para removê-lo, ao retornar à tela inicial, teremos a opção "Minha lista" na barra de navegação inferior.

Tela inicial do aplicativo da AnyFlix formada por um banner superior seguido da seção "Em alta", composta por um carrossel de pôsteres de filmes. Na parte inferior, uma barra de navegação preta composta pelas opções "Início" e "Minha lista", das quais a primeira está selecionada.

Ao clicar nela, teremos todos os filmes adicionados à lista:

Tela "Minha lista" formada por uma lista de três colunas e duas linhas, contendo os pôsteres retangulares dos filmes adicionados. Na parte inferior, a mesma barra de navegação descrita anteriormente, porém com a opção "Minha lista" selecionada.

A ideia do aplicativo é justamente trazer os seguintes comportamentos:

Essas são as funcionalidades do AnyFlix.

Estrutura do projeto

Além de conhecer as funcionalidades, é muito importante entender a estrutura do projeto. Dessa forma, fica cada vez mais fácil progredir, adicionando novas funcionalidades e assim por diante.

Para isso, vamos acessar a pasta do nosso código no pacote "br.com.alura.anyflix" (nome do nosso projeto) e visualizar seu conteúdo.

"app > java > br.com.alura.anyflix".

database

Primeiro, temos o pacote para o banco de dados, o nosso "database". Ele contém toda a configuração para armazenar as nossas informações em um banco de dados, utilizando o Room. Temos então:

di.modules

Em seguida, temos outro pacote chamado "di.modules", destinado justamente para o uso do Hilt, ferramenta utilizada para fazer a injeção de dependência.

Já existe uma configuração para o nosso banco de dados (DatabaseModule.kt), para computar informações iniciais. Você pode vasculhar o arquivo para entender um pouco melhor o que foi feito.

Basicamente, cada vez que instalamos o aplicativo e ele cria o nosso banco de dados, são colocados alguns filmes para mostrar informações logo a princípio. Isso estará disponível para você!

model

Depois temos o pacote de modelos ("model"), que representa o nosso filme, ou seja, o nosso Movie.kt. Você também pode clicar aqui para vasculhá-lo e entender quais são as suas opções e propriedades, como ID (id), título (title), ano do filme (year), enredo (plot), e assim por diante.

navigation

Logo abaixo, temos o pacote "navigation". Ele contém todas as configurações e mapeamentos das nossas telas.

O host (AnyflixNavHost.kt), por exemplo, é indicado no padrão do Type Safety. Caso você não o conheça, temos conteúdos na Alura mostrando como fazer isso. Você também pode visualizar a configuração dessa parte do código no arquivo AnyflixNavHost.kt.

sampleData

Em seguida, teremos uma pasta chamada "sampleData". Ela contém de fato os dados de amostra (SampleData.kt), utilizados para preencher cada um dos nossos filmes. Caso queira, você pode manipulá-lo e colocar informações diferentes.

ui

Por fim, teremos o pacote de UI ("ui"), focado na parte visual do aplicativo. Se você quiser ver um componente ou uma tela específica que foi implementada, conhecer a implementação e fazer modificações, é nesse pacote que você terá mais informações.

Por exemplo: na pasta "components", temos o arquivo AnyflixBottomAppBar.kt, onde está localizada a barra de navegação inferior (bottom navigation); além do AnyflixMainBanner.kt, que representa a capa da tela inicial.

Caso queira entender como foi implementado o código, basta acessar os arquivos no GitHub.

Abaixo, na pasta "screens", teremos as nossas telas:

O tema ("theme") vem na configuração do Android Studio. Não precisamos visualizá-lo, pois não há tanta diferença.

Por último, temos as pastas "uistates" e "viewmodels". Elas contêm os códigos que fazem de fato a lógica do nosso aplicativo.

Se você quer entender como foi feita toda a lógica para pegar informações do banco de dados e mostrar na tela, recomendo que você olhe esses componentes, como o HomeUiState.kt, por exemplo.

O HomeUiState representa as possibilidades da nossa tela, como o caso do momento em que ela está carregando, o momento em que não há nada, e o momento em que temos sucesso e os filmes são apresentados em seções, bem como o nosso banner principal.

Caso você queira entender como foi feita toda essa comunicação, esse código, essa regra de tela, basta acessá-la nos arquivos da pasta "viewmodels". Isso é válido para todas as telas.

Recapitulando: basicamente, temos o ViewModel que conecta ao banco de dados, coleta as informações, e faz uma conversão da entidade do banco de dados para o nosso modelo.

Dessa forma, ele indica se temos um estado vazio (HomeUiState.Empty) ou um estado de sucesso (HomeUiState.Success), cria as seções para nós, e apenas exibimos o estado na tela.

Conclusão

Perceba que são padrões já vistos em outros conteúdos da Alura, mas é importante sabê-los para compreender a estrutura do projeto.

Novamente: sugiro que você explore um pouco mais o código, para entender com mais detalhes o que for do seu interesse. Porém, não é necessário focar tanto nesses pontos, porque nosso objetivo é de fato reutilizar o projeto.

Traremos novas funcionalidades com base no tema principal sobre REST API. A seguir, daremos início ao assunto. Até já!

Utilizando REST API em Apps Android - Conhecendo a REST API

Agora que conhecemos o projeto, podemos seguir com o próximo passo: entender o que é a REST API. Nesse vídeo, farei uma introdução ao que é essa ferramenta que podemos considerar para os nossos aplicativos.

Caso já conheça a REST API, como ela se comunica com os aplicativos, e seus principais benefícios, recomendo que você avance para a próxima atividade.

Assim, você aproveitará melhor o conteúdo. Conforme dito anteriormente, meu objetivo é fazer uma introdução e trazer as principais motivações.

Dada essa mensagem, vamos começar com o tema REST API.

Entendendo o que é REST API

Vamos usar como apoio um artigo da Red Hat que faz uma explicação bastante complexa sobre como podemos entender a REST API.

Observação: REST API está escrito como API REST por ser a versão em português do artigo.

A princípio, já podemos entender que a API será da mesma forma que conhecemos em programação: uma interface de programação de aplicações, ou application programming interface.

Em resumo, essa é a maneira pela qual conseguiremos fazer com que o nosso aplicativo e outra aplicação no padrão do REST se comuniquem. A API tem o objetivo de fazer com que aplicações tenham uma interface de comunicação.

Agora precisamos entender o que o REST significa. A partir das informações do artigo da Red Hat, entendemos ser basicamente o padrão de arquitetura de uma aplicação.

O significado do termo vem de Representational State Transfer, em português, transferência de estado representacional.

Nosso objetivo não é falar sobre o que é REST, afinal esse assunto é mais voltado para a área de back-end, para quem implementa esse tipo de aplicação.

Porém, é importante entender como será o uso no dia a dia, ou seja, como a API REST vai atender às demandas que temos dos nossos aplicativos.

Para isso, faremos algumas reflexões sobre coisas que acontecem de maneira comum em diversos aplicativos, nas quais a API REST atua.

Como a REST API atua

Em uma aplicação, de modo geral, muitas vezes a API REST será responsável por fazer regras de negócio que o nosso aplicativo nem sempre conseguirá fazer de maneira segura, garantindo que as funcionalidades funcionarão conforme esperado. Podemos associá-las a algumas situações.

Exemplo

Se temos um aplicativo que precisará enviar um e-mail para alguém, não será um aplicativo Android que mandará o e-mail de fato, mas outra aplicação responsável por toda a configuração necessária para enviar o e-mail.

Dessa forma, pedimos que o nosso aplicativo Android, no qual conseguimos fazer as entradas da nossa pessoa usuária, comunique-se com a API REST.

Ao fazer a comunicação com a API REST, o aplicativo irá pedir simplesmente para ela enviar o e-mail para determinada pessoa. A API REST vai pegar as informações necessárias e enviar o e-mail.

Entenda que a API REST tem o objetivo de fazer o trabalho mais pesado de regra de negócio, geralmente feito para nós por uma aplicação servidora.

Nesse caso, analisamos o exemplo do envio de um e-mail, mas poderia ser também o exemplo de um pagamento, ou até mesmo de um vídeo a que queremos assistir.

Se queremos assistir a um vídeo, não iremos pegá-lodo dispositivo. Haverá um servidor, uma aplicação externa responsável por fazer isso para nós.

A API REST vem com o objetivo de possibilitar a comunicação, a coleta e o envio de informações. Dessa forma, conseguimos manter os comportamentos mais pesados no nosso aplicativo.

Simulando a atuação da REST API

Após a introdução, vamos aproveitar o momento para trazer uma apresentação que irá simular as informações trazidas anteriormente. Dessa forma, você vai entender como a comunicação funciona na prática.

Iniciamos com um retângulo que representa a nossa REST API:

Retângulo vertical cinza-escuro à esquerda de um fundo branco, com a inscrição "REST API" em branco centralizada.

No momento em que temos o nosso aplicativo disponível, faremos a comunicação, como, por exemplo, enviar um dado para pedir algo. Conhecemos esse processo como requisição.

Retângulo vertical menor verde-claro e de bordas pretas à direita do retângulo descrito anteriormente, com a inscrição "App" em branco centralizada. Há uma seta cinza-escura na parte superior conectando o retângulo "App" ao "REST API", com a inscrição "Requisição" em preto abaixo dela.

Ao fazer uma requisição para a REST API, como enviar um e-mail, por exemplo, ela fará o processamento e retornará uma resposta, como uma indicação de que o e-mail foi enviado.

Também podemos solicitar o download de um vídeo, por exemplo. Nesse caso, será retornada uma resposta com o vídeo desejado.

Esquema igual ao descrito anteriormente, porém em vez da seta na parte superior, há uma seta na parte inferior conectando o "REST API" ao "App", com a inscrição "Resposta" acima dela.

Quando fazemos esse tipo de comunicação em que teremos uma requisição e uma resposta, temos um padrão conhecido como comunicação de requisição e resposta.

Esquema da comunicação de requisição e resposta entre a REST API e o app, representados por dois retângulos dispostos horizontalmente conforme descrito nas imagens anteriores. Ambas as setas são exibidas, formando o fluxo de comunicação.

Dessa forma, sempre faremos esse mesmo ciclo que pedir alguma coisa para a REST API, a qual irá nos devolver uma resposta. É assim que o processo funcionará no nosso dia a dia.

ViaCEP

Um exemplo do que poderíamos observar e considerar no nosso aplicativo é justamente a REST API ViaCEP, disponível publicamente. Nós podemos utilizá-la e quero mostrar isso para você!

A ViaCEP é um serviço de servidor online, cujo objetivo é ser uma REST API para consultar endereços a partir de um CEP.

Ele nos mostra que podemos utilizar o endereço viacep.com.br/ws/01001000/json. Ao clicar nele, são retornadas as seguintes informações:

{
  "cep": "01001-000",
  "logradouro": "Praça da Sé",
  "complemento": "lado ímpar",
  "bairro": "Sé",
  "localidade": "São Paulo",
  "uf": "SP",
  "ibge": "3550308",
  "gia": "1004",
  "ddd": "11",
  "siafi": "7107"
}

Perceba que o código determina existir um CEP, um logradouro, um complemento, um bairro, e assim por diante.

Essa representação também é conhecida como um JSON, uma linguagem utilizada para trafegar essas informações.

Mas por que utilizá-la?

Qualquer tipo de aplicação consegue pegar os dados representados com o JSON e fazer um processo chamado parsing, que consiste em transformar o JSON em um objeto que a aplicação entende.

É dessa forma que as aplicações REST nos permitem tanto mandar informações, buscar informações, e assim, estabelecer a comunicação.

Se quiséssemos consultar um CEP, por exemplo, poderíamos usar a REST API do ViaCEP, pedir a informação para ele, e assim teríamos o endereço desejado.

Retornando à apresentação que simula o processo de comunicação, quando temos esse tipo de comunicação, o REST API é conhecido como a aplicação servidora, e qualquer pessoa que faz uma requisição é conhecida como cliente. Representamos isso no esquema abaixo:

Esquema de comunicação de requisição entre cliente e REST API, conforme descrito anteriormente, contendo o endereço "https://viacep.com.br/ws/01001000/json/" em preto na parte superior e com a inscrição "cliente" no lugar de "App" no retângulo à direita.

Nesse caso, representamos como cliente, mas poderia ser o nosso aplicativo Android, um aplicativo iOS, web, e assim por diante.

Quando fazemos a requisição é o momento em que acessamos o endereço do JSON da ViaCEP a partir do protocolo HTTP. No caso das API REST, as comunicações via REST serão feitas via HTTP.

Esquema de comunicação de resposta do ViaCEP para o cliente, representados pelos retângulos cinza-escuro à esquerda e azul à direita, respectivamente. Abaixo, uma seta partindo do retângulo cinza em direção ao azul, intitulada "Resposta". Dessa inscrição, sai uma seta para a direita que culmina em uma captura de tela do JSON descrito acima na transcrição.

Após fazer a requisição, no momento da resposta é trazido o JSON do endereço do ViaCEP, descrito anteriormente no texto.

Outros aplicativos acessando REST API

Após toda essa introdução, precisamos entender por que precisamos de fato de uma REST API, além de considerar esse trabalho pesado.

A partir da REST API, conseguimos fazer com que qualquer tipo de aplicação tenha capacidade de realizar essa comunicação, como o caso do ViaCEP representado no esquema a seguir:

Esquema formado por um retângulo cinza-escuro central intitulado "ViaCEP". Dele saem quatro setas cinza culminando em um quadrado verde, um cinza-claro, um azul, e um ciano, contendo as respectivas inscrições: Android, iOS, Web, e Desktop.

Esse é um benefício muito importante, pois na maioria dos aplicativos que utilizamos, principalmente de redes sociais ou com acesso à internet, haverá uma versão web, uma versão de desktop, outra mobile, ou seja, várias versões.

O mesmo que fazemos no aplicativo mobile, será apresentado no aplicativo desktop, no aplicativo iOS, porque existe um servidor, uma aplicação RESTful que permite manter essas informações.

Dessa forma, todo o nosso progresso de aplicativo é compartilhado em diversos apps, independentemente da plataforma.

Além disso, esse benefício permite que todas as informações feitas durante o progresso de um aplicativo sejam salvas com segurança.

Por exemplo: se enviarmos tudo o que for feito no aplicativo Android da plataforma AnyFlix para a nossa REST API, garantimos que as informações serão armazenadas de maneira segura.

Assim, mesmo que as informações sejam apagadas do aplicativo, elas ainda estarão no servidor e poderemos consultá-las quando for desejado. Se o aplicativo for reinstalado, conseguiremos buscá-las novamente.

Conclusão

Perceba que se trata de um cenário bastante comum e muito necessário no nosso dia a dia. Imagine que você progrediu bastante em determinado aplicativo e de repente precisou desinstalá-lo.

Ao instalar novamente, você espera que as informações estejam disponíveis. Para isso, é necessário o serviço online de REST API, solução que iremos utilizar durante do curso.

Após abordar todas essas informações, a seguir, conheceremos a REST API que vamos utilizar para o nosso aplicativo!

Sobre o curso Jetpack Compose: realizando a comunicação com REST API

O curso Jetpack Compose: realizando a comunicação com REST API possui 172 minutos de vídeos, em um total de 46 atividades. Gostou? Conheça nossos outros cursos de Android em Mobile, ou leia nossos artigos de Mobile.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Android acessando integralmente esse e outros cursos, comece hoje!

Plus

De
R$ 1.800
12X
R$109
à vista R$1.308
  • Acesso a TODOS os cursos da Alura

    Mais de 1500 cursos completamente atualizados, com novos lançamentos todas as semanas, emProgramação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

Matricule-se

Pro

De
R$ 2.400
12X
R$149
à vista R$1.788
  • Acesso a TODOS os cursos da Alura

    Mais de 1500 cursos completamente atualizados, com novos lançamentos todas as semanas, emProgramação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Luri powered by ChatGPT

    Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com Luri até 100 mensagens por semana.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas