Créer une API web avec django et django-rest-framework

Sources :

https://docs.djangoproject.com/fr/ https://www.django-rest-framework.org/

Django

Framework web Full-Stack

La page HTML est fournie par le serveur

django-rest-framework

Extension Django

Permet de simplifier la création d'une API web

Permet in fine d'alimenter une/plusieurs applications client-side

Préparation de l'environnement de travail


mkdir tuto
cd tuto

// Création et activation d'un environnement virtuel Python
python3 -m venv venv/
source venv/bin/activate

// Installation des dépendances
pip install django djangorestframework
					

Création du squelette de l'application


django-admin startproject tuto .
django-admin startapp rest
					

find .
./rest/views.py
./rest/tests.py
./rest/admin.py
./rest/apps.py
./rest/models.py
./tuto/urls.py
./tuto/settings.py
./tuto/wsgi.py
./manage.py
  				

Mettre à jour le fichier tuto/settings.py pour lier les application django-rest-framework et rest au projet


INSTALLED_APPS = (
    ...
    'rest_framework',
    'rest.apps.RestConfig',
)
					

Initialisation de la base de données et création d'un utilisateur


python manage migrate
python manage.py createsuperuser
  --email admin@example.com
  --username admin
					

Définition d'un "Serializer" pour notre model User

... que l'on va placer dans le fichier rest/serializers.py


from django.contrib.auth.models import User
from rest_framework import serializers


class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'email')
					

Définition des "Vues"

... que l'on va placer dans le fichier rest/views.py


from django.contrib.auth.models import User
from rest.serializers import UserSerializer
from rest_framework import generics


class UserList(generics.ListCreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer


class UserDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
					

Router les urls vers les vues

... dans l'url dispatcher : tuto/urls.py


from django.urls import path
from rest_framework.urlpatterns import format_suffix_patterns
from rest import views

urlpatterns = [
    path("users/", views.UserList.as_view()),
    path("users//", views.UserDetail.as_view()),
]

urlpatterns = format_suffix_patterns(urlpatterns)
          

Au format json

Pour aller plus loin

  • Gestion de l'authentification
  • Permissions
  • Pagination
  • Filtres
  • Caching
  • Throttling
  • Versionning
  • Création du schéma de l'API

Exemple en ligne

https://restframework.herokuapp.com/

login : admin
mot de passe : password123