Olá! Me chamo Millena Gená e serei a sua instrutora ao longo deste curso.
Millena Genar é uma mulher de pele clara, cabelos longos, escuros e cacheados. Atualmente, seu cabelo está preso em uma trança lateral. Ela possui olhos castanhos e está usando batom vermelho. Sua blusa é preta e exibe o símbolo verde da Escola de Dados no centro. Ao fundo, há um guarda-roupa na cor preta, iluminado por LEDs nas cores verde e azul. À sua esquerda, há alguns livros da saga Harry Potter, uma pelúcia de um polvo roxo e três figuras Funko de diferentes personagens. Também é possível ver o símbolo da Escola de Dados novamente ao fundo.
Acompanharei você nessa trajetória de aprendizado, onde exploraremos o uso da biblioteca Requests do Python para consumir dados de APIs.
GET
, POST
, PUT
e DELETE
utilizando a biblioteca requestsstatus_codes
Neste curso, iremos desempenhar o papel de pessoas engenheiras de dados em uma startup. Nosso objetivo é desenvolver um pipeline ETL utilizando a biblioteca Requests do Python e a API do GitHub.
Durante o desenvolvimento deste projeto, vamos adquirir conhecimentos em várias áreas. Aprenderemos a fazer requisições GET
, POST
, PUT
e DELETE
utilizando a biblioteca Request do Python.
Também aprenderemos a extrair e transformar dados no formato JSON, explorar diferentes endpoints da API do GitHub e compreender os diferentes status codes. Além disso, vamos abordar a autenticação e paginação utilizando a API do GitHub, estruturar um pipeline utilizando orientação a objetos, e muito mais.
Ao concluir este curso, você estará apto a utilizar a biblioteca Request para extrair dados de diversas APIs e construir seu próprio pipeline ETL. Terá conhecimentos sólidos sobre o uso da biblioteca Request, habilidades para lidar com diferentes APIs e a capacidade de criar pipelines eficientes para processar e transformar dados.
Para aproveitar ao máximo este conteúdo, é importante ter conhecimentos prévios, como familiaridade com a linguagem Python e suas principais estruturas de dados, como listas e dicionários. Além disso, é útil ter uma compreensão básica de conceitos de orientação a objetos, como classes, métodos e atributos.
Esses conhecimentos serão fundamentais para acompanhar e aplicar os conceitos abordados no curso de forma eficiente.
Se você se interessou pelo tema, estou pronta para te ajudar a aprender a trabalhar com APIs utilizando a biblioteca Request do Python. Juntos, vamos explorar os fundamentos e práticas necessárias para realizar requisições, extrair dados e utilizar as funcionalidades oferecidas pelas APIs.
Vamos lá!
Para iniciar, vamos compreender o projeto em que iremos atuar.
Somos contratados como pessoas engenheiras de dados em uma startup. Como nosso primeiro trabalho, nós precisamos desenvolver um projeto onde obtemos dados das linguagens de programação utilizadas por algumas grandes empresas, como Amazon, Spotify, Netflix e Apple.
Fomos contratados como engenheiros de dados por uma startup. Nosso primeiro trabalho consiste em desenvolver um projeto que envolve a obtenção de dados sobre as linguagens de programação utilizadas por grandes empresas, como Amazon, Spotify, Netflix e Apple.
Para realizar esse projeto, é necessário criarmos um pipeline ETL, que consiste nas etapas de extração, transformação e carga (em inglês, Extract, Transform e Load). Em outras palavras, iremos desenvolver um projeto no qual vamos extrair, transformar e armazenar dados específicos relacionados ao nosso objetivo.
Para implementar esse ETL, faremos uso da biblioteca Requests do Python e também da API do GitHub. Através da API, teremos acesso aos dados sobre as linguagens de programação utilizadas pelas empresas mencionadas em seus projetos.
Vamos iniciar o desenvolvimento do nosso projeto explorando a biblioteca Requests e familiarizando-nos com a API do GitHub. Meu ambiente já está configurado e utilizaremos o WSL2, que é um sistema Linux no Windows, neste curso.
O VSCode será nossa ferramenta principal para escrever o código do projeto. Além disso, vamos criar um ambiente virtual onde instalaremos todos os pacotes Python necessários ao longo do projeto.
Já configurei todo o meu ambiente de acordo com a atividade de preparação de ambiente descrita anteriormente, garantindo que tudo esteja funcionando corretamente. Recomendo que você também siga essas etapas antes de prosseguir com o vídeo, para evitar possíveis erros e garantir um ambiente adequado para o desenvolvimento.
Agora, vamos começar a explorar a biblioteca Requests.
A biblioteca Requests do Python oferece uma ampla gama de recursos que simplificam a comunicação com a internet. Com o uso dessa biblioteca, é possível enviar informações para a web e receber informações de forma mais prática. Isso nos permite interagir com APIs, sites e bancos de dados sem a necessidade de um profundo conhecimento sobre o funcionamento da rede subjacente.
A biblioteca Requests facilita o envio e recebimento de informações pela internet.
No nosso projeto, faremos uso dessa biblioteca para estabelecer a comunicação com a API do GitHub.
Vamos iniciar acessando nosso ambiente e abrindo a pasta onde realizaremos nosso trabalho. No meu caso, já tenho o terminal do WSL aberto e digitarei cd projeto_requests/
para navegar até a pasta onde desenvolveremos nosso projeto. Em seguida, pressionarei "Enter". Agora, digitarei code .
para abrir o VS Code já nessa pasta do projeto.
cd projeto_requests/
Comando para abrir o VSCode:
code .
Aguardemos um momento enquanto o VS Code é aberto.
Nesta pasta do lado esquerdo do VSCode, já possuo o ambiente virtual criado, assim como você também deve ter feito, seguindo as atividades de "Preparando o Ambiente" mencionadas anteriormente. Além disso, já possuo um notebook chamado linguagens_repos.ipynb
. Este notebook está atualmente vazio, apenas dividido de acordo com as seções do nosso projeto. Caso queira baixar o notebook, também disponibilizarei para você.
Para começarmos a explorar a biblioteca Requests, vamos acessar a documentação oficial. No momento, fecharei o VSCode. Para que você possa acessar a mesma página que eu, basta digitar requests quick start no seu navegador. Assim, você encontrará a documentação relevante para prosseguirmos.
Na página da documentação da biblioteca Requests, você encontrará uma forma rápida de começar a trabalhar com ela. Para fazer uma requisição (make a request) o primeiro passo mencionado é importar a biblioteca usando o código import requests
. Em seguida, há um trecho de código que explora mais detalhadamente os recursos da biblioteca.
Trecho de código da documentação:
r = requests.get('https://api.github.com/events')
Copiamos o trecho de código acima retirado da documentação, vamos ao notebook no VSCode e colamos esse código na segunda célula pressionando "Ctrl + V".
Na primeira célula, faremos a importação da biblioteca utilizando import requests
. Ao executar a primeira célula e também a segunda, estaremos preparando o ambiente para utilizar os recursos da biblioteca.
import requests
Na terceira célula, atribuiremos o nome r
à nossa variável para podermos visualizar o resultado que ela retorna.
r
Ao pressionarmos "Shift + Enter", o resultado exibido é "response" entre colchetes com o número 200.
< Response [200] >
Mas o que isso significa?
Para uma análise mais detalhada, vamos examinar cada parte do trecho de código:
r = requests.get('https://api.github.com/events')
Temos a variável r
que é igual a requests
, que é o nome da biblioteca que importamos anteriormente. Em seguida, utilizamos o método .get
para realizar uma requisição HTTP do tipo GET
. Entre parênteses e aspas simples, passamos a URL da API do GitHub, especificamente "'https://api.github.com/events'".
Esse trecho de código é responsável por realizar uma requisição. Mas, afinal, o que é uma requisição?
Uma requisição é uma solicitação feita a um servidor da internet. Para que uma requisição ocorra, é necessário que haja um cliente que faça a solicitação a um servidor específico. O servidor, por sua vez, responderá a essa requisição fornecendo as informações solicitadas.
No caso do nosso código, assumimos o papel de cliente e estamos realizando uma requisição ao servidor, que no nosso caso é a API do GitHub. Através da URL fornecida na requisição, esperamos receber as informações solicitadas. Existem vários tipos de requisições disponíveis. No momento, estamos utilizando o método .get
, que é usado quando desejamos solicitar dados específicos ao servidor.
No código em questão, estamos utilizando uma requisição .get
, mas qual é exatamente a informação que estamos solicitando ao servidor da API do GitHub? Para verificar essa informação, podemos acessar o link diretamente em um navegador. Para fazer isso, pressionamos "Ctrl" e clicaremos no link (https://api.github.com/events), o que abrirá o navegador com a página correspondente à URL requisitada.
É justamente o link que estamos passando ao fazer a requisição. Analisando o link, percebemos que tem api.github.com/events
. Esses events que estamos passando na URL no momento da requisição estão especificando a informação que queremos extrair dessa API do GitHub, ou seja, os eventos que estão acontecendo no GitHub, as ações. E é isso que ele vai retornar no formato JSON, que é esse formato que podemos conferir nesta página.
Esse formato consiste em uma lista composta por diversos dicionários, em que cada dicionário contém informações sobre um evento específico que ocorre no GitHub. Cada dicionário inclui o ID do evento, o tipo de evento ou ação, o ator envolvido e várias outras informações relevantes.
Já sabemos qual informação que estamos solicitando por meio daquela requisição GET
. Agora, vamos retornar ao nosso código e verificar o conteúdo retornado por essa URL.
No entanto, ao inspecionarmos o conteúdo da variável r
, que armazena o resultado da requisição, encontramos apenas a mensagem "< response [200] >
". O que será que isso significa e como podemos fazer para acessar especificamente o conteúdo da página que solicitamos?
Após realizar nossa primeira requisição GET
, ao analisar o conteúdo da variável onde armazenamos a resposta, deparamo-nos com o valor < Response [200] >
. O valor "response" indica o tipo do objeto retornado em nossa solicitação, ou seja, é o tipo da nossa variável.
Toda vez que realizamos uma requisição, obtemos várias informações em resposta, incluindo um código de status (status code).
O status code tem a finalidade de indicar se a requisição foi aceita e concluída com sucesso, ou, por outro lado, se ocorreu algum erro e a requisição foi rejeitada.
No nosso caso, um código de status na faixa dos 200
indica que a requisição foi aceita e que obtivemos acesso aos dados solicitados. Existem outros códigos de status que representam diferentes situações, e incluirei uma atividade nesta aula para apresentar esses outros códigos de status também.
O objeto do tipo response
representado pela variável r
em nosso caso, contém várias informações sobre a requisição que realizamos. Agora vamos aprender como acessar essas informações.
Para começar, vamos supor que desejamos acessar somente o status code da requisição, sem exibi-lo na forma atual. Podemos fazer isso simplesmente referenciando o nome da nossa variável, r.status_code
, na célula seguinte.
r.status_code
Teclamos "Shift + Enter" para rodar a célula. Ao executarmos essa referência, obteremos o status code da requisição que foi realizada e armazenada na variável r
:
Como retorno, obtemos:
200
Além disso, podemos acessar outras informações, como a URL que foi utilizada para realizar a requisição. Para isso, podemos utilizar r.url
. A URL retornará os eventos que estavam ocorrendo no GitHub.
r.url
Como retorno, obtemos:
No momento, o que é fundamental é entendermos como acessar o conteúdo da URL, isto é, o conteúdo que requisitamos.
Existem duas opções para fazer isso:
r.text
r.text
Como retorno, obtemos:
O retorno abaixo foi parcialmente transcrito. Para conferi-lo na íntegra, execute o código na sua máquina.
'[{"id":"28660725505", "type": "PushEvent","actor":{"id":54496419,"login": "supershel120…
Esse comando traz todo o conteúdo que vimos anteriormente no navegador em uma string, por isso temos aspas simples envolvendo o conteúdo.
r.json()
, que traz o conteúdo no formato de JSON.r.json()
Ao executar a célula, será possível visualizar os dados solicitados no momento da requisição:
Output exceeds the size limit. Open the full output data in a text editor
[ { "id": "28660725505", "type": "PushEvent", "actor": { "id": 54496419, "login": "supershel12019", "display_login": "supershel12019", "gravatar_id": "", "url": "https://api.github.com/users/supershell2019", "avatar_url": "https://avatars.githubusercontent.com/u/54496419?" }, "repo": { "id": 489658584, "name": "supershel12019/images", "url": "https://api.github.com/repos/supershell2019/images" }, "payload": { "repository": { "id": 489658584 …
É importante mencionar que pode haver um aviso indicando que o JSON é extenso e não será exibido completamente no log do VSCode. No entanto, se desejarmos acessar todos os dados, basta clicarmos em "in a text editor", o que abrirá uma nova aba com o JSON completo e todas as informações extraídas.
Com o auxílio dessa abordagem, temos a capacidade de manipular os dados de acordo com as necessidades específicas. Com isso, conseguimos extrair informações dos eventos do GitHub e incorporar esses dados em nosso projeto no notebook.
Mas como podemos acessar outros tipos de informação do GitHub ainda utilizando essa API? Para isso, precisamos alterar os chamados endpoints.
Os endpoints são partes da URL que precisamos modificar para acessar informações específicas de uma API. Para ilustrar melhor, vamos revisitar o código inicial da nossa requisição GET
usando o requests.get
, onde passamos a URL para obter informações sobre os eventos.
r = requests.get('https://api.github.com/events')
A URL base (api.github.com
) é o ponto de partida que sempre utilizaremos para extrair informações da API do GitHub. No nosso caso, estamos utilizando o endpoint "events" para obter informações sobre os eventos que ocorrem no GitHub e as ações associadas a eles. Dessa forma, podemos acessar os dados relacionados aos eventos específicos da plataforma.
Se desejarmos obter informações diferentes, precisamos alterar apenas a parte do código que define o endpoint. Vamos copiar esse código e colar na célula abaixo, na seção "Utilizando outro endpoint" do VSCode.
Para obter informações sobre as versões disponíveis da API do GitHub, vamos alterar o endpoint de "events" para "versions". É importante destacar que para saber qual endpoint utilizar para obter a informação desejada, podemos explorar a documentação oficial da API do GitHub, onde encontraremos todas as informações necessárias. Vamos realizar essa alteração no código e verificar as versões disponíveis da API.
r = requests.get('https://api.github.com/versions')
Vamos adicionar abaixo na mesma célula um r.status_code
, para ver se essa requisição vai dar certo.
r = requests.get('https://api.github.com/versions')
r.status_code
Executamos e obtemos o status 200
como retono.
Vamos digitar r.json()
na célula abaixo para visualizarmos o conteúdo da resposta em formato JSON.
r.json()
Como retorno, temos:
['2022-11-28']
O comando retornou o resultado desejado, que é o conteúdo da requisição feita, apresentando uma lista que contém a data de lançamento da última versão do GitHub. Essa é a versão atual disponível no momento em que este vídeo está sendo gravado, e será a versão utilizada ao longo do curso para o desenvolvimento de nosso projeto.
É importante destacar que, ao longo do curso, pode ser que novas versões da API sejam lançadas, resultando em uma lista com datas atualizadas das versões disponíveis. É bastante comum que APIs passem por atualizações e mudanças ao longo do tempo.
No entanto, é altamente recomendável que você utilize exatamente a mesma versão da API que estou utilizando durante o desenvolvimento do projeto. Isso garantirá que você não encontre erros inesperados e não precise fazer modificações no seu código. Manter a consistência da versão da API é uma prática recomendada para evitar problemas de compatibilidade.
E, por isso, irei fornecer uma atividade após este vídeo na qual ensino justamente como especificar a versão desejada da API ao fazer a requisição.
No entanto, caso, durante o curso, essa versão da API que utilizei não esteja mais disponível por algum motivo, é crucial que você consulte a documentação da API do GitHub para verificar as alterações entre as versões, a fim de adaptar seu código a essas mudanças e evitar erros graves que possam comprometer seu projeto.
Aprendemos a manipular os endpoints e compreendemos o funcionamento das versões de uma API, focando especialmente na API do GitHub. Agora, vamos pressionar "Ctrl + S" para salvar nosso notebook até este ponto.
Pronto! Agora que dominamos a manipulação do objeto response
, o trabalho com endpoints, e estamos familiarizados com a biblioteca Requests e a API do GitHub, podemos prosseguir com nosso projeto e iniciar o processo de ETL.
O curso Python e APIs: conhecendo a biblioteca Requests possui 114 minutos de vídeos, em um total de 56 atividades. Gostou? Conheça nossos outros cursos de Engenharia de Dados em Data Science, ou leia nossos artigos de Data Science.
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.