Upgrade to Pro — share decks privately, control downloads, hide ads and more …

What's wrong with API wrappers

What's wrong with API wrappers

Wrappers are an essential tool for interacting with web APIs. They reduce the amount of work needed to make requests and sometimes, only sometimes prevent the developer from dealing with extensive documentations. It’s common to encounter libs that require not only the study of their own documentation, but also the APIs one, duplicating the needed work. This is caused because wrappers do not follow a design pattern, each developer creates it’s own design, coding style and use their preferred tools.

Tapioca is what can be called: “a wrapper generator”. Creating API wrappers with Tapioca is extremely easy and fast. For example, it took 1 hour to write the full wrapper for the Parse.com REST API. But this is not the more important thing, Tapioca libs have a similar interface so once understood how they work, developers can work with any other without the need to learn a new interface.

Tapioca is also thought to comply with REST features and takes HATEOAS (Hypermedia as the engine of application state) seriously, so “following” links and pagination are natively supported. Explorability is also a key concept and developers are encouraged to play with Tapioca packages and find their way through APIs before writing their final code. Although there are some production ready Tapioca wrappers, it is a work in progress, there are still many features to be explored.

Filipe Ximenes

July 20, 2015
Tweet

More Decks by Filipe Ximenes

Other Decks in Programming

Transcript

  1. What??? ◇ APIs define the interaction interface of a software.

    ◇ software might mean: ◦ a Python class ◦ a database ◦ some hardware ◦ some plugin ◦ a library ◦ a web service
  2. Eg.: Python class class User(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))
  3. Eg.: web service GET /v1/media/000000 HOST: https://api.instagram.com POST /v1/media/000000/comments HOST:

    https://api.instagram.com DELETE /v1/media/000000/comment/111111 HOST: https://api.instagram.com
  4. I want to retrieve basic user data after he logs

    in using his facebook account.
  5. Our options ◇ Option 1 ◦ Read Facebook's API documentation.

    ◦ Use Python's urllib2 to make requests. ◇ Option 2 ◦ Read Facebook's API documentation. ◦ Use Requests lib to make requests ◇ Option 3 ◦ Search for an open source lib with ready to go python methods for making endpoint requests. ◦ Go to the beach.
  6. Web API libs, aka web API wrappers ◇ What is

    it? ◦ Implementation of a web API documentation using a programming language. ◇ What is it for? ◦ Creates a layer over HTTP using your favorite programming language ▪ authentication ▪ composing urls ▪ prepare requests ▪ process responses ▪ format data
  7. 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 is a dict
  8. Some notes ◇ Need to study facepy's documentation ◦ Request

    interfaces ◦ Parameter passing ◦ Response access ◦ Exception treatment ◇ Need to study Facebook's documentation ◦ Endpoints and HTTP methods available ◦ Parameters for each endpoint ◦ Data formatting for each request or response
  9. Some notes ◇ pydoc documentation ◇ Not very pythonic code

    ◇ No pagination support ◇ A method for each endpoint ◇ Models instead of dictionaries
  10. I need a system that monitors Twitter, Facebook, Instagram, Blogger

    and Tumblr, to capture posts from each one of my users.
  11. The ideal wrapper ◇ Authentication ◇ Requests as the engine

    of requests ◇ Pagination support (generators) ◇ Exception raising according to error codes (403, 500...) ◇ Hypermedia support (links, HATEOAS) ◇ Explorable ◇ Simple documentation
  12. tapioca wrapper features ◇ A method for each endpoint ◇

    Explorable ◇ Requests lib ◇ Pagination support ◇ Hypermedia support ◇ Quick documentation access
  13. Notes ◇ We still need to read the API documentation

    but not the wrapper documentation. ◇ Fun to explore the package. ◇ Writing new flavours: ◦ Almost 100% declarative. ◦ Few lines of code. ◦ Batteries included. ◇ There's a lot more to improve.