
PROJET ETUDIANT : API Restful avec Django Rest Framework
Ce projet SOFTDESK SUPPORT consiste en la conception et le développement d’une API REST complète avec Django REST Framework, dans le cadre de la gestion de projets collaboratifs.
L’application permet à plusieurs utilisateurs de travailler ensemble autour de projets, en gérant des tickets (issues) et des commentaires, tout en respectant des règles de permissions précises selon les rôles (auteur, contributeur, utilisateur assigné).
Chaque projet peut contenir plusieurs issues, elles-mêmes enrichies par des commentaires. L’API intègre un système d’authentification sécurisé (JWT), ainsi qu’une gestion fine des droits d’accès afin de garantir que chaque utilisateur ne peut effectuer que les actions qui lui sont autorisées.
Une attention particulière a été portée à :
- la structuration de l’API (ViewSets, serializers multiples)
- la gestion des permissions personnalisées
- l’optimisation des requêtes
- la pagination des résultats
- la qualité des réponses (formats, erreurs explicites)
Ce projet met en avant une architecture claire, respectant les bonnes pratiques de séparation des responsabilités entre serializers, vues et permissions.
Problématiques rencontrées :
1. Gestion des permissions complexes
Problème : Certains utilisateurs pouvaient accéder ou modifier des ressources (issues, commentaires, projets) sans respecter les règles métier (auteur, contributeur, assigné).
Solution : Mise en place de permissions personnalisées dans DRF avec has_permission et has_object_permission, en séparant clairement les cas (lecture, modification, assignation, etc.).
Ce que j’ai appris :
- Différence entre authentification et permissions
- Gestion fine des droits d’accès côté back-end
- Importance de structurer les règles métier pour éviter les effets de bord
2. Problème d’imports circulaires
Problème : Impossible d’importer certaines vues dans les permissions à cause d’un import circulaire entre modules.
Solution : Utilisation de view.basename, view.action et des kwargs plutôt que d’importer directement les classes de vues.
Ce que j’ai appris :
- Comprendre et éviter les imports circulaires
- Utiliser le contexte DRF (view, kwargs) intelligemment
- Concevoir un code moins couplé
3. Gestion des serializers selon le contexte
Problème : Besoin d’afficher des données différentes selon les endpoints (ex : inclure les commentaires dans le détail d’une issue mais pas dans une liste ou dans un projet).
Solution : Création de serializers distincts (List / Detail) et ajout dynamique de champs en fonction du contexte.
Ce que j’ai appris :
- Adapter les serializers aux besoins de l’API
- Éviter la surcharge de données inutiles
- Structurer des réponses API propres et optimisées
4. Mauvais codes de réponse HTTP (403 vs 404)
Problème : Certaines routes retournaient 404 Not Found au lieu de 403 Forbidden, ce qui donnait une mauvaise information côté client.
Solution : Correction du get_queryset() pour ne pas filtrer trop tôt les objets, et laisser les permissions gérer les accès.
Ce que j’ai appris :
- Différence entre ressource inexistante et accès interdit
- Importance des bons codes HTTP dans une API
- Interaction entre queryset et permissions
En quelques mots-clés :
- Django
- Django REST Framework
- API REST
- Backend
- Python
- Authentification JWT
- Permissions personnalisées
- Gestion des rôles
- CRUD API
- Pagination
- Optimisation ORM
- Architecture logicielle
- Clean Code
- Sécurité API
- Tests API
V01
Le code source : repository GitHub
Exemple d’exécution :
A bientôt ! 😉
