Technologie - Django REST framework : des API REST solides pour vos applications Django

Django REST framework (DRF) est la bibliothèque de référence pour construire une API REST au-dessus de Django. Naeka s'en sert pour faire dialoguer ses applications Django avec leur frontend Ember.js ou Vue.js, et avec les systèmes de ses clients.

Développement Django REST framework - Expert DRF Naeka

L'expertise Django REST framework chez Naeka

Sur nos projets, Django gère les données et la logique métier, et le frontend tourne dans le navigateur. Les deux se parlent par une API REST, et cette API, nous l'écrivons avec Django REST framework.

Trois de nos réalisations reposent sur une API DRF :

  • Cobra : La cohorte COBRA, promue par l’INSERM, a pour but de suivre les facteurs de risques cliniques, biologiques et génétiques de l’évolution de l’asthme et la BPCO.
  • Colibri : Outil d'aide à la consultation dédié aux pneumologues pour la BPCO, les PID ou encore l'Asthme. Colibri est utilisé par plus de 1000 professionnels de la santé.
  • Simplauto : Simplauto est un site e-commerce à fort trafic, il permet aujourd'hui à des milliers d'utilisateurs de réserver le contrôle technique de leurs véhicules.

Sur Cobra et Colibri, l'API sert un frontend Ember.js. Sur Simplauto, elle sert un frontend Vue.js.


Ce que DRF apporte à Django

Django sait déjà gérer les modèles, l'authentification et les permissions. DRF ajoute ce qu'il faut pour exposer tout ça proprement en JSON.

Les sérialiseurs

Un sérialiseur décrit comment un objet devient du JSON, et comment du JSON reçu redevient un objet valide. Un ModelSerializer se construit à partir d'un modèle Django en quelques lignes. On y ajoute les règles de validation métier : une date de fin après la date de début, un champ obligatoire seulement dans certains cas.

Les vues et les routes

Les ViewSet regroupent la liste, le détail, la création, la modification et la suppression d'une ressource. Un routeur génère les URL correspondantes. On garde des vues sur mesure pour les actions métier qui ne rentrent pas dans ce moule, comme valider un dossier ou relancer un calcul.

Les permissions et l'authentification

C'est souvent la partie la plus délicate d'une API. Dans une application médicale, un investigateur ne doit voir que les patients de son centre, et un moniteur d'étude ne doit pas pouvoir les modifier. DRF permet d'écrire ces règles une fois, dans des classes de permission testables, au lieu de les disperser dans chaque vue.

Côté authentification, DRF gère la session Django, les tokens, et le JWT avec djangorestframework-simplejwt.

Le reste de la boîte à outils

  • la pagination, les filtres (avec django-filter) et le tri sur les listes
  • le throttling, pour limiter le nombre d'appels par utilisateur ou par client
  • le versioning de l'API, pour la faire évoluer sans casser les applications qui l'utilisent déjà
  • l'API navigable, une interface web générée automatiquement, très pratique pendant le développement

Notre façon de construire une API DRF

Documentation OpenAPI

Nous générons le schéma OpenAPI de l'API avec drf-spectacular. Il sert de documentation aux équipes qui consomment l'API, et il peut générer des clients typés pour le frontend ou pour des partenaires.

Performances

Le piège classique d'une API Django est le problème N+1 : une liste de 50 dossiers qui déclenche 51 requêtes SQL parce que chaque dossier va chercher son patient séparément. Nous le traitons avec select_related et prefetch_related, et nous vérifions le nombre de requêtes dans les tests pour qu'il ne revienne pas. Le cache Redis vient en complément sur les ressources les plus lues.

Tests

Chaque route a ses tests : le cas nominal, les erreurs de validation, et surtout les permissions. Pour chaque rôle, on vérifie qu'il voit ce qu'il doit voir et qu'il reçoit un refus sur le reste.


Vous avez un projet d'API ?

Que vous ayez une API à créer, une API DRF existante à faire évoluer ou à remettre en ordre, contactez-nous. Si votre service ne fait que de l'API et n'a pas besoin de Django, regardez aussi notre page FastAPI.