Utiliser GraphQL avec l'API Fetch

Utiliser GraphQL avec l'API Fetch

22 October 2021

Maintenant que notre serveur est prêt, nous allons regarder comment utiliser ce dernier avec JavaScript et notamment l'API fetch().

Si vous ne connaissez cette fonctionnalité JavaScript, je vous invite à lire ce cours : API Fetch.

Sélectionner tous les artistes

Le code JavaScript ci-dessous permet de sélectionner tous les artistes de notre base de données. Nous demandons que les prénoms des artistes ainsi que les titres des albums, mais les ID.

fetch('http://127.0.0.1:8000', {
    method: 'post',
    headers: {
        'Content-Type': 'application/json',
    },
    body: JSON.stringify({
        query: `
                query selectArtists {
                    Artists {
                        firstname
                        albums {
                            title
                        }
                    }
                }`
    })
})
.then(res => res.json())
.then(results => console.log(results))
.catch(err => console.log(err))

Faites bien attention à envoyer les données en méthode POST.

Sélectionner un album

Pour la sélection d'un album, nous devons lui passer une variable qui sera transmise à notre query :

fetch('http://127.0.0.1:8000', {
    method: 'post',
    headers: {
        'Content-Type': 'application/json',
    },
    body: JSON.stringify({
        query: `
                query selectAlbum($id: Int!) {
                    Album(id: $id) {
                        id
                        title
                    }
                }`,
        variables: {
            id: 3,
        }
    }),
})
.then(res => res.json())
.then(results => console.log(results))
.catch(err => console.log(err))

Insérer un artiste

L'insertion n'est pas énormément différente de la sélection d'un artiste, hormis qu'il ne s'agit pas d'une query, mais d'une mutation.

fetch('http://127.0.0.1:8000', {
    method: 'post',
    headers: {
        'Content-Type': 'application/json',
    },
    body: JSON.stringify({
        query: `
                mutation createArtist($firstname: String!) {
                    createArtist(firstname: $firstname) {
                        content {
                            id
                            firstname
                        }
                    }
                }`,
        variables: {
            firstname: 'Jane Doe',
        }
    }),
})
.then(res => res.json())
.then(results => console.log(results))
.catch(err => console.log(err))

Template

Pour la sélection, les données doivent être envoyées au format texte dans un objet JSON.

JSON.stringify({
  query: `
    query SomeQuery {
      # your query here
    }`,
  variables: {},
});