Graphene – GraphQL avec Python : Guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction à GraphQL et Graphene

GraphQL est un langage de requête moderne pour les API et un environnement d'exécution, développé par Facebook en 2012 pour résoudre les limitations des API REST traditionnelles. Graphene est une bibliothèque Python puissante qui offre une implémentation complète de la spécification GraphQL, avec le support de schémas typés, de mutations et d'intégration avec les systèmes ORM populaires.

Qu'est-ce que GraphQL et pourquoi l'utiliser ?

GraphQL propose une approche déclarative pour récupérer des données, où le client décrit précisément les données dont il a besoin. Contrairement à REST, où le serveur détermine la structure de la réponse, GraphQL permet au client de formuler ses propres requêtes et d'obtenir exactement les données requises.

Avantages clés de GraphQL par rapport à REST

Point d'entrée unique

GraphQL utilise un seul point de terminaison URL pour toutes les opérations, simplifiant l'architecture de l'API et éliminant le besoin de versionnage via l'URL.

Flexibilité des requêtes

Le client définit lui-même la structure de la réponse, en demandant uniquement les champs nécessaires et les données associées.

Élimination de la redondance des données

Les problèmes de sur-récupération (over-fetching) et de sous-récupération (under-fetching) sont résolus au niveau de la requête.

Regroupement des données liées

Possibilité d'obtenir des données de plusieurs entités liées en une seule requête, réduisant ainsi le nombre d'appels au serveur.

Typage strict

Le schéma GraphQL est typé statiquement, ce qui assure la validation des requêtes et l'autocomplétion dans les IDE.

Documentation automatique

Le schéma sert de documentation vivante de l'API, accessible via l'introspection.

Installation et configuration de Graphene

Installation de base

pip install graphene

Intégration avec les frameworks web

Pour Flask :

pip install flask-graphql

Pour Django :

pip install graphene-django

Pour FastAPI :

pip install starlette-graphene3

Intégration avec les bases de données

Pour SQLAlchemy :

pip install graphene-sqlalchemy

Pour Django ORM :

pip install graphene-django

Création d'un serveur GraphQL de base

Exemple avec Flask

from flask import Flask
from flask_graphql import GraphQLView
import graphene

app = Flask(__name__)

class Query(graphene.ObjectType):
    hello = graphene.String(name=graphene.String(default_value="monde"))
    
    def resolve_hello(self, info, name):
        return f"Bonjour, {name} !"

schema = graphene.Schema(query=Query)

app.add_url_rule('/graphql', view_func=GraphQLView.as_view(
    'graphql', 
    schema=schema, 
    graphiql=True  # Active l'interface GraphiQL
))

if __name__ == '__main__':
    app.run(debug=True)

Exemple avec Django

# settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'graphene_django',
    'myapp',
]

GRAPHENE = {
    'SCHEMA': 'myproject.schema.schema'
}

# urls.py
from django.urls import path
from graphene_django.views import GraphQLView

urlpatterns = [
    path('graphql/', GraphQLView.as_view(graphiql=True)),
]

Définition des types et schémas dans Graphene

Création de types personnalisés

import graphene

class User(graphene.ObjectType):
    id = graphene.ID()
    name = graphene.String()
    email = graphene.String()
    age = graphene.Int()
    is_active = graphene.Boolean()
    
    # Champs calculés
    full_name = graphene.String()
    
    def resolve_full_name(self, info):
        return f"{self.first_name} {self.last_name}"

class Post(g                    

Recommendations