Usando Python ( requests ) para lidar com apis REST da web

Apis escolhidas

Passos que serão executados para cada api:
  • Descrição da api
  • Formas de autenticação
  • Recuperação de alguns recursos
  • Criação de alguns recursos
  • Verificar a existência de outros verbos HTTP

API do GitHub

Na api do github é possível manusear cada parte de um projeto programaticamente, por exemplo : criar repositórios, criar issues, comentar, buscar por dados de projetos, dados de usuários e por aí vai. Muito vasta por sinal.

Endpoints localizados em : GitHub

Formas de autenticação

Para algumas operações que faremos precisamos estar autenticados de alguma forma na api do github, para isso temos algumas opções:

A Personal Token e Basic Autentication são praticamente iguais, as duas necessitam do username como campo, mas a primeira forma usar um token que é criado na página de configurações do usuário e a segunda usa a própria senha do dele.

Vamos aos exemplos:

Personal Token

import requests

auth = requests.http_method("https://api.github.com/user",
                    auth=("SEU_USUARIO","SEU_TOKEN"))

Oura forma usando o Personal Token

import requests

# Criando um cabeçalho com o token criado na sua conta do github
header_authorization = {"Authorization":"token {}".format(SEU_TOKEN)}

# Fazendo a requisição pro endpoint passando o cabeçalho
#com o token de autenticação
response = requests.http_method(endpoint,
                    headers=header_authorization)

Basic Authentication

import requests

auth = requests.http_method("https://api.github.com/user",
                    auth=("SEU_USUARIO","SUA_SENHA"))

E nas duas chamadas retornará os mesmos dados. Para uma visualização pública desses dados acesse Meu perfil.

Usando os dados da requisição autenticada virá mais dados, mas por questões de segurança, foram omitidos.

Vamos tentar algumas operações

Obtendo dados de um usuário

  • Autenticação : Para obter dados sensíveis SIM , mas também há consulta pública
  • Endpoint : htts://api.github.com/users/:username
  • Método HTTP : GET
>> import requests
>> url_user = "htts://api.github.com/users/{}"
>> user = url_user.format("Marlysson")
>> response = requests.get(user).json()
>> nome = response.get("name")
Marlysson Silva
>> repos = response.get("public_repos")
34

Aqui você pode ver a lista completa das propriedades permitidas na consulta pública

Mas nem só de consultas públicas vive uma api, principalmente a do github. Como foi visto nos endpoints do github são vários e vários recursos a serem trabalhados..

Criação de um repositório

Para essa parte precisamos estar autenticados na api, para isso vamos usar a segunda forma de autenticação da Personal Token, passando ela no cabeçalho da requisição.

Dados necessários para fazer a requisição:

  • Autenticação : Sim
  • Endpoint : https://api.github.com/user/repos
  • Método HTTP : POST
  • Corpo da requisição de entrada : Dados
import requests
import json

endpoint = "https://api.github.com/user/repos"

#Criando o cabeçalho de autorização
header_auth = {"Authorization":"token {}".format("SEU_TOKEN_AQUI")}

corpo = json.dumps({"name":"Novo-Projeto"})

# Criando a requisição. Passando os dados de input para o endpoint
# e passando o cabeçalho de autorização
response = requests.post(endpoint,data=corpo,headers=header_auth)

headers = response.headers
dados = response.json()

print("Status da requisiçao: {}".format(headers.get("Status")))
print("Localização na api: {}".format(response.headers.get("Location")))
print("Url do proejto: {}".format(dados.get("html_url")))

E como retorno da criação do recurso temos:

Status da requisição : 201 Created
Localização na api: https://api.github.com/repos/Marlysson/Novo-projeto
Url do projeto: https://github.com/Marlysson/Novo-projeto

Uso de outros verbos HTTP

A api suporta vários outros verbos HTTP,e são eles:

  • HEAD ( Usado para obter informações dos cabeçalhos das requisições )
  • PATCH ( Usado para atualizar alguns atributos do recurso, mas como é um verbo incomum nas requisições HTTP, a api também suporta o POST )
  • PUT ( Usado para substituir recursos ou coleções existentes )
  • DELETE ( Deletar recursos )

Api do Json Placeholder

É um serviço para desenvolvedores testarem como suas integrações se comportarão quando for feita o deploy final, isso é feito através de acesso à dados fictícios providos pelo serviço. A ferramenta trabalha com os seguintes recursos: Posts, Comments, Albums, Photos, Todos, Users

Para exemplificar vamos trabalhar com a entidade Todos.

Formas de autenticação

Não possui, pois é somente para tratamento de alguns recursos web.

Algumas operações

Recuperação de itens

Recuperando uma entidade Todos

>>> import requests
>>> response = requests.get("https://jsonplaceholder.typicode.com/todos/1")
>>> response.json()
{
  "userId": 1,
  "id": 1,
  "title": "delectus aut autem",
  "completed": false
}

Criação de recursos

>>> import requests
>>> url_todos = "https://jsonplaceholder.typicode.com/todos
>>> data = {"userId":1, "title":"Nova tarefa", "completed":False}
>>>
>>> requests.post(url_todos,data=data).json()
{
  "userId": 1,
  "id": 201,
  "title": "Nova tarefa",
  "completed": False
}

Uso de outros métodos

Essa api suporta mais 3 métodos HTTP, e são eles:

  • PUT ( requests.put(url_resource,data) )
  • PATCH ( requests.patch(url_resource,data) )
  • DELETE ( requests.delete(url_resource) )

Api Via cep

Api responsável por retornar os dados geográficos referentes à um dado cep.

Formas de autenticação

Não possui, requisições públicas

Verificando operações sobre os recursos

Recuperando um cep

>>> url_cep = "https://viacep.com.br/ws/{cep}/json/"
>>> cep = "01001000"
>>> resource = url_via_cep.format(cep=cep)
>>> requests.get(resource).json()
{
  "cep": "01001-000",
  "logradouro": "Praça da Sé",
  "complemento": "lado ímpar",
  "bairro": "Sé",
  "localidade": "São Paulo",
  "uf": "SP",
  "unidade": "",
  "ibge": "3550308",
  "gia": "1004"
}

Não possui métodos adicionais

Código dos scripts organizados estão no seguinte repositório:

Repositório

Marlysson Silva

Graduando em Análise e Desenvolvimento de Sistemas , programador interessado nas vastas possibilidades de desenvolvimento, seja web(frontend ou backend) ou envolvendo cálculos de processamento. Além de desenvolvimento web tenho interesse na junção informática + processamento , seja usando algoritmos elementares ou usando o auxílio da matemática e estatística, hora ou outra postarei algo a respeito :D

Piauí - Brasil Github Facebook Twitter

Comentários