Consommation d’API REST et GraphQL
Sommaire
- 1- Objectif
- 2- Introduction aux APIs
- 2.1- Endpoint
- 2.2- Méthodes HTTP
- 2.3- Statut HTTP
- 2.4- Authentication
- 3- API REST
- 3.1- Principes REST
- 3.2- Méthodes HTTP courantes
- 3.3- Structure des endpoints
- 3.4- Formats de données
- 3.5- Exemple de consommation avec JavaScript
- 4- API GraphQL
- 4.1- Concepts fondamentaux
- 4.2- Exemple de requête
- 4.3- Exemple de consommation en JavaScript
- 5- Comparaison REST vs GraphQL
- 6- Outils et bibliothèques
- 6.1- REST
- 6.2- GraphQL
- 7- Bonnes pratiques
- 7.1- REST
- 7.2- GraphQL
- 8- Sécurité
- 8.1- Méthodes d’authentification
- 8.2- Bonnes pratiques
- 9- Exercices pratiques
- 9.1- Exercice 1 : Consommation d’API REST
- 9.2- Exercice 2 : Migration vers GraphQL
- 9.3- Exercice 3 : Application complète
- 10- Conclusion
- 10.1.1- Cours Flutter
Consommation d’API REST et GraphQL
-
Objectif
-
Introduction aux APIs
- Une API (Application Programming Interface) est un ensemble de règles permettant à des applications de communiquer entre elles.
- Les principaux types d’APIs :
- REST (Representational State Transfer)
- GraphQL (Graph Query Language)
- SOAP (Simple Object Access Protocol)
- gRPC (Google Remote Procedure Call)
- Concepts clés :
-
Endpoint
- Une URL spécifique exposée par l’API.
-
Méthodes HTTP
GET, POST, PUT, DELETE...
-
Statut HTTP
- Codes de réponse (
200
,404
,500
, etc.). -
Authentication
- Mécanismes de sécurisation (clé API, JWT, OAuth…)
-
API REST
-
Principes REST
- Client-Serveur : séparation des responsabilités.
- Sans état : chaque requête contient toutes les infos nécessaires.
- Cacheable : possibilité de mettre en cache.
- Interface uniforme : méthodes HTTP standardisées.
- Système en couches : architecture modulaire.
-
Méthodes HTTP courantes
-
Structure des endpoints
-
Formats de données
- JSON (le plus courant)
- XML
- Form Data (pour les formulaires)
-
Exemple de consommation avec JavaScript
-
API GraphQL
-
Concepts fondamentaux
- Query : lire des données.
- Mutation : écrire/modifier.
- Subscription : mises à jour temps réel.
- Schema : définition des types.
- Resolver : exécution des requêtes.
-
Exemple de requête
-
Exemple de consommation en JavaScript
-
Comparaison REST vs GraphQL
-
Outils et bibliothèques
-
REST
- Fetch API
- Axios
- Postman
- Swagger/OpenAPI
-
GraphQL
- Apollo Client
- Relay
- GraphiQL
- Hasura
-
Bonnes pratiques
-
REST
- Bien utiliser les méthodes HTTP.
- Versionner l’API.
- Mettre en place pagination, filtres, tri.
- Gestion correcte des erreurs.
-
GraphQL
- Utiliser des fragments pour réutiliser du code.
- Pagination basée sur des curseurs.
- Optimistic UI pour améliorer l’expérience.
- Utiliser des directives conditionnelles.
-
Sécurité
-
Méthodes d’authentification
- API Keys
- JWT
- OAuth 2.0
- Basic Auth
-
Bonnes pratiques
- Validation des entrées côté client et serveur.
- Rate limiting.
- HTTPS obligatoire.
-
Exercices pratiques
-
Exercice 1 : Consommation d’API REST
- Utiliser JSONPlaceholder pour afficher, créer, modifier et supprimer des utilisateurs.
-
Exercice 2 : Migration vers GraphQL
- Reprendre l’exercice 1 et le migrer en GraphQL.
-
Exercice 3 : Application complète
- Application de gestion de tâches avec API REST ou GraphQL + Authentification JWT.
-
Conclusion
- La consommation d’API REST et GraphQL est une compétence incontournable.
- REST est simple et bien établi, GraphQL est flexible et efficace.
- Le choix dépend des besoins et de la complexité de l’application.
Méthode | Action | Description |
---|---|---|
GET | Read | Récupérer des données |
POST | Create | Créer une ressource |
PUT | Update | Modifier une ressource |
DELETE | Delete | Supprimer une ressource |
PATCH | Partial Update | Modifier partiellement |
GET /users # Récupérer tous les utilisateurs GET /users/1 # Récupérer l’utilisateur ID=1 POST /users # Créer un nouvel utilisateur PUT /users/1 # Modifier l’utilisateur ID=1 DELETE /users/1 # Supprimer l’utilisateur ID=1
// GET - Récupérer des données async function fetchUsers() { const response = await fetch('https://api.example.com/users'); const users = await response.json(); console.log(users); }
// POST - Créer un utilisateur
async function createUser(userData) {
const response = await fetch('https://api.example.com/users
', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(userData)
});
const newUser = await response.json();
console.log('Utilisateur créé:', newUser);
}
query GetUsers { users { id name email posts { id title } } }
mutation CreateUser($input: UserInput!) {
createUser(input: $input) {
id
name
email
}
}
const API_URL = 'https://api.example.com/graphql';
async function graphqlQuery(query, variables = {}) {
const response = await fetch(API_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ query, variables })
});
return response.json();
}
Aspect | REST | GraphQL |
---|---|---|
Structure | Multiples endpoints | Un seul point d’entrée |
Données | Fixes (overfetch/underfetch) | Précises (seulement ce qu’il faut) |
Versioning | URL ou headers | Évolution naturelle |
Documentation | Swagger/OpenAPI | Introspection du schema |