Alura > Cursos de Programação > Cursos de Kotlin > Conteúdos de Kotlin > Primeiras aulas do curso Kotlin: desenvolvendo sua primeira aplicação

Kotlin: desenvolvendo sua primeira aplicação

Consumindo uma API de Jogos - Apresentação

Jeniffer: Olá! Boas-vindas ao primeiro curso da formação de Kotlin. Sou Jeniffer Bittencourt, instrutora de programação.

Jeniffer é uma mulher branca. Tem cabelos na altura dos ombros e na cor azul. Usa óculos de grau com armação redonda e está de camiseta cinza-escuro. Ao fundo, uma parede clara com iluminação gradiente que vai do rosa ao azul. À direita uma prateleira com objetos e ao lado direito o logo da Alura.

Jacqueline: Olá! Sou a Jacqueline Oliveira, engenheira de software e instrutora de programação.

Jacqueline é uma mulher branca de cabelos longos e loiros. Está com uma blusa de manga longa na cor preta. Ao fundo, uma parede clara com iluminação azul. À direita, uma prateleira com livros.

Esse conteúdo é para você que quer iniciar o aprendizado em Kotlin, uma linguagem amplamente utilizada no mercado tanto no desenvolvimento de aplicativos Android, quanto aplicações back-end.

Para melhor aproveitamento do curso, é importante que você tenha como pré-requisito conhecimento em:

Jeniffer: Nesse curso trabalharemos com o projeto AluGames, uma plataforma de aluguel de jogos. Nela a pessoa usuária poderá se cadastrar, buscar jogos, salvar uma lista de favoritos e alugá-los.

Lembrando que o desenvolveremos nesse curso é a parte back-end. Mas, ao concluir as aulas, você pode se inspirar no nosso layout e assim desenvolver o projeto completo.

Jacqueline: Muito legal! Isso lembra muito quando íamos à locadora na infância.

Como a Jeni mencionou, você pode começar o projeto, criar um escopo e ao longo dos cursos ir aumentando as funcionalidades para agregar o projeto.

Jeniffer: Durante a construção do Alugames aprenderemos sobre:

Jacqueline: Estamos muito animadas com esse projeto. Esperamos que você também!

Jeniffer: Bora começar?

Consumindo uma API de Jogos - Iniciando o projeto

Jacqueline: Quando trabalhamos como pessoa desenvolvedora é muito construirmos inicialmente um MVP, Produto Mínimo Viável. Começamos com uma pequena funcionalidade e a partir disso, ou dos feedbacks das pessoas usuárias, vamos aumentando o projeto.

É justamente isso que faremos nesse curso. Começaremos entendendo quais são os jogos que os usuários tem interesse em alugar na nossa plataforma.

Para isso, precisamos criar um mecanismo de busca para os usuários poderem fazer buscas além de nos informar os jogos que deseja.

Jeniffer: Isso mesmo. Nessa parte inicial do projeto trabalharemos com a caixa de busca na qual a pessoa usuária fará a busca por títulos, descrição e imagem do jogo. Porém, nós não vamos inserir esses dados manualmente, né Jaque?

Jacqueline: Nós não criaremos um banco de dados cheio de jogos, ao invés disso, buscaremos um lugar que nos ofereça isso pronto.

Inclusive, é isso que fazemos em sistemas distribuídos, procuramos APIs que possam fornecer um determinado conteúdo que precisamos.

Jeniffer: Nesse projeto, trabalharemos com a API CheapShark. Ela fornece uma lista de jogos, informações relacionadas a preços, como lojas que estão com valores mais baratos e informações da capa do jogo.

Se scrolarmos a página inicial da API até o fim, no centro inferior da tela encontramos o link clicável "API". Ao clicar nele, temos acesso à documentação dessa API. Nela podemos analisar o que ela pode retornar e o que podemos utilizar no nosso projeto.

