Embrulhando APIs com Tapioca
-
Upload
filipe-ximenes -
Category
Software
-
view
516 -
download
1
Transcript of Embrulhando APIs com Tapioca
Embrulhando APIs com TapiocaFilipe Ximenes
@xima
APIApplication Programming Interface
Oxe!
● APIs definem a interface de interação de um software ou um pedaço de sofware.
● Podem ser a interface de:○ uma classe de Python○ banco de dados○ hardware○ plugin○ biblioteca○ serviço web
Exemplo: classe de Pythonclass MyClass(object):
name = ''
email = ''
def update_data(self, name, email):
self.name = name
self.email = email
def talk(self, message):
print('{} says: {}'.format(self.name, message))
Exemplo: serviço web
GET /v1/media/000000HOST: https://api.instagram.com
POST /v1/media/000000/commentsHOST: https://api.instagram.com
DELETE /v1/media/000000/comment/111111HOST: https://api.instagram.com
Integrações com serviços web
“quero que meu usuário possa salvar as informações dele no Evernote!"
“preciso enviar os dados do meu sistema para o Sales Force do cliente."
“vou desenvolver o meu próprio google maps para depois poder construir um app de GPS”
Said no one ever
"eu quero que meu app tenha login com facebook para pegar todas as informações do
usuário sem que ele tenha que digitar"
Cabeça do desenvolvedor
● V1○ Ler a documentação da API do Facebook.○ Utilizar a urllib2 do python para fazer as requisições.
● V2○ Ler a documentação da API do Facebook.○ Utilizar a lib Requests do python para fazer as
requisições● V3
○ Procurar no google uma lib que já tenha todas as requisições mapeadas.
○ Ir pra praia tomar cerveja.
● O que é?○ Aplicação prática em uma LP da documentação.
● Pra que serve?○ Abstrair o HTTP na sua linguagem preferida
■ autenticação■ montar urls■ preparar requests■ processar responses■ formatar dados
Libs ou Wrappers de API web
facepy
facepy
from facepy import GraphAPI
graph = GraphAPI(oauth_access_token)
my_links = graph.get(path='me/links', page=True)
for link in my_links:
print(link) # link -> dicionário
facepy
graph = GraphAPI(oauth_access_token)
endpoint = '{}/{}'.format(user_id, 'statuses')
data = ??
user_data = graph.post(endpoint, **data)
Algumas observações
● Necessidade de estudar a biblioteca Facepy○ Interfaces de requests○ Passagem de parâmetros○ Leitura dos resultados○ Tratamento de erros e excessões
● Necessidade de estudar a documentação da API○ Endpoints e métodos HTTP disponíveis○ Parâmetros disponíveis para cada endpoint○ Formatação dos dados passados
python-twitter
python-twitterimport twitter
api = twitter.Api(consumer_key='consumer_key',
consumer_secret='consumer_secret',
access_token_key='access_token',
access_token_secret='access_token_secret')
statuses = api.GetUserTimeline(
user_id=user_uid, count=20,
since_id=id_of_first_tweet)
python-twitter
python-twitter
python-twitter
● Documentação em pydoc● Código pouco pythonico● Sem suporte a paginação● Cada endpoint da API é um método do
wrapper● Modelos ao invés de dicionários
“eu quero um sistema que monitora Twitter, Facebook, Instagram, Blogger e Tumblr e
captura informações de todas as postagens dos usuários.”
O wrapper ideal
● Autenticação● Lib Requests como motor de requisições● Suporte a paginação (generators)● Suporte a erros através de excessões (403,
500...)● Suporte a hypermedia (links)● Explorável● Documentação simples
Tapioca WrapperDelicioso e vem em diversos sabores!
tapioca-wrapper
O que é?
Framework para criação de wrappers de APIs web
[Demo] Tapioca Facebook
https://github.com/vintasoftware/tapioca-facebook
token: https://developers.facebook.com/tools/explorer/
Desenvolvendo um Tapioca
Faça o seu próprio sabor
O código
Código Pythonhttps://github.com/vintasoftware/tapioca-facebook/blob/master/tapioca_facebook/tapioca_facebook.py
Mapeamento dos endpointshttps://github.com/vintasoftware/tapioca-facebook/blob/master/tapioca_facebook/resource_mapping.py
● Mapeamento dos endpoints● Explorável● Requisições (get/post/put/delete…)● Suporte a generators● Suporte a hipermedia● Acesso rápido a documentação
Features de um wrapper Tapioca
LOCs
tapioca-facebook ~> 300 linhashttps://github.com/vintasoftware/tapioca-facebook/tree/master/tapioca_facebook
tapioca-twitter ~> 200 linhashttps://github.com/vintasoftware/tapioca-twitter/tree/master/tapioca_twitter
LOCs
facepy ~> 1k linhas
python-twitter ~> 6k linhas
Tempo
tapioca-parse ~> 1 hora
Notas
● Ainda há necessidade de se ler a documentação. Porém apenas a documentação da API.
● Torna divertido explorar a biblioteca.● Libs:
○ Escritas de forma quase 100% declarativa.○ Poucas linhas de código.○ Funcionais.
● Temos bastante espaço para melhorias ainda.
Perguntas?
https://github.com/vintasoftware/tapioca-wrapper
@ximagithub.com/[email protected]
www.vinta.com.br