SlideShare une entreprise Scribd logo
1  sur  18
REST in peace avec
GraphQL
Fabian Vilers
Dev Day, 2017
Qui suis-je ?
Software Craftsman
.NET / ASP.NET / Node.js / Angular
React / Docker / …
Open Source Activist
Freelance for Dev One
Follow me on Twitter (@fvilers)
and LinkedIn
REST in peace avec
GraphQL
Est-ce un appel au meurtre ?
Non, GraphQL ne va pas « tuer » REST
Tout comme REST n’a pas tué SOAP
Oui, GraphQL apporte de la souplesse dans les interactions
Mais avec une plus grande flexibilité, vient un plus grand coût
Et il n’y a pas que moi qui l’affirme
Pourquoi GraphQL ?
GraphQL solutionne 3 principaux problèmes
Le besoin de faire plusieurs aller-retours entre le serveur et le client pour charger les
données d’une vue complexe
La dépendance des clients vis-à-vis du serveur
Le decalage entre l’expression declarative du client par rapport à la façon dont on récupère
les données
Qu’est-ce que GraphQL ?
Un langage déclaratif
Une fine couche de « traduction » côté serveur
Cette couche peut-être écrite dans n’importe quel langage
Expression d’une requête peut être de deux types
Query (lecture)
Mutation (écriture)
GraphQL n’est pas un moteur de stockage de données
N’importe quel langage, vraiment ?
C#/.NET
Clojure
Elixir
Erlang
Go
Groovy
Java
JavaScript
PHP
Phython
Scala
Ruby
N’importe quel langage, vraiment ?
Quels sont les bénéfices de GraphQL ?
Efficacité
Les requêtes multiples et complexes sont regroupées
La couche GraphQL peut jouer le rôle de façade pour récupérer les données de plusieurs
micro-services
Performance
Les résultats peuvent être mis en cache
GraphQL ne renvoie que les données demandées par le client
Qu’est-ce qui ne va pas avec REST ?
REST est orienté ressource, et implique de multiples terminaisons d’API
Donc, de multiples aller-retours entre client et serveur
REST n’offre pas de langage de requête
Impossible d’affiner la requête
Trop de données sont rapatriées
Encombrement de la réponse avec des métadonnées (pagination, tri, etc.)
REST n’est pas orienté multi versions
Une nouvelle version impliquera souvent de nouvelles terminaisons d’API
REST, ce n’est pas de tout repos
Comment la magie opère-t-elle ?
GraphQL, c’est un schéma fortement typé
Il est composé de champs et de types (primitifs et/ou complexes)
Il est accessible, ce qui permet l’introspection, la validation, et la génération d’outils ad hoc
GraphQL expose les données sous forme de graphe
Totalement indiqué pour récupérer des données hiérarchiques, ou liées sémantiquement
Les clients expriment leur besoin de manière déclarative
Ce qui les rapproche du langage naturel
Le coût de la flexibilité
Sensible aux attaques par déni de service
Avec des requêtes complexes et une structure imbriquée
Haute charge sur plusieurs micro-services
Solutions
Liste blanche
Délai de temporisation
Limiter la profondeur du graphe et le temps d’exécution
Le coût de la flexibilité
Caching
La nature flexible des query rend le caching plus complexe qu’avec REST
Solutions
Côté client, les librairies Relay, ou Apollo facilite la gestion de cette problématique
N+1 SQL
La nature du graphe peut impacter les performances serveur car le sous-requêtage sera
dissocié
Solutions
Côté serveur, la librairie DataLoader permet d’y palier en analysant la query, et en optimisant les
appels DB, et en cachant une partie des données
Démo !
https://github.com/fvilers/devday-graphql
Alors, c’est pas génial GraphQL ?
Merci !

Contenu connexe

Similaire à REST in peace avec GraphQL

Introductions Aux Servlets
Introductions Aux ServletsIntroductions Aux Servlets
Introductions Aux Servlets
François Charoy
 
2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_services2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_services
Camus LANMADOUCELO
 
Data Quality et SOA
Data Quality et SOAData Quality et SOA
Data Quality et SOA
Uniserv
 

Similaire à REST in peace avec GraphQL (20)

Introductions Aux Servlets
Introductions Aux ServletsIntroductions Aux Servlets
Introductions Aux Servlets
 
MS Days 2011 - Windows Azure
MS Days 2011 - Windows AzureMS Days 2011 - Windows Azure
MS Days 2011 - Windows Azure
 
Rxjava pratique
Rxjava pratiqueRxjava pratique
Rxjava pratique
 
PZ_Microservices101_20150210
PZ_Microservices101_20150210PZ_Microservices101_20150210
PZ_Microservices101_20150210
 
Présentation SOA
Présentation SOAPrésentation SOA
Présentation SOA
 
Xebicon2019 m icroservices
Xebicon2019   m icroservicesXebicon2019   m icroservices
Xebicon2019 m icroservices
 
Fondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application FlexFondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application Flex
 
Fondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application FlexFondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application Flex
 
RESTful API - Retour d'expérience
RESTful API - Retour d'expérienceRESTful API - Retour d'expérience
RESTful API - Retour d'expérience
 
2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_services2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_services
 
Data Quality et SOA
Data Quality et SOAData Quality et SOA
Data Quality et SOA
 
De l'open source à l'open API avec Restlet
De l'open source à l'open API avec RestletDe l'open source à l'open API avec Restlet
De l'open source à l'open API avec Restlet
 
Benchmarking NoSQL DataBase dans le cadre d'un projet IoT
Benchmarking NoSQL DataBase dans le cadre d'un projet IoTBenchmarking NoSQL DataBase dans le cadre d'un projet IoT
Benchmarking NoSQL DataBase dans le cadre d'un projet IoT
 
