Les queries GraphQL

Les queries GraphQL

22 octobre 2021

Les resolvers vont permettent de lire les queries en mode lecture et de récupérer les données en base de données. Avant de les générer, nous avons besoin des queries.

Pourquoi avons-nous besoin d'une requête ?
Les requêtes GraphQL aident à réduire la récupération excessive des données. Contrairement à une API Rest, GraphQL permet de restreindre les champs qui doivent être récupérés sur le serveur. Cela signifie des requêtes plus petites et moins de trafic sur le réseau, ce qui réduit à son tour le temps de réponse.

Nous allons avoir besoin de différentes solutions dans la récupération de nos résultats :

  • Récupérer tous nos artistes
  • Récupérer un artiste selon un ID
  • Récupérer tous nos albums
  • Récupérer un album selon un ID

Dans le dossier config/graphql/types, créez le fichier Query.yaml avec ce contenu correspondant à nos entitées précédemment créé :

Query:
    type: object
    config:
        fields:
            Artist:
                type: 'Artist'
                args:
                    id:
                        description: 'Resolves Artist using its id.'
                        type: 'Int!'
            Artists:
                type: '[Artist]'
            Album:
                type: 'Album'
                args:
                    id:
                        description: 'Resolves Album using its id.'
                        type: 'Int!'
            Albums:
                type: '[Album]'

Mon premier champ Artist, au singulier, permet de récupérer un artiste selon un id. Le second champ Artists, au pluriel, permet de récupérer tous les artistes en se fondant sur l'entité Artist précédemment créer. Il en va de même pour les champs Album et Albums.

À partir de maintenant, vous avez accès à la documentation depuis l'interface de GraphiQL, pensez à actualiser la page et effectuer un essai depuis le panneau de gauche avec la requête qui suit. Nous demandons à récupérer les id et firstname des différents artistes. Il est pleinement possible de demander seulement les prénoms en retirant id de la requête ci-dessous :

{
  Artists {
    id,
    firstname
  }
}

Vous pouvez demander l'artiste relié à tous vos albums de la manière suivante :

{
  Albums {
    artist {
      id
    }
  }
}

Si vous souhaitez récupérer un seul artiste selon son ID, la requête ressemblera à :

{
  Artist(id: 12) {
    id,
    firstname
  }
}

Peu importe la requête testée, vous obtiendrez en résultat à null pour le moment. Ce résultat est normal, car nous n'avons aucuns resolvers instauré qui permet la récupération des données en base de données.

Pensez à insérer des données de tests dans la base de données. Pour cela, utiliser les fixtures.