Nesse caso, trabalharemos com o endpoint que retorna um jogo por meio de um ID. Um exemplo de retorno é um jogo do Batman. Essa API retorna os dados desse jogo, além de outras informações sobre ele.

Jacqueline: Esses dados, ou seja, o corpo dessa requisição será devolvido para nós no formado JSON.

Como visualizar esse formato no navegador pode deixar a experiência um pouco confusa, recomendamos que você utilize uma ferramenta para trabalhar com requisições e respostas JSON.

Nesse curso utilizaremos o Postman, mas existem várias outras opções que também podem ser utilizadas.

Jeniffer: Então, o primeiro passo é abrir o Postman. Em seguida, copiamos o link do endpoint para verificar na ferramenta como essa estrutura funcionará.

No My Workspace do Postman, localizado na lateral superior esquerda, clicamos no botão "New". Depois selecionamos a opção "HTTP Request".

Para melhorar a visualização da ferramenta, ocultamos o menu lateral do Postman clicando no botão "Hide sidebar", localizado no canto inferior esquerdo da tela ou por meio do atalho "Ctrl + ".

No centro da tela encontramos as opções de requisição. Como nesse caso o que queremos é receber as informações, utilizaremos o GET. No campo ao lado, colamos a URL da API e clicamos no botão "Send", no canto direito da tela.

Feito isso, a ferramenta traz as informações mais organizadas, conseguirmos visualizar o que está sendo retornado nesse endpoint da API.

Jacqueline: Além de ser uma foma mais legível de analisar a API, se precisarmos, por exemplo, fazer modificações futuramente o Postman oferece esse recurso. Diferente do navegador em que só conseguimos fazer requisições do tipo GET.

Se nosso projeto em algum momento virar uma API, encontramos no Postman a possibilidade de utilizar todos os verbos HTTP. Isso é muito interessante!

Bom, já sabemos o que queremos, temos o enpoint e a API. Vamos começar nosso projeto?

Jeniffer: Bora lá! Iniciaremos nosso projeto utilizando a IntelliJ IDEA.

Embora seja possível utilizar outro ambiente de desenvolvimento integrado, recomendamos que você opte pelo mesmo utilizado em aula para que sua experiência seja semelhante.

Para iniciar nosso projeto do zero, abrimos o IntelliJ IDEA e clicamos no botão "New Project".

Nomeamos o projeto como "AluGames". No campo Location definimos a localização onde ele será salvo, você pode definir a que desejar.

Abaixo, escolhemos a linguagem, nesse caso será o "Kotlin". No campo Build system selecionamos a opção "Maven".

O Maven irá facilitar o processo de construção do projeto e ajudar na inclusão de bibliotecas ou dependencias externas.

Além disso, ele será muito útil quando precisarmos compartilhar o projeto com outras pessoas, afinal, ele permite o envio de tudo o que foi adicionado ao projeto. Em breve aprenderemos mais sobre seu funcionamento.

Em seguida, no campo JDK, se você não tiver nenhum instalado, pode selecionar uma opção para fazer o download. Recomendamos que você utilize a mesma desse curso, JDK Versão 17.

Se clicarmos em "Advanced Settings" a ferramenta abre uma pequena aba com opções para criar o projeto dentro de um pacote. Como aprenderemos sobre isso no decorrer do curso, não preencheremos esses campos.

Por fim, clicamos no botão "Create", localizado no canto direito da tela. Feito isso, nosso projeto é executado.

Lembrando que a primeira execução é mais lenta, afinal, nosso projeto está sendo construído.

Após ser inicializado, no canto esquerdo da tela, encontramos uma estrutura do projet. Se clicarmos em "AluGames" encontramos as pastas ".idea", que são as configurações da IDE, além da "src".

Se clicarmos nessa segunda pasta e depois em "kotlin" encontramos o local onde encontraremos todo código e organização do nosso projeto.

Quando formos realizar testes no projeto utilizaremos a pasta "test", já no arquivo pom.xml adicionaremos as dependências.