Web dev open door
Web dev   open doorWeb dev   open door
Web dev open door
 
Resource Oriented Architecture
Resource Oriented ArchitectureResource Oriented Architecture
Resource Oriented Architecture
 
S51 vos projets web services ibm i a l aide de php
S51   vos projets web services ibm i a l aide de phpS51   vos projets web services ibm i a l aide de php
S51 vos projets web services ibm i a l aide de php
 
Soa & services web
Soa & services webSoa & services web
Soa & services web
 
Bbl microservices avec vert.x cdi elastic search
Bbl microservices avec vert.x cdi elastic searchBbl microservices avec vert.x cdi elastic search
Bbl microservices avec vert.x cdi elastic search
 
Linq et Entity framework
Linq et Entity frameworkLinq et Entity framework
Linq et Entity framework
 
Base de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvreBase de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvre
 

Plus de Fabian Vilers

Plus de Fabian Vilers (10)

React live coding
React live codingReact live coding
React live coding
 
JavaScript: bonnes pratiques, astuces, et cauchemars
JavaScript: bonnes pratiques, astuces, et cauchemarsJavaScript: bonnes pratiques, astuces, et cauchemars
JavaScript: bonnes pratiques, astuces, et cauchemars
 
MEAN (Jeudis du Libre)
MEAN (Jeudis du Libre)MEAN (Jeudis du Libre)
MEAN (Jeudis du Libre)
 
MEAN (DevFM)
MEAN (DevFM)MEAN (DevFM)
MEAN (DevFM)
 
Introduction au BDD (Behavior Driven Development)
Introduction au BDD (Behavior Driven Development)Introduction au BDD (Behavior Driven Development)
Introduction au BDD (Behavior Driven Development)
 
Introduction à meteor
Introduction à meteorIntroduction à meteor
Introduction à meteor
 
CQRS
CQRSCQRS
CQRS
 
Owin & katana
Owin & katanaOwin & katana
Owin & katana
 
TypeScript
TypeScriptTypeScript
TypeScript
 
Social Sitters Final Pitch
Social Sitters Final PitchSocial Sitters Final Pitch
Social Sitters Final Pitch
 

REST in peace avec GraphQL

  • 1. REST in peace avec GraphQL Fabian Vilers Dev Day, 2017
  • 2. Qui suis-je ? Software Craftsman .NET / ASP.NET / Node.js / Angular React / Docker / … Open Source Activist Freelance for Dev One Follow me on Twitter (@fvilers) and LinkedIn
  • 3. REST in peace avec GraphQL
  • 4. Est-ce un appel au meurtre ? Non, GraphQL ne va pas « tuer » REST Tout comme REST n’a pas tué SOAP Oui, GraphQL apporte de la souplesse dans les interactions Mais avec une plus grande flexibilité, vient un plus grand coût
  • 5. Et il n’y a pas que moi qui l’affirme
  • 6. Pourquoi GraphQL ? GraphQL solutionne 3 principaux problèmes Le besoin de faire plusieurs aller-retours entre le serveur et le client pour charger les données d’une vue complexe La dépendance des clients vis-à-vis du serveur Le decalage entre l’expression declarative du client par rapport à la façon dont on récupère les données
  • 7. Qu’est-ce que GraphQL ? Un langage déclaratif Une fine couche de « traduction » côté serveur Cette couche peut-être écrite dans n’importe quel langage Expression d’une requête peut être de deux types Query (lecture) Mutation (écriture) GraphQL n’est pas un moteur de stockage de données
  • 8. N’importe quel langage, vraiment ? C#/.NET Clojure Elixir Erlang Go Groovy Java JavaScript PHP Phython Scala Ruby
  • 10. Quels sont les bénéfices de GraphQL ? Efficacité Les requêtes multiples et complexes sont regroupées La couche GraphQL peut jouer le rôle de façade pour récupérer les données de plusieurs micro-services Performance Les résultats peuvent être mis en cache GraphQL ne renvoie que les données demandées par le client
  • 11. Qu’est-ce qui ne va pas avec REST ? REST est orienté ressource, et implique de multiples terminaisons d’API Donc, de multiples aller-retours entre client et serveur REST n’offre pas de langage de requête Impossible d’affiner la requête Trop de données sont rapatriées Encombrement de la réponse avec des métadonnées (pagination, tri, etc.) REST n’est pas orienté multi versions Une nouvelle version impliquera souvent de nouvelles terminaisons d’API
  • 12. REST, ce n’est pas de tout repos
  • 13. Comment la magie opère-t-elle ? GraphQL, c’est un schéma fortement typé Il est composé de champs et de types (primitifs et/ou complexes) Il est accessible, ce qui permet l’introspection, la validation, et la génération d’outils ad hoc GraphQL expose les données sous forme de graphe Totalement indiqué pour récupérer des données hiérarchiques, ou liées sémantiquement Les clients expriment leur besoin de manière déclarative Ce qui les rapproche du langage naturel
  • 14. Le coût de la flexibilité Sensible aux attaques par déni de service Avec des requêtes complexes et une structure imbriquée Haute charge sur plusieurs micro-services Solutions Liste blanche Délai de temporisation Limiter la profondeur du graphe et le temps d’exécution
  • 15. Le coût de la flexibilité Caching La nature flexible des query rend le caching plus complexe qu’avec REST Solutions Côté client, les librairies Relay, ou Apollo facilite la gestion de cette problématique N+1 SQL La nature du graphe peut impacter les performances serveur car le sous-requêtage sera dissocié Solutions Côté serveur, la librairie DataLoader permet d’y palier en analysant la query, et en optimisant les appels DB, et en cachant une partie des données
  • 17. Alors, c’est pas génial GraphQL ?