Wiki

Clone wiki

django-roa / Home

Django-ROA (Resource Oriented Architecture)

Use Django's ORM to model remote API resources.

Not very clear? A picture is worth a thousand words:

Django-ROA diagram

In this diagram, the repository can be whatever you want, the only requirement is that it handles standard HTTP requests. As a developer all you have to do next is to use Django's ORM in your Django application (connectors are part of Django-ROA).

If you know how ActiveRecord works (from RoR), that's very close to it.

What problems does it solve?

Here are some ideas:

  • data handled by a data warehouse (SOA)
  • multiple database (as you can customize URLs per model)
  • schema-less backend (e.g. CouchDB speaks HTTP)
  • access a remote API with your own models (and with django's built-in admin!)
  • plug it on top of an RDF triple store (probably my next pony)
  • your crazy use-case? ;-)

A basic Twitter example

The complete example is available in source code examples. First let's define some models with URLs from Twitter's API:

class User(Model):
    name = models.CharField(max_length=50)
    screen_name = models.CharField(max_length=50)
    description = models.TextField()

    @staticmethod
    def get_resource_url_list():
        return u'http://twitter.com/users/show.json'

class Tweet(Model):
    text = models.TextField()
    source = models.CharField(max_length=50)
    user = models.ForeignKey(User)

    @staticmethod
    def get_resource_url_list():
        return u'http://twitter.com/statuses/public_timeline.json'

Now we can launch a Django shell and test our models:

$ python manage.py shell
>>> from twitter_roa.models import User, Tweet
>>> tweets = Tweet.objects.all()
>>> atweet = tweets[0]
>>> print atweet.text
Uhm can I get a boyfriend with muscles and no bullshit. Yumm. Xoxo
>>> print atweet.user.name
Jacob Maldonado

It works! But even more interesting, you can use your lovely Django's built-in admin with your new models:

Tweets in your Django admin

Now you'll even be able to clic on users to go to the Django's admin view. And so on.

Getting started

Development

Need help?

Discussing

You can find me in #bgk@irc.freenode.net as david`bgk or through my website.

Declaring bugs

Go to the issue tracker, verify you request doesn't exist and then submit it.

Fixing bugs

Use the power of Mercurial Queues and submit your patch(es). Help is really appreciated :-)

Updated

Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.