Além disso, também temos as bibliotecas externas e os arquivos temporários. Tudo isso está organizado na lateral esquerda do projeto.

No centro da tela temos o arquivo executável Main.kt que a própria IDE disponibilizou.

Jacqueline: Estava analisando aqui e esse código é bem diferente de um código Java.

Jeniffer: Exatamente, Jaque! Aqui nós já temos um arquivo executável. Para criá-lo basta utilizar o fun main().

fun main (args: Array<String>){
        println("Hello World!")}

        println("Program arguments: ${args.joinToString()}")
}

Nesse primeiro contato com o Kotlin já podemos perceber que ele é menos verboso que o Java. Para printar algo na tela, por exemplo, basta usar o println().

A partir do próximo vídeo começaremos a consumir nossa API e desenvolver nosso projeto.

Jacqueline: Jeni, agora, rode o código para visualizarmos o "Hello World!" em Kotlin.

Jeniffer: Vamos lá! Para executar o código basta clicar na seta localizada no lado esquerdo do fun main. Feito isso temos o retorno abaixo:

Hello World!

Jacqueline: No próximo vídeo aprenderemos como consumir a API de games e visualizar os dados no nosso terminal.

Jeniffer: Até lá!

Consumindo uma API de Jogos - Buscando dados da API

Jacqueline: Chegou a hora de consumir a API e visualizar os dados do nosso jogo.

Para isso, existem vários recursos. Alguns são mais usados, como o Retrofit. Mas, notei que você está com a documentação Java aberta na sua tela, Jeni.

Antes que nosso aluno se questione, essa é uma característica do Kotlin. Ele proporciona essa possibilidade de utilizarmos o Java.

Jacqueline: Exatamente! Essa troca entre o Kotlin e o Java facilita o processo de migração de projetos.

Por exemplo, se você tem um projeto Java e precisa introduzir algo em Kotlin é possível fazer isso sem fazer a migração completa. Além disso, também podemos utilizar as funcionalidades e bibliotecas do Java no Kotlin.

Isso significa que podemos aplicar o HttpRequest no nosso projeto, o mesmo utilizado no curso de Java que é pré-requisito dessa formação.

Ao acessar a documentação Java, encontramos um campo de busca na lateral superior direita da tela. Digitamos "HttpRequest" e clicamos nele.

Feito isso, somos direcionados para uma página com orientações de como utilizá-lo.

Para aplicá-lo no nosso projeto, copiamos o seguinte trecho de código:

 HttpClient client = HttpClient.newHttpClient();
   HttpRequest request = HttpRequest.newBuilder()
         .uri(URI.create("http://foo.com/"))

Depois, abrimos o IntelliJ IDEA. Como não utilizaremos o código criado automaticamente pela IDE agora, apagamos, deixando apenas o fun main(){}. Nas chaves apertamos "Ctrl + V" para colar o código.

Feito isso, aparece uma mensagem perguntando se queremos converter esse código Java para Kotlin.

Jacqueline: Então a IDE fará isso automaticamente?

Jeniffer: Sim, Jaque. Não precisaremos fazer manualmente. Para isso, basta clicarmos no botão "Yes" da mensagem. Então, o código fica da seguinte forma:

import java.net.http.HttpRequest



fun main() {
    val client: HttpClient = HttpClient.newHttpClient()
    val request = HttpRequest.newBuilder()
        .uri(URI.create("https://www.cheapshark.com/api/1.0/games?id=146"))
        .build()
}

Repare que o código já possui o import do HttpRequest. Porém, há algumas classes em vermelho que precisarão ser importadas manualmente.

Isso geralmente acontece quando existe mais de um local para realizar o import. Como a ferramenta não sabe exatamente qual utilizaremos, precisamos adicioná-los.

Para fazer o import basta clicar no HttpClient e apertar o comando "Alt + Enter". Repetimos o mesmo procedimento no URI.

import java.net.URI
import java.net.http.HttpClient
import java.net.http.HttpRequest

