Objectif GraphQL – Qu’est-ce que c’est, à quoi ça sert ?

Le 22/11/2018

Dans Développement

Aujourd'hui le BlogDuWebdesign vous propose le premier article d'un petit dossier centré sur GraphQL. Aujourd'hui, les bases.

Pourquoi cette série d'articles ?

Cela fait maintenant plusieurs mois que je m'intéresse à GraphQL sans comprendre le fonctionnement/rôle de cette ressource par faute du temps nécessaire pour me pencher vraiment dessus. J'ai donc décidé qu'il était temps de prendre le temps en question et en profiter pour partager mes découvertes avec vous !

Sachez qu'à l'heure ou j'écris ces lignes, mes compétences en GraphQL se limites donc à "c'est un query langage pour discuter entre applications et serveurs". Il est donc possible que je comprenne mal des choses, que j'écrive des erreurs, etc. J'éditerai les articles précédents au fur et à mesure que des articles s'ajoutent au dossier, pour ne pas laisser d'énormité trainer.

GraphQL, qu'est-ce que c'est ?

Le plus compliqué à comprendre avec GraphQL n'aura pour moi pas été ce qu'il est, mais ce qu'il n'est pas. Cela vient certainement du fait que pour m'en sortir j'essaye souvent de travailler par comparaisons, et que j'ai essayé de voir en GraphQL une sorte de nouvelle version de MongoDB, de CouchDB ou encore de LokiJS. Or, ce n'est pas du tout ça. GraphQL n'est pas une base de données ni un moyen de stocker vos données sous une forme ou une autre. Ce n'est pas non plus un service web permettant d'héberger vos données. GraphQL, c'est avant tout un langage.

Plus précisément, comme son nom l'indique GraphQL est un "query language", c'est-à-dire un langage formel permettant d'écrire des requêtes. Vous connaissez certainement déjà un autre query language : le SQL (Structured Query Language) qui permet d'écrire des requêtes pour converser avec des bases de données. Mais contrairement à ce dernier GraphQL n'est pas là pour permettre la communication avec votre base de données, mais entre la partie interface de votre application (que vous la construisiez côté serveur ou côté client) et une partie serveur s'occupant de la gestion de données. Bref, comme le dit si bien la première page de GraphQL, c'est un query language pour nos APIs.

Graphql

En parallèle de cette partie transactionnelle, le langage a aussi (comme le SQL d'ailleurs) une autre facette, permettant de définir les structures composant vos données ainsi que les façons valides de demander ces dernières.

Pourquoi utiliser GraphQL ?

La raison principale semble être de découpler son interface et son store de donnée au plus possible, non seulement pour simplifier le développement et l'évolution de votre application web mais aussi pour mermettre à plusieurs applications web de artager les mêmes données.

Il semblerait qu'il y ai énormément d'autres raisons d'utiliser GraphQL, comme des outils de dev simplifiant le travail, une gestion de messaging permettant de faire des applications temps réel, et un système d'évolution sans versions d'API vraiment très interessant. Je ne m'avance pas plus pour l'instant sur ce point, on verra surement tout cela lors des premiers tests et petits projets.

Ou télécharger GraphQL ?

Boum, activation de la carte piège ! Si vous vous êtes réellement posé cette question, c'est que vous n'avez pas encore réussi à comprendre ce qu'est GraphQL. On ne peut "pas" télécharger GraphQL vu que ce dernier est un langage. On peut en revanche évidemment télécharger des implémentations de GraphQL dans de très nombreux langages, voire même des frameworks construits autour de graphQL.

Pour illustrer ça, je vous propose de jeter un oeil à une de ces implémentations de GraphQL.

L'implémentation "officielle" de GraphQL, en Javascript

Commencer avec graphql

GraphQL-ruby

Graphql ruby

Une implémentation en PHP

Graphql siler

Vous pourrez trouver de nombreuses autres implémentations directement dans la documentation de GraphQL.

Et coté client ?

Il est aussi possible de trouver des ressources permettant de simplifier les appels GraphQL depuis React, Vue, ou même du Javascript tout simple. Notez quand même que ces ressources ne sont pas obligatoires, vous pourriez très bien décider de fonctionner simplement avec des requêtes GET faites avec Axios ou une autre ressource AJAX.

La suite

La semaine prochaine, nous allons essayer d'installer notre propre serveur graphQL, un client, et faire nos premiers appels. Nous essaierons aussi certainement de lier notre partie serveur à une base de données "traditionnelle", car servir de simple donnée contenue dans un JSON reste quelque chose d'assez peu utile dans la vie réelle.