Effectuer des requêtes GraphQL avec requests

Fonctions :

  • Effectuer une requête GraphQL avec requests

    Lorsque vous effectuez une requête GraphQL, vous devez envoyer un corps de requête au format JSON dans lequel vous spécifiez les champs et les objets que vous voulez récupérer. Vous pouvez envoyer cette requête via la méthode POST de requests.

    Importation :

    import requests

    Exemple de code :

    import requests
    
    # URL de l'API GraphQL
    url = "https://api.exemple.com/graphql"
    
    # La requête GraphQL à envoyer
    query = """
    {
      utilisateur(id: 1) {
        nom
        email
      }
    }
    """
    
    # Définir les headers, spécifiant que la requête est au format JSON
    headers = {
        "Content-Type": "application/json"
    }
    
    # Effectuer la requête POST avec les données de la requête GraphQL
    response = requests.post(url, json={"query": query}, headers=headers)
    
    # Vérifier si la requête a réussi
    if response.status_code == 200:
        # Récupérer la réponse JSON
        data = response.json()
        # Afficher le nom et l'email de l'utilisateur
        print("Nom:", data['data']['utilisateur']['nom'])
        print("Email:", data['data']['utilisateur']['email'])
    else:
        print("Erreur lors de la requête", response.status_code)

    Explication du code :

    • La requête GraphQL est définie sous forme de chaîne de caractères query et envoyée via la méthode POST.
    • Le corps de la requête contient un dictionnaire avec une clé "query", qui correspond à la requête GraphQL que vous souhaitez effectuer.
    • Le response.json() est utilisé pour convertir la réponse en JSON, ce qui vous permet de manipuler les données retournées.
  • Passer des variables dans la requête GraphQL

    GraphQL vous permet de paramétrer les requêtes en utilisant des variables. Cela permet de rendre les requêtes plus dynamiques.

    Exemple de code :

    import requests
    
    # URL de l'API GraphQL
    url = "https://api.exemple.com/graphql"
    
    # La requête GraphQL avec des variables
    query = """
    query GetUser($userId: ID!) {
      utilisateur(id: $userId) {
        nom
        email
      }
    }
    """
    
    # Variables à passer dans la requête
    variables = {
        "userId": 1
    }
    
    # Définir les headers
    headers = {
        "Content-Type": "application/json"
    }
    
    # Effectuer la requête POST avec la requête et les variables
    response = requests.post(url, json={"query": query, "variables": variables}, headers=headers)
    
    # Vérifier si la requête a réussi
    if response.status_code == 200:
        data = response.json()
        print("Nom:", data['data']['utilisateur']['nom'])
        print("Email:", data['data']['utilisateur']['email'])
    else:
        print("Erreur lors de la requête", response.status_code)

    Explication du code :

    • $userId dans la requête est une variable, et elle est passée dans le dictionnaire variables.
    • Les variables permettent de rendre la requête plus flexible, en vous permettant de changer les paramètres sans modifier la requête elle-même.
  • Manipuler les erreurs dans les réponses GraphQL

    Les requêtes GraphQL peuvent aussi renvoyer des erreurs spécifiques. Par conséquent, il est important de vérifier non seulement le code de statut HTTP, mais aussi les erreurs présentes dans la réponse JSON.

    Importation :

    import requests

    Exemple de code :

    import requests
    
    # URL de l'API GraphQL
    url = "https://api.exemple.com/graphql"
    
    # La requête GraphQL
    query = """
    {
      utilisateur(id: 1) {
        nom
        email
      }
    }
    """
    
    headers = {
        "Content-Type": "application/json"
    }
    
    # Effectuer la requête POST avec la requête GraphQL
    response = requests.post(url, json={"query": query}, headers=headers)
    
    # Vérifier si la requête a réussi
    if response.status_code == 200:
        data = response.json()
        
        # Vérifier les erreurs dans la réponse GraphQL
        if 'errors' in data:
            print("Erreurs GraphQL:", data['errors'])
        else:
            print("Nom:", data['data']['utilisateur']['nom'])
            print("Email:", data['data']['utilisateur']['email'])
    else:
        print("Erreur lors de la requête", response.status_code)

    Explication du code :

    • data['errors'] permet de vérifier si des erreurs sont présentes dans la réponse GraphQL. Si des erreurs sont trouvées, elles sont affichées.
    • Si aucune erreur n'est présente, on continue à traiter les données de la réponse.
  • Effectuer des mutations avec GraphQL

    Les mutations GraphQL sont utilisées pour modifier des données. Elles fonctionnent de manière similaire aux requêtes, mais avec des opérations qui changent les informations sur le serveur.

    Exemple de code :

    import requests
    
    # URL de l'API GraphQL
    url = "https://api.exemple.com/graphql"
    
    # Mutation pour modifier un utilisateur
    mutation = """
    mutation UpdateUser($userId: ID!, $nom: String!, $email: String!) {
      updateUtilisateur(id: $userId, nom: $nom, email: $email) {
        nom
        email
      }
    }
    """
    
    # Variables à passer dans la mutation
    variables = {
        "userId": 1,
        "nom": "Nouveau Nom",
        "email": "nouveau.email@exemple.com"
    }
    
    headers = {
        "Content-Type": "application/json"
    }
    
    # Effectuer la requête POST avec la mutation et les variables
    response = requests.post(url, json={"query": mutation, "variables": variables}, headers=headers)
    
    # Vérifier si la requête a réussi
    if response.status_code == 200:
        data = response.json()
        print("Nom mis à jour:", data['data']['updateUtilisateur']['nom'])
        print("Email mis à jour:", data['data']['updateUtilisateur']['email'])
    else:
        print("Erreur lors de la requête", response.status_code)

    Explication du code :

    • Mutation : Cette opération permet de mettre à jour les informations de l'utilisateur avec les nouvelles valeurs passées dans les variables.
    • L'utilisation de mutations suit la même structure que les requêtes, mais elles modifient les données plutôt que de les récupérer.