// código omitido

Notamos que ainda há um erro em HttpClient e HttpRequest, pois eles aparecem sublinhados em vermelho.

Na lateral esquerda da linha 8, que é a linha do HttpClient, há um ícone com uma lâmpada. Ao passar o mouse sobre ela, aparece uma mensagem dizendo para trocar a versão da linguagem para a 11. Isso acontece, pois o HttpClient só está disponível a partir dessa versão.

Conseguimos fazer isso, novamente, clicando no trecho de código e apertando o comando "Alt + Enter".

Jacqueline: Você pode estar se perguntando, se usamos o JDK 17 por que precisamos atualizar para a versão 11? Isso acontece pois provavelmente o Kotlin compila os bytecodes para serem compatíveis a versão 8.

Se você quiser se aprofundar mais nesse tema pode acessar o Para Saber Mais, disponibilizamos um material completo sobre isso.

Jeniffer: No nosso código temos um client que receberá as informações da API. Abaixo, temos um request com uma URI padrão. Precisamos substituí-la, então apagamos, copiamos nosso endpoint e o colamos.

// código omitido

.uri(URI.create("https://www.cheapshark.com/api/1.0/games?id=146"))

// código omitido

Agora precisamos trazer a informação de resposta que virá da API.

Jacqueline: O interessante dos pacotes Java é que eles simulam quando entramos no navegador, digitamos um endereço, a requisição é feita e por fim temos uma resposta.

O client fará o send realizar a requisição, assim receberemos a resposta.

Jeniffer: Nosso próximo passo é voltarmos na documentação. No campo de busca digitamos "HttpResponse" e clicamos nele.

Analisando o conteúdo, encontramos uma sugestão de como essa classe pode ser implementada. Selecionamos o trecho de código da documentação e o copiamos apertando "Ctrl + C".

Voltamos no IntelliJ e colamos no fim do código. Ao fazer isso, a ferramenta pergunta novamente sobre a conversão e clicamos em "Yes".

// código omitido

    val response = client
        .send(request, BodyHandlers.ofString())
}

Agora precisamos especificar o que queremos trazer como resposta. Então, criamos a nova variável val_json. Ela receberá response.body, pois queremos todas as informações do endpoint.

Ao escrever response. a ferramenta sugere várias opções que podemos trazer como resposta, como o corpo inteiro ou um item específico.

Em seguida, escrevemos print(json) para imprimir o código e checar se está funcionando.

Podemos executar de três formas diferentes. A primeira é clicando no botão indicado por uma seta, localizado no lado esquerdo de fun main(). A segunda é pelo botão "Run", também indicado por uma seta, localizado no canto superior direito da tela ou pelo atalho "Ctrl + Shift + F10".

import java.net.URI
import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse.BodyHandlers


fun main() {
    val client: HttpClient = HttpClient.newHttpClient()
    val request = HttpRequest.newBuilder()
        .uri(URI.create("https://www.cheapshark.com/api/1.0/games?id=146"))
        .build()
    val response = client
        .send(request, BodyHandlers.ofString())

    val json = response.body()
    println(json)
}

Feito isso, no terminal, conseguimos encontrar informações do jogo, como título, imagem de capa e valores, exatamente como no navegador ou no Postman.

Jacqueline: Realmente muito bacana, Jeni! Agora, precisamos modelar a aplicação no formato ideal para o nosso projeto. Por exemplo, algumas informações da API, como os preços, não são necessários.

Esse é o nosso próximo passo, vamos modelar nossa aplicação e avançar na funcionalidade que desejamos entregar. Até o próximo vídeo!

Sobre o curso Kotlin: desenvolvendo sua primeira aplicação

O curso Kotlin: desenvolvendo sua primeira aplicação possui 254 minutos de vídeos, em um total de 63 atividades. Gostou? Conheça nossos outros cursos de Kotlin em Programação, ou leia nossos artigos de Programação.

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

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

Conheça os Planos para Empresas