consuming apis with python

20
Consuming your APIs with Python Michael Petychakis, Ntua

Upload: michael-petychakis

Post on 17-Jul-2015

187 views

Category:

Software


1 download

TRANSCRIPT

Consuming

your APIs with

Python

Michael Petychakis, Ntua

{

"@context":{

"schema":"http://schema.org/",

"as":"http://www.w3.org/ns/activitystreams#"

},

"@type": "schema:Person",

"schema:name": "Michael Petychakis",

"schema:jobTitle": "Phd Student",

"schema:telephone": "(425) 123-4567",

"schema:email":"[email protected]",

"schema:url": "http://www.mpetyx.com",

"schema:nationality":"Greece",

"as:actor":{

"@id":"http://www.twitter.com/mpetyx"

}

}

About @mpetyx

958 million websites

60 trillionweb pages

Each API is Unique

http://www.slideshare.net/busaco/presentatio

ns

http://www.imdb.com/title/tt0401383/

http://www.last.fm/music/Moby

http://vimeo.com/channels/731014

Name each resource by using URLs

+optional parameters

(useful for pagination, partial responses,

filtering,…)

/snakes?limit=3&offset=14

/snakes?fields=name,age,description

Design accepted representations to be sent

by potential clients

consider existing standardized data formats

e.g., HTML, Atom, JSON,…

Accept: application/json (Digg)

/venue.json (Foursquare)

http://api.sciencemuseum.org.uk/exhibitions/

?output=json

Choose the representation(s) of the

response to be sent to client

https://github.com/mpetyx/apimeetup

“Clone” the code

# Step one for every Python app that

talks over the web.

$ pip install requests

Requirements

import requests

resp = requests.get('http://apiathens.herokuapp.com/tasks/')

if resp.status_code != 200:

# This means something went wrong.

raise ApiError('GET /tasks/ {}'.format(resp.status_code))

for todo_item in resp.json():

print('{} {}'.format(todo_item['id'],todo_item[title]))

GET /Tasks

task = {"summary": "Take out trash", "description": "" }

resp =

requests.post('http://apiathens.herokuapp.com/tasks/',

json=task)

if resp.status_code != 201:

raise ApiError('POST /tasks/

{}'.format(resp.status_code))

print('Created task. ID: {}'.format(resp.json()["id"]))

POST /Task

# todo.py

def get_tasks():

pass

def describe_task(task_id):

pass

def add_task(summary, description=""):

pass

def task_done(task_id):

pass

def update_task(task_id, summary, description):

pass

#todo.py

def _url(path):

return 'http://apiathens.herokuapp.com' + path

Helper Function

import requests

def get_tasks():

return requests.get(_url('/tasks/'))

def describe_task(task_id):

return requests.get(_url('/tasks/{:d}/'.format(task_id)))

def add_task(summary, description=""):

return requests.post(_url('/tasks/'), json={

'summary': summary,

'description': description,

})

def task_done(task_id):

return requests.delete(_url('/tasks/{:d}/'.format(task_id)))

def update_task(task_id, summary, description):

url = _url('/tasks/{:d}/'.format(task_id))

return requests.put(url, json={

'summary': summary,

'description': description,})

Integrated Code

import todo

resp = todo.add_task("Take out trash")

if resp.status_code != 201:

raise ApiError('Cannot create task: {}'.format(resp.status_code))

print('Created task. ID: {}'.format(resp.json()["id"]))

resp = todo.get_tasks()

if resp.status_code != 200:

raise ApiError('Cannot fetch all tasks: {}'.format(resp.status_code))

for todo_item in resp.json():

print('{} {}'.format(todo_item['id'], todo_item[title]))

Let’s Use our Library!

Thank you

Michael Petychakis

@mpetyx

<a

href="mailto:[email protected]?Subject=

Hello" target="_top">Drop me an e-mail</a>