Django API REST

django REST framework
Django API REST

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. Destacar settings.py i urls.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:

  1. Obrim l’arxiu tutorial/tutorial/settings.py i afegim a la llista INSTALLED_APPS ‘rest_framework’ i ‘quickstart’.
  2. 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.
  3. 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")
    
  4. Anem a /tutorial/quickstart i creem l’arxiu urls.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'),
    ]
    
  5. Anem a /tutorial i executem python 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/