Consumindo APIs com Python – Parte 1

Há casos em que precisamos consumir dados de um servidor remoto para incrementar uma aplicação utilizando APIs externas. No Python este processo é muito simples e neste artigo vamos aprender a consumir APIs com Python.

O que são APIs?

Uma API, basicamente, é um conjunto de padrões de requisições e respostas que facilitam a construção de aplicações. Elas são responsáveis por retornar vários tipos de informações, existem APIs para retornar o clima de uma determinada cidade, o preço do dólar em um país, etc.

Possuímos aqui no blog um ótimo artigo que exemplifica muito bem o que é e como funciona uma API.

Python - Fundamentos
Curso de Python - Fundamentos
CONHEÇA O CURSO

API utilizada

Para simular uma API completa, vamos utilizar o tw-dev-server , uma aplicação desenvolvida pelo Akira Hanashiro para simular uma API e, assim, conseguir realizar requisições HTTP e testar nossa aplicação.

Aqui no blog possuímos um artigo que explica todo o processo de instalação e uso do tw-dev-server, é muito importante que você leia e execute a aplicação em sua máquina.

Criando e configurando projeto

Agora que já possuímos a API rodando em nossa máquina, estamos prontos para consumí-la utilizando o Python. Para isso, vamos partir de uma aplicação muito simples, apenas um arquivo chamado main.py :

Criando projeto base

O primeiro passo, então, é instalar a biblioteca requests, responsável por enviar requisições HTTP com o Python. Para isso, com o pip instalado, basta executar o seguinte comando no terminal do próprio PyCharm:

pip install requests

Instalando biblioteca requests

Python - Orientação a objetos
Curso de Python - Orientação a objetos
CONHEÇA O CURSO

Criando registros na API

Para buscar os dados de uma API com Python é bem simples. Primeiramente, vamos criar alguns registros na API utilizando o próprio GUI do tw-dev-server na seguinte URL: https://treinaweb.github.io/tw-dev-server/.

Vale lembrar que o servidor precisa estar rodando em sua máquina para que tudo funcione corretamente:

Servidor do tw-dev-server rodando

Agora, basta criar alguns registros na API utilizando o navegador. Para isso, é só enviar uma requisição do tipo POST com os dados do registro. No meu caso, criei uma API de tarefas com título e descrição:

Cadastrando dados na API

Buscando dados de uma API

Agora, com a API pronta e com registros, podemos buscar estes dados utilizando o Python. Para isso, vamos criar um método chamado buscar_dados() em nosso projeto. Este método irá utilizar a biblioteca requests para enviar uma requisição GET (verbo responsável por informar à API que queremos listar seus dados) para a rota definida na API (no meu caso http://localhost:3002/api/todo):

import requests

def buscar_dados():
    request = requests.get("http://localhost:3002/api/todo")
    print(request.content)
Django - Fundamentos
Curso de Django - Fundamentos
CONHEÇA O CURSO

Depois, basta adicionar como parâmetro do print o conteúdo da variável request. Agora, para executar o método buscar_dados() quando executarmos o arquivo main.py, basta adicionar a chamada no seguinte bloco de código:

import requests

def buscar_dados():
    request = requests.get("http://localhost:3002/api/todo")
    print(request.content)

if __name__ == '__main__':
    buscar_dados()

Com isso, estamos enviando uma requisição do tipo GET (para buscar dados) para a rota http://localhost:3002/api/todo e, com isso, buscando todos os dados daquela API.

Agora, ao executar o arquivo main.py teremos o seguinte retorno:

Dados retornados da API

No terminal do PyCharm, podemos ver o conteúdo da API sendo impresso, o que significa que a requisição foi feita com sucesso.

Porém, esta resposta é exibida em bytes, se quisermos convertê-la para um formato de dicionário e, assim, acessar seus atributos de uma forma mais simples, basta utilizar a biblioteca json do próprio Python:

import requests
import json

def buscar_dados():
    request = requests.get("http://localhost:3002/api/todo")
    todos = json.loads(request.content)
    print(todos)
    print(todos[0]['titulo'])

if __name__ == '__main__':
    buscar_dados()

Esta biblioteca, basicamente, converte a resposta de bytes para um dicionário do Python, facilitando o acesso aos atributos de forma individual:

Convertendo resposta da API

Filtrando dados por ID

Há casos em que precisamos buscar um dado a partir do seu ID (ou qualquer outro atributo). Nestes casos, podemos enviar uma requisição com o verbo GET com o parâmetro que precisamos filtrar.

Utilizando o tw-dev-server, para filtrar os registros, enviamos este parâmetro na rota da requisição, como podemos ver abaixo:

import requests
import json

def buscar_dados_id(id):
    request = requests.get(f"http://localhost:3002/api/todo?id={id}")
    todo = json.loads(request.content)
    print(todo)
    print(todo['titulo'])

if __name__ == '__main__':
    # buscar_dados()
    buscar_dados_id("h7i39LVliST6r8kI")

Com isso, ao executar o código acima, será retornado apenas a todo com o id passado como parâmetro:

Filtrando dados da API

Conclusão

Como vimos acima, é muito simples consumir uma API com o Python, bastando apenas informar a rota desejada e qual verbo será utilizado para esta requisição. Neste artigo vimos como listar dados da API, no próximo artigo desta série veremos como cadastrar, editar e remover dados de uma API remota com o Python. Até lá! 😀

Deixe seu comentário
Share

Professor na TreinaWeb e graduado em Sistemas de Informação pelo Instituto Federal da Bahia. Apaixonado por desenvolvimento web, desktop e mobile desde os 12 anos de idade. Já utilizou todos os sistemas operacionais possíveis, mas hoje se contenta com o OSX instalado em seu desktop. Quando não está trabalhando, é IGL e Awper do time de CS:GO da Treinaweb. Até passou em uma peneira do Cruzeiro, mas preferiu estudar Python.

© 2004 - 2019 TreinaWeb Tecnologia LTDA - CNPJ: 06.156.637/0001-58 Av. Paulista, 1765, Conj 71 e 72 - Bela Vista - São Paulo - SP - 01311-200