Retour aux projets

DRF-QueryLang

1 semaine - Septembre 2025 Brest
DRF-QueryLang

DRF Query Lang est une librairie open-source pour Django REST Framework qui apporte un langage de requête léger et flexible aux API Django, inspiré de GraphQL.

Problématique

Les APIs REST traditionnelles souffrent de deux problèmes majeurs :

  • Over-fetching : récupération de données inutiles
  • Under-fetching : nécessité de multiples requêtes

DRF Query Lang résout ces problèmes en permettant aux clients de spécifier précisément les données nécessaires.

Fonctionnalités

Sélection Dynamique de Champs

Définissez exactement quels champs récupérer :

GET /query-lang/?query=User{"email", "username"}

Traversée de Relations

Suivez les relations entre modèles facilement :

GET /query-lang/?query=User{"email", Profile:profile{"bio"}}

Agrégations

Utilisez des fonctions intégrées :

GET /query-lang/?query=User{count(), "email"}

Exemple d'Utilisation

Requête :

GET /query-lang/?query=User{"email", Profile:profile{"bio"}}

Réponse :

[
  {"email": "[email protected]", "profile": {"bio": "Hello"}},
  {"email": "[email protected]", "profile": {"bio": "World"}}
]

Optimisations Automatiques

Prévention du Problème N+1

  • Génération automatique de select_related et prefetch_related
  • Querysets optimisés pour performances maximales

Serializers Dynamiques

  • Génération à la volée des serializers DRF
  • Adaptation automatique aux champs demandés

Sécurité Multi-Couches

Protection des Modèles

Blocage des modèles critiques par défaut :

BLOCKED_MODELS = ['User', 'Permission']

Protection des Champs

Champs sensibles automatiquement bloqués :

  • password
  • is_staff
  • is_superuser

Autorisation Personnalisable

AUTHORIZATION_METHOD = 'myapp.auth.check_permissions'

Architecture Technique

Parser Robuste

  • Analyse syntaxique du DSL
  • Gestion d'erreurs précise
  • Validation des requêtes

Optimisation ORM

  • Compréhension profonde de l'ORM Django
  • Génération de requêtes SQL optimales
  • Réduction drastique des requêtes

Installation

pip install drf-query-lang

Démonstration d'Expertise

  • Introspection Python avancée
  • Design de DSL (Domain Specific Language)
  • Optimisation de performances
  • Sécurité applicative

🔗 Documentation
🔗 PyPI Package