GraphQL everywhere with GraphQLite
Comment rendre plus simple le travail des développeurs PHP qui souhaitent utiliser GraphQL ?
TheCodingMachine vous facilite la tâche grâce à sa librairie GraphQLite permettant de faire du GraphQL en PHP.
GRAPHQL C’EST QUOI ?
GraphQL est un langage de requêtes – ou protocole de communication – entre un client et un serveur. Développé par Facebook, il propose une alternative aux API REST et aux Webservices comme SOAP/WSDL.
Facebook fournit une implémentation par défaut en JavaScript: un client (Relay) ainsi qu’une librairie NodeJS (GraphQL.js) mais ce protocole peut être implémenté par n’importe quel langage et dans n’importe quelle technologie.
Par exemple en PHP, quelques librairies se démarquent comme Webonyx/graphql-php, la plus connue, ou Dagiaonline/graphql-php la petite nouvelle. Ces librairies vont analyser une requête GraphQL afin de l’exécuter.
Au-dessus de ces librairies s’en trouvent d’autres qui simplifient l’expérience utilisateur. Par exemple pour Symfony, API Platform permet de faire du REST et du GraphQL et depuis peu de temps, nous avons mis à disposition thecodingmachine/GraphQLite pour le PHP.
L’ÉCOSYSTÈME DE GRAPHQL
Pour utiliser GraphQL côté Serveur, il va nous falloir quelque chose qui sache analyser la requête GraphQL, ce qu’on appelle GraphQL Middleware. En PHP cela va être Webonyx ainsi que les librairies au-dessus. En JavaScript ça sera Express-graphql.
Nous pouvons envoyer directement la requête HTTP mais il est plus simple d’utiliser un client GraphQL qui saura nous faciliter l’utilisation. ReactJS ou RelayJS fournis par Facebook, Apollo qui s’utilise en Vue, en Angular et avec React.
Si j’utilise directement Webonyx, la ligne PHP me permet de déclarer mes types GraphQL. A chaque fois que j’ai un type, il va falloir que je le déclare. Une fois que le type est défini, il faut définir la query qui est le point d’entrée. Cette méthode est certes longue mais complète.
GRAPHQLITE
GraphQLite nous permet de faire la même chose, en beaucoup moins de ligne de code ! En PHP il y a des types, même s’ils ne sont pas obligatoires, et on tire partie du fait que PHP soit mieux typé que le JS afin d’automatiser le maximum de choses. En bonus : cette méthode marche bien avec TDBM (l’ORM de notre framework Mouf) car à partir du modèle de donnés on génère des objets PHP avec lesquels on arrive à générer des objets GraphQL. Cette méthode marche aussi avec Doctrine (pour les personnes faisant du Symfony).
GraphQLite est un Framework agnostique que l’on peut utiliser dans Mouf, dans Symfony, dans Laravel… Il est basé sur Webonyx.
Les plus
- Input types
- Union types
- File uploads
- External type declaration
Retrouvez toute la documentation sur notre site : https://graphqlite.thecodingmachine.io
What’s next ?
Notre version stable de GraphQLite sera disponible dans quelques semaines. Lorsque cela sera fait, nous allons réaliser un module Symfony Flex, réaliser une refonte complète du support TDBM5 afin de rajouter des annotations directement dans la base de données et enfin nous voulons injecter des services dans la query par exemple.
Et côté JS ?
Du côté client nous allons vous présenter Apollo avec Vue.JS, si vous utilisez les autres frameworks JavaScript comme React ou Angular le processus est pratiquement le même. L’installation d’Apollo est classique mais il ne faut pas oublier de rajouter les dépendances dans votre package.json, paquet propre à Apollo, et d’autres graphQL.
Comment fonctionne Apollo ?
Commencez par mettre le tag ApolloQuery en spécifiant la query GraphQL ainsi que la variable utilisée dans cette query (ici search qui est reliée au modèle de l’application). Cela va déclencher automatiquement la query et retourne les informations spécifiées dans le dossier GraphQL. Apollo vous retourne les états de votre requête : loading (pendant que la recherche est faite), error (si votre requête a rencontré une erreur) et le résultat data.
Avec GraphQLite, il est maintenant très facile de créer une API. Cela fonctionne aussi bien avec PHP qu’avec JavaScript et TypeScript grâce aux nombreux outils déployés.
Mais il faut faire attention aux performances, nous pouvons vite faire des choses peu efficaces avec GraphQL.
VOUS AVEZ AIMÉ CET ARTICLE ET VOUS VOULEZ EN SAVOIR PLUS ?
RENDEZ-VOUS TOUT DE SUITE SUR NOTRE BLOG TECHNIQUE !