GraphQL a révolutionné la façon dont les applications consomment les API. Au lieu de points de terminaison fixes, le client demande exactement les données dont il a besoin. Ce guide présente GraphQL, la comparaison avec REST et comment l'implémenter dans les applications mobiles.
Qu'est-ce que GraphQL
Définition
Langage de requête pour les API développés par Facebook.
###Concept
Le client définit la structure de réponse, pas le serveur.
Schéma
Contrat tapé qui définit les données disponibles.
GraphQL contre REST
Surcharge
REST renvoie des données fixes. GraphQL renvoie uniquement l'ordre.
Sous-récupération
REST peut nécessiter plusieurs appels. GraphQL dans une requête.
Flexibilité
Le client contrôle ce qu’il reçoit.
Gestion des versions
GraphQL fait évoluer le schéma sans versions d'API.
Concepts fondamentaux
Requête
Récupérer des données. Opérations de lecture.
###Mutations
Modifier les données. Opérations d'écriture.
Abonnement
Données en temps réel via WebSocket.
Schéma
Définition des types et des opérations.
Résoudre
Fonction qui récupère les données pour chaque champ.
Avantages pour les mobiles
Économie des données
Moins d'octets transférés.
Moins de latence
Un appel contre plusieurs.
Hors ligne d'abord
Le cache le plus intelligent possible.
Saisie
Schéma comme contrat. Génération de codes.
Implémentation du back-end
Serveurs GraphQL
Serveur Apollo, GraphQL Yoga, Hasura.
Conception de schéma
Domaine modèle, pas base de données.
Résolveurs
Récupérez des données à partir de n’importe quelle source.
###Chargeur de données
Traitement par lots pour éviter les requêtes n+1.
## Clients mobiles
###ApolloClient
iOS, Android, React Native. Riche en fonctionnalités.
Relais
Facebook. Opinioné, optimisé.
Requête GraphQL
Prends-le. Pour les cas simples.
Génération de code
Types générés à partir du schéma. Tapez la sécurité.
Langage de requête
Champs
Précisez exactement ce que vous voulez.
Arguments
Filtrez et personnalisez.
Alias
Renommez les champs dans la réponse.
Fragments
Réutilisez les sélections.
###Variables
Paramètres dynamiques.
##Mutations
Syntaxe
Similaire à une requête, mais à modifier.
Types d'entrée
Objets complexes comme paramètre.
Réponse
Renvoie les données mises à jour.
Mise à jour optimiste
Mises à jour de l'interface utilisateur avant la réponse.
Abonnements
Cas d'utilisation
Chat, notifications, flux en temps réel.
Transports
WebSocket, SSE.
Mise en cache
Met automatiquement à jour le cache.
Mise en cache
Cache normalisé
Entités stockées par ID.
Récupérer les politiques
cache d'abord, réseau uniquement, cache et réseau.
Invalidation
Mettre à jour le cache après les mutations.
Persistance
Cache persistant pour hors ligne.
##Performances
Complexité des requêtes
Limitez la profondeur et la complexité.
Pagination
Basé sur le curseur pour les grandes listes.
Requêtes persistantes
Hachage au lieu d'une chaîne complète.
CDN
Mise en cache Edge pour les requêtes publiques.
Sécurité
Authentification
Jeton dans l'en-tête.
Autorisation
Validez les autorisations sur les résolveurs.
Limitation du débit
Par opération, pas par point final.
Profondeur de la requête
Limitez la profondeur pour éviter les abus.
Gestion des erreurs
Succès partiel
GraphQL peut renvoyer des données et des erreurs.
Types d'erreurs
Personnalisez par type d'erreur.
Gestion des clients
Gérez les erreurs avec élégance.
Outillage
###GraphiQL/Aire de jeux
Interface pour explorer le schéma.
Générateurs de codes
graphql-codegen. Types automatiques.
Apollon Studio
Surveillance, registre de schémas.
### Peluchage
eslint-plugin-graphql.
##Migration REST
Progressive
Ajoutez GraphQL à côté de REST.
Fédération
Services multiples GraphQL unis.
Emballage
GraphQL devant le REST existant.
## meilleures pratiques
Schéma d'abord
Définir le schéma avant l'implémentation.
Nommer
Des conventions claires. Types PascalCase, champs camelCase.
###Documentations
Descriptions dans le schéma.
Dépréciation
Marquez les champs obsolètes.
Quand utiliser GraphQL
Bon pour
- Applications mobiles avec des données complexes
- Plusieurs clients différents
- Itération rapide du produit
Pas idéal pour
- API simples
- Téléchargement de fichiers lourds
- Temps réel intensif (pensez à gRPC)
Conclusion
GraphQL est puissant pour les applications mobiles qui ont besoin d'efficacité et de flexibilité. Apprenez les concepts, choisissez la pile appropriée et mettez-la en œuvre avec discipline. Le résultat est des applications plus rapides et un développement plus productif.
##FAQ
1) GraphQL remplace REST ? Pas nécessairement. Chacun a des cas d’utilisation. Ils peuvent coexister.
2) GraphQL est-il plus lent que REST ? Pas intrinsèquement. Cela dépend de la mise en œuvre.
3) Dois-je réécrire le backend ? Non. GraphQL peut envelopper les services existants.
4) Spécifique aux mobiles ou est-ce que ça marche pour le Web ? Fonctionne pour n’importe quel client. Le mobile en profite beaucoup.
5) Apollo est-il obligatoire ? Non, c’est populaire mais il existe des alternatives.
A lire aussi
- API GraphQL modernes : conception de schémas, performances et modèles qui fonctionnent
- GraphQL dans les applications : coûts, prix et checklist avant adoption -Backend pour les applications : architecture, technologies et bonnes pratiques -Microservices dans les applications : architecture distribuée pour mobile -GraphQL pour les applications : coûts et tarification avec des cas réels
- API pour les applications
