Una forma molt comuna a l’hora d’obtenir informació de diferents fonts és mitjançant una API REST, que proporciona diferents API endpoints els quals són accessibles per tal d’aconseguir unes dades determinades. Django REST Framework és un framework que ens permet el fàcil desenvolupament d’una API REST en Python. Actualment aquesta tecnologia es fa servir a diversos projectes, com per exemple la API del Racó o el projecte UOC índex.
Introducció
Una forma molt comuna a l’hora d’obtenir informació de diferents fonts és mitjançant una API REST, que proporciona diferents API endpoints els quals són accessibles per tal d’aconseguir unes dades determinades. Django REST Framework és un framework que ens permet el fàcil desenvolupament d’una API REST en Python. Actualment aquesta tecnologia es fa servir a diversos projectes, com per exemple la API del Racó o el projecte UOC índex.
Instal·lació
Una bona pràctica és crear un entorn virtual amb tot el necessari per poder executar l’API REST creada amb Django:
# Create the project directory mkdir tutorial cd tutorial # Create a virtualenv to isolate our package dependencies locally virtualenv env source env/bin/activate # On Windows use `env\Scripts\activate`
Un cop instal·lat l’entorn, encara ens fa falta instal·lar les llibreries necessàries de Python per poder utilitzar Django:
# Install Django and Django REST framework into the virtualenv pip install django pip install djangorestframework # Set up a new project with a single application django-admin.py startproject tutorial . # Note the trailing '.' character cd tutorial django-admin.py startapp quickstart
Ara ja ho tenim tot a punt per començar el nostre projecte amb Django.
Estructura del projecte
Analitzant el que s’ha creat a dins de la carpeta tutorial
podem veure com és l’estructura d’un projecte amb Django:
env
: entorn virtual amb les llibreries instal·lades i els fitxers necessaris per a la correcta execució del projecte.tutorial
: carpeta on podem trobar la configuració del projecte. Destacarsettings.py
iurls.py
, fitxers que respectivament controlen la configuració del projecte (aplicacions instal·lades, mòduls que es poden fer servir, tipus de bases de dades suportades…) i les urls disponibles.quickstart
: carpeta on podem trobar la configuració de l’aplicació quickstart del projecte.manage.py
: executable en Python que permet la posada en marxa de l’API.
Estructura de l’aplicació
Analitzant el que s’ha creat a dins de la carpeta quickstart
podem veure com és l’estructura d’una aplicació amb Django:
models.py
: fitxer amb la informació sobre els models de dades que fa servir la nostra aplicació.views.py
: arxiu que conté totes les vistes emprades per a l’aplicació.tests.py
: fitxer per a desenvolupar possibles tests per a l’aplicació.migrations
: directori encarregat de detectar canvis en les bases de dades que fa servir l’aplicació.
És molt recomanable crear fitxers addicionals, especialment aquests dos:
urls.py
: fitxer amb les possibles urls o endpoints de l’API.queries.py
: arxiu amb les diferents crides a les bases de dades.
Tutorial
Un cop realitzada la instal·lació tal com es descriu al punt Instal·lació, crearem un nou endpoint per descriure amb més detall com funciona Django:
- Obrim l’arxiu
tutorial/tutorial/settings.py
i afegim a la llista INSTALLED_APPS ‘rest_framework’ i ‘quickstart’. - Obrim l’arxiu
tutorial/tutorial/urls.py
i afegim a la llista urlpatterns la següent url: url(r’^quickstart/’, include(‘quickstart.urls’)). Amb aquest pas ja hem fet la configuració bàsica de la nostra aplicació quickstart. - Ara a
tutorial/quickstart/views.py
afegirem les nostres primeres vistes:def index(request): return HttpResponse("Hello, world. You're at the quickstartapp index.") class Example(APIView): """ Returns data from the football player Antoine Griezmann """ def get(self, request): data = {'Player': 'Antoine griezmann','Team': 'Atlético de Madrid', 'Age': 25} return HttpResponse(json.dumps(data, indent=4, sort_keys=True), content_type="application/json")
- Anem a
/tutorial/quickstart
i creem l’arxiuurls.py
:from django.conf.urls import url from . import views urlpatterns = [ url(r'^index/', views.index, ), url(r'^griezmann/', views.Example.as_view(), name="'example'), ]
- Anem a
/tutorial
i executempython manage.py runserver
(per defecte s’executa en el port 8000) i comprovem el funcionament del nostre nou endpoint. Hauríem d’obtenir un resultat cridant a l’endpoint http://localhost:8000/quickstart/griezmann/ semblant a aquest:
{
“Age”: 25,
“Player”: “Antoine Griezmann”,
“Team”: “Atletico de Madrid”
}
Això només és un petit exemple on les dades són generades cada vegada que s’accedeix a la vista corresponent. Creant un fitxer queries.py
, podríem definir una forma més complexa d’aconseguir les dades, permetent que cada cop que es fes una crida a una determinada vista se n’anessin a buscar les dades corresponents a una base de dades determinada.
Per acabar
Hem vist com començar a desenvolupar una API REST amb Django, que ens permet un desenvolupament molt simple però alhora molt potent i fàcilment escalable. Podeu trobar la documentació oficial del framework a: http://www.django-rest-framework.org/