terça-feira, 14 de agosto de 2012

Interface REST no Django

Uma das bibliotecas mais interessantes que encontrei foi a djangorestframework. Ela disponbiliza qualquer classe da sua aplicação sob várias formas de output, tais como REST, json, xml, etc.

O mais interessante da biblioteca é que ela não é intrusiva e é altamente plugável, ou seja, você pode adicionar as funcionalidades da biblioteca sem precisar alterar quase nenhuma linha da sua aplicação.

A instalação é bem simples para ambientes Debian/Ubuntu:

sudo apt-get install python-pip python-dev build-essential
sudo pip install --upgrade pip
sudo pip install djangorestframework

Uma vez instalada, inclua a biblioteca no seu projeto, alterando o settings.py


INSTALLED_APPS += (
    'djangorestframework',
)

Por fim, defina quais as classes que você vai querer disponibilizar, no url.py


Por exemplo, se você tiver uma classe chamada Area, basta definir um "ModelResource" que irá publicar essa classe:

# -*- coding: utf-8 -*-

from django.conf.urls.defaults import patterns, include, url
from django.contrib import admin

from djangorestframework.resources import ModelResource
from djangorestframework.views import ListOrCreateModelView, InstanceModelView

from categorizacao.models import Area

class AreaResource(ModelResource):
    model = Area

urlpatterns = patterns('',
    # API
    # Area
    url(r'^api/area/$',
        ListOrCreateModelView.as_view(resource=AreaResource)),
    url(r'^api/area/(?P<pk>[^/]+)/$',
        InstanceModelView.as_view(resource=AreaResource)),

    # Home
    url(r'^$', 'categorizacao.views.home', name='home'),

    # Admin
    url(r'^admin/', include(admin.site.urls)),
)

Por fim, faça o teste:

http://127.0.0.1:8000/api/area/

Onde /area/ é o nome da sua classe.

Repare que essa API abre a sua classe tanto a leitura como para gravação.
Ou seja, sem a programação de uma autenticação, as 2 views ListOrCreateModelViewInstanceModelView  abrem a classe para que qualquer pessoa possa incluir/alterar ou excluir dados na classe/tabela.

Em um próximo post, vou tentar mostrar como foi a minha experimentação dos recursos de autenticação da biblioteca. Agradecimentos especiais ao Ricardo Dani que me mostrou a biblioteca e montou os primeiros testes e tutoriais.