Skip to content

charesbast/hands-on-graphql

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

hands-on-graphql

Build your first graphQL runtime step by step !

IMPORTANT

  • la correction de l'exercice utilise l'implémentation javascript de graphql.
  • Afin de pouvoir tester facilement le service graphql tout au long du hands-on, lancer la tâche npm run watch et utiliser graphiql à l'urllocalhost:4000/graphql

Exercice 1

Création d'une ressource simple

Checkout la branche master du projet pour cette première question.

But: Créer un service graphQL qui répondra à la requête suivante:

query {
  user {
    id
    name
  }
}

et qui donnera la réponse suivante (statique):

{
 data : {
   user : {
     id : 1,
     name : "Toto",
   }
 }
}

Type de la ressource

  type User {
    id : Number
    name : String
  }

Etapes:

  1. Créer le schéma graphql à l'aide de la méthode GraphQLSchema
  2. Créer la ressource principale pour les requêtes "GET": Query
  3. Créer la ressource User

Rappel: pour cette question les resolveurs retourneront une valeur en dur dans le code.

Solution disponible sur la branche solutions/question-1

Exercice 2

Création d'une ressource dynamique

Pour la suite du hands-on, une base de données in-memory sera utilisée, lokijs. L'initialisation de deux collections est déjà implémentée et les méthodes utiles pour les manipuler sont diponibles sur la Documentation de lokijs

But: Créer un service graphQL qui puisse répondre à cette requête:

query {
  book(id : 2) {
    title
    year
  }
}

Cette requête devra renvoyer le titre et année de parution du livre dont l'id est 2.

Types de la ressource

type Book {
  id : Number
  title : String
  year : Number
}

NB: Utiliser la collection "books" initialisée dans src/db/index.js

Solution disponible sur la branche solutions/question-2

Exercice 3

Référencer une autre ressource

checkout la branche question-3

But: Créer un service graphQL qui réponde à ces deux requêtes:

// le titre, année et autheur (nom, prénom) du livre d'id 2

query {
  book(id : 2) {
    title
    year
    likes
    author {
      firstName
      lastName
    }
  }
}
// nom et prénom de l'auteur d'id 1, ainsi que ses livres (titre et année)
// la popularité sera la somme des likes de tous les livres de l'auteur
query {
  author(id : 1) {
    firstName
    lastName
    books {
      title
      year
    }
    popularity
  }
}

Types des ressources

type Book {
  id : Number
  title : String
  year : Number
  author : Author
}

type Author {
  id : Number
  firstName : String
  lastName : String
  books : [Book]
  popularity : Number
}

NB: Utiliser les collection "books" et "authors" initialisées dans src/db/index.js

Solution disponible sur la branche solutions/question-3

Exercice 4

Mutations

checkout la branche question-4

But: Modifier le service graphQL pour qu'il réponde à ces trois requêtes:

// POST - Ajouter un livre en indiquant obligatoirement id, title, author_id et year (Likes automatiquement initialisés à 0 par défaut)

mutation {
  addBook(id : 9, title : "Martine fait du GraphQL", author_id : 1, year : 2017) {
    id,
    likes
  }
}
// PUT - Incrémenter le nombre de likes d'un livre en indiquant son titre

mutation {
  likeBook(title : "Martine fait du GraphQL") {
    likes
  }
}
// DELETE - Supprimer un livre en indiquant son id

mutation {
  deleteBook(id : 9) {
    author {
      firstName,
      lastName,
      books {
        title
      }
    }
  }
}

NB: Utiliser les collection "books" et "authors" initialisées dans src/db/index.js

Martine

About

Build your first graphQL service step by step !

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published