embrulhando apis com tapioca

Post on 05-Aug-2015

516 Views

Category:

Software

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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))

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

● 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

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/filipeximenesximenes@vinta.com.br

www.vinta.com.br